a XC?h7@sdZddlZddlZddlZddlmZmZddlmZddl m Z ddl m Z dddZ d d Zd d ZGd dde ZddZedkrddlmZeddddddlmZeedS)zGrep dialog for Find in Files functionality. Inherits from SearchDialogBase for GUI and uses searchengine to prepare search pattern. N) StringVar BooleanVar) Checkbutton)SearchDialogBase) searchenginecCsN|}t|}t|ds*t||||_|j}|dd}||||dS)aOpen the Find in Files dialog. Module-level function to access the singleton GrepDialog instance and open the dialog. If text is selected, it is used as the search phrase; otherwise, the previous entry is used. Args: text: Text widget that contains the selected text for default search phrase. io: iomenu.IOBinding instance with default path to search. flist: filelist.FileList instance for OutputWindow parent. _grepdialogz sel.firstzsel.lastN)_rootrgethasattr GrepDialogropen)textioflistrootengineZdialog searchphraser1/opt/alt/python39/lib64/python3.9/idlelib/grep.pygreps   rcCs t|dS)zHandle os.walk error.N)print)msgrrr walk_error+src#s@tj|tdD],\}}fdd|DEdH|sq9s zfindfiles..N)rwalkr)folderr" recursive_ filenamesrr r findfiles0s   r)cs`eZdZdZdZdZdZfddZddd Zd d Z d d Z ddZ dddZ ddZ ZS)r z$Dialog for searching multiple files.zFind in Files DialogZGreprcs,t||||_t||_t||_dS)a-Create search dialog for searching for a phrase in the file system. Uses SearchDialogBase as the basis for the GUI and a searchengine instance to prepare the search. Attributes: flist: filelist.Filelist instance for OutputWindow parent. globvar: String value of Entry widget for path to search. globent: Entry widget for globvar. Created in create_entries(). recvar: Boolean value of Checkbutton widget for traversing through subdirectories. N)super__init__rrglobvarrrecvar)selfrrr __class__rrr+Gs zGrepDialog.__init__Nc Csht||||r|jpd}nd}tj|\}}tj|\}}|sJd}|jtj |d|dS)a_Make dialog visible on top of others and ready to use. Extend the SearchDialogBase open() to set the initial value for globvar. Args: text: Multicall object containing the text information. searchphrase: String phrase to search. io: iomenu.IOBinding instance containing file path. z.py*N) rr filenamerrsplitsplitextr,setr) r.r rrrdirbaseheadtailrrrr Zs  zGrepDialog.opencCs"t||d|jd|_dS)z9Create base entry widgets and add widget for search path.z In files:rN)rcreate_entriesZ make_entryr,Zglobentr.rrrr;ps zGrepDialog.create_entriescCs*t|d|jdd}|jddddS)z0Add check button to recurse down subdirectories.rzRecurse down subdirectories)Zvariabler topZboth)ZsideZfillN)rZ make_framer-pack)r.Zbtnrrrcreate_other_buttonsus zGrepDialog.create_other_buttonscCs t||jd|jdddS)z. If entry values are populated, set OutputWindow as stdout and perform search. The search dialog is closed automatically when the search begins. Nr) OutputWindow) rZgetprogr,r r=ZbellZidlelib.outwinrBsysstdoutrgrep_it)r.ZeventprogrrBZsaverrrrAs     zGrepDialog.default_commandc Cs^tj|\}}|stj}tt|||j}||j }t d|d|dd}z|D]}zt |ddp} t | dD]T\} } | dd d kr| d d} || rtj|d | d | d |d7}qWd n1s0YWqbty$} zt | WYd } ~ qbd } ~ 00qbt |r.show_grep_dialogzShow GrepDialog)r Zcommand)tkinterr_r`rarb tkinter.ttkrcrdZidlelib.pyshellrer]mapintZgeometryr4r>) parentr_r`rcrdrer=xyframerjZbuttonrrir _grep_dialogs    rs__main__)mainzidlelib.idle_test.test_grepF) verbosityexit)run)NN)r\rrrCrkrrrlrZidlelib.searchbaserZidlelibrrrr)r rsrYZunittestruZidlelib.idle_test.htestryrrrrs$