Добавлено рекурсивное чтение каталога при открытии. Диалог поиска теперь работает раздельно при разделении окна.

Диалог навигации по функци так-же работает раздельно
This commit is contained in:
svkalinin 2022-09-21 14:38:31 +03:00
parent 91ef282558
commit 4a76bd5e22
6 changed files with 53 additions and 94 deletions

View File

@ -448,8 +448,8 @@ namespace eval Editor {
# #bind $txt <Control-g> GoToLine
# bind $txt <Control-g> {focus .frmTool.frmGoto.entGoTo; .frmTool.frmGoto.entGoTo delete 0 end}
bind $txt <Control-agrave> "Editor::FindDialog $w"
bind $txt <Control-f> "Editor::FindDialog $w"
bind $txt <Control-F> "Editor::FindDialog $w"
bind $txt <Control-f> "Editor::FindDialog $txt"
bind $txt <Control-F> "Editor::FindDialog $txt"
# bind $txt <F3> {FindNext $w.text 1}
# bind $txt <Control-ecircumflex> ReplaceDialog
# bind $txt <Control-r> ReplaceDialog
@ -495,12 +495,13 @@ namespace eval Editor {
# bind $txt <<Selection>> "Editor::SelectionGet $txt"
bind $txt <Control-i> ImageBase64Encode
bind $txt <Control-u> "Editor::SearchBrackets %W"
bind $txt <Control-J> "catch {Editor::GoToFunction $w}"
bind $txt <Control-j> "catch {Editor::GoToFunction $w}; break"
bind $txt <Control-J> "catch {Editor::GoToFunction $txt}"
bind $txt <Control-j> "catch {Editor::GoToFunction $txt}; break"
bind $txt <Alt-w> "$txt delete {insert wordstart} {insert wordend}"
bind $txt <Alt-r> "$txt delete {insert linestart} {insert lineend + 1char}"
bind $txt <Alt-b> "$txt delete {insert linestart} insert"
bind $txt <Alt-e> "$txt delete insert {insert lineend}"
bind $txt <Alt-s> "Editor::SplitEditorH $w $fileType"
}
proc SearchBrackets {txt} {
@ -586,7 +587,9 @@ namespace eval Editor {
if {[dict exists $lexers $fileType procRegexpCommand] != 0 } {
if {[eval [dict get $lexers $fileType procRegexpCommand]]} {
set procName_ [string trim $procName]
puts [Tree::InsertItem $tree $treeItemName $procName_ "procedure" "$procName_ ($params)"]
if {$treeItemName ne ""} {
puts [Tree::InsertItem $tree $treeItemName $procName_ "procedure" "$procName_ ($params)"]
}
lappend procList [list $procName_ $params]
unset procName_
}
@ -618,11 +621,11 @@ namespace eval Editor {
dict set editors $txt variableList $varList
}
proc FindFunction {findString} {
proc FindFunction {txt findString} {
global nbEditor
puts $findString
set pos "0.0"
set txt [$nbEditor select].frmText.t
# set txt [$nbEditor select].frmText.t
$txt see $pos
set line [lindex [split $pos "."] 0]
set x [lindex [split $pos "."] 1]
@ -691,22 +694,19 @@ namespace eval Editor {
# ----------------------------------------------------------------------
# Вызов диалога со списком процедур или функций присутствующих в тексте
proc GoToFunction { w } {
global tree editors
set txt $w.frmText.t
# set start_word [$txt get "insert - 1 chars wordstart" insert]
puts $w
# set txt $w.frmText.t
set txt $w
set box [$txt bbox insert]
set box_x [expr [lindex $box 0] + [winfo rootx $txt] ]
set box_y [expr [lindex $box 1] + [winfo rooty $txt] + [lindex $box 3] ]
set l ""
# bindtags $txt [list GoToFunctionBind [winfo toplevel $txt] $txt Text sysAfter all]
# bind GoToFunctionBind <Escape> "bindtags $txt {[list [winfo toplevel $txt] $txt Text sysAfter all]}; catch { destroy .gotofunction; break}"
# bind GoToFunctionBind <Key> { Editor::GoToFunctionKey %W %K %A ; break}
# puts [array names editors]
# puts "--$txt"
# puts $editors($txt)
foreach item [dict get $editors $txt procedureList] {
# puts $item
puts $item
lappend l [lindex $item 0]
}
if {$l ne ""} {
@ -715,50 +715,6 @@ namespace eval Editor {
}
}
# proc GoToFunctionKey { txt K A } {
# set win .gotofunction
# set ind [$win.lBox curselection]
# puts "$txt $K $A"
# switch -- $K {
# Prior {
# set up [expr [$win.lBox index active] - [$win.lBox cget -height]]
# if { $up < 0 } { set up 0 }
# $win.lBox activate $up
# $win.lBox selection clear 0 end
# $win.lBox selection set $up $up
# }
# Next {
# set down [expr [$win.lBox index active] + [$win.lBox cget -height]]
# if { $down >= [$win.lBox index end] } { set down end }
# $win.lBox activate $down
# $win.lBox selection clear 0 end
# $win.lBox selection set $down $down
# }
# Up {
# set up [expr [$win.lBox index active] - 1]
# if { $up < 0 } { set up 0 }
# $win.lBox activate $up
# $win.lBox selection clear 0 end
# $win.lBox selection set $up $up
# }
# Down {
# set down [expr [$win.lBox index active] + 1]
# if { $down >= [$win.lBox index end] } { set down end }
# $win.lBox activate $down
# $win.lBox selection clear 0 end
# $win.lBox selection set $down $down
# }
# Return {
# Editor::FindFunction "proc $values"
# eval [bind GoToFunctionBind <Escape>]
# }
# default {
# $txt insert "insert" $A
# eval [bind GoToFunctionBind <Escape>]
# }
# }
# }
#---------------------------------------------------------
# Поиск по списку по первой букве
# Richard Suchenwirth 2001-03-1
@ -785,10 +741,11 @@ namespace eval Editor {
global editors lexers
variable txt
variable win
set txt $w.frmText.t
# set txt $w.frmText.t
set txt $w
set win .gotofunction
if { [winfo exists $win] } { destroy $win }
if { [winfo exists $win] } { destroy $win }
toplevel $win
wm transient $win .
wm overrideredirect $win 1
@ -807,7 +764,7 @@ namespace eval Editor {
if { [set height [llength $args]] > 10 } { set height 10 }
$win.lBox configure -height $height
bind $win <Escape> {
bind $win <Escape> {
destroy $Editor::win
focus -force $Editor::txt.t
break
@ -821,7 +778,7 @@ namespace eval Editor {
set findString [dict get $lexers [dict get $editors $Editor::txt fileType] procFindString]
set values [.gotofunction.lBox get [.gotofunction.lBox curselection]]
regsub -all {PROCNAME} $findString $values str
Editor::FindFunction "$str"
Editor::FindFunction $Editor::txt "$str"
destroy .gotofunction
$Editor::txt tag remove sel 1.0 end
# focus $Editor::txt.t
@ -839,9 +796,10 @@ namespace eval Editor {
wm geom $win +$x+$y
}
proc FindReplaceText {findString replaceString regexp} {
proc FindReplaceText {txt findString replaceString regexp} {
global nbEditor
set txt [$nbEditor select].frmText.t
puts [focus]
# set txt [$nbEditor select].frmText.t
$txt tag remove sel 1.0 end
# $txt see $pos
# set pos [$txt search -nocase $findString $line.$x end]
@ -919,7 +877,8 @@ namespace eval Editor {
set findString ""
set replaceString ""
set txt $w.frmText.t
# set txt $w.frmText.t
set txt $w
set win .finddialog
set regexpSet ""
set searchAll "-all"
@ -936,18 +895,18 @@ namespace eval Editor {
ttk::button $win.bForward -image forward_20x20 -command {
Editor::FindReplaceText "$findString" "" $regexpSet
Editor::FindReplaceText $Editor::txt "$findString" "" $regexpSet
}
ttk::button $win.bBackward -state disable -image backward_20x20 -command "puts $replaceString"
ttk::button $win.bDone -image done_20x20 -state disable -command {
puts "$findString -> $replaceString, $regexpSet"
}
ttk::button $win.bDoneAll -image doneall_20x20 -command {
Editor::FindReplaceText "$findString" "$replaceString" $regexpSet
Editor::FindReplaceText $Editor::txt "$findString" "$replaceString" $regexpSet
}
ttk::button $win.bReplace -image replace_20x20 \
-command {
puts $Editor::show($Editor::win.entryReplace)
# puts $Editor::show($Editor::win.entryReplace)
if {$Editor::show($Editor::win.entryReplace) eq "false"} {
grid $Editor::win.entryReplace -row 1 -column 0 -columnspan 3 -sticky nsew
grid $Editor::win.bDone -row 1 -column 3 -sticky e
@ -987,11 +946,11 @@ namespace eval Editor {
break
}
bind $win.entryFind <Return> {
Editor::FindReplaceText "$findString" "" $regexpSet
Editor::FindReplaceText $Editor::txt "$findString" "" $regexpSet
break
}
bind $win.entryReplace <Return> {
Editor::FindReplaceText "$findString" "$replaceString" $regexpSet
Editor::FindReplaceText $Editor::txt "$findString" "$replaceString" $regexpSet
break
}
@ -999,6 +958,7 @@ namespace eval Editor {
focus -force $win.entryFind
}
# Horizontal split the Editor text widget
proc SplitEditorH {w fileType} {
global cfgVariables
puts [$w.panelTxt panes]
@ -1015,6 +975,7 @@ namespace eval Editor {
$w.panelTxt add $frmText -weight 1
$frmText.t see [$w.frmText.t index insert]
ReadStructure $frmText.t ""
focus -force $frmText.t.t
}
@ -1036,7 +997,7 @@ namespace eval Editor {
$frmText.t see [$w.frmText.t index insert]
}
proc EditorWidget {fr fileType} {
global cfgVariables editors
@ -1075,8 +1036,8 @@ namespace eval Editor {
dict set editors $txt fileType $fileType
dict set editors $txt procedureList [list]
# puts ">>[dict get $editors $txt fileType]"
# puts ">>[dict get $editors $txt procedureList]"
puts ">>[dict get $editors $txt fileType]"
puts ">>[dict get $editors $txt procedureList]"
# puts ">>>>> $editors"
if {[info procs ::Highlight::$fileType] ne ""} {

View File

@ -228,12 +228,16 @@ namespace eval FileOper {
# Sort lists and insert into tree
if {[info exists lstDir] && [llength $lstDir] > 0} {
foreach f [lsort $lstDir] {
puts "Tree insert item: [Tree::InsertItem $tree $parent [file join $directory $f] "directory" $f]"
set i [Tree::InsertItem $tree $parent [file join $directory $f] "directory" $f]
# puts "Tree insert item: $i $f]"
ReadFolder [file join $directory $f] $i
unset i
}
}
if {[info exists lstFiles] && [llength $lstFiles] > 0} {
foreach f [lsort $lstFiles] {
puts "Tree insert item: [Tree::InsertItem $tree $parent [file join $directory $f] "file" $f]"
Tree::InsertItem $tree $parent [file join $directory $f] "file" $f
# puts "Tree insert item: "
}
}
# Чтение структуры файлов в каталоге

View File

@ -58,7 +58,7 @@ namespace eval Highlight {} {
proc PY {txt} {
ctext::addHighlightClassForRegexp $txt flags orange {-+[a-zA-Z\-_]+}
ctext::addHighlightClass $txt stackControl #19a2a6 {if else: elif for while case switch def import from return make break defer continue package len print with open try: except}
ctext::addHighlightClass $txt stackControl #19a2a6 {if else: elif for while case switch def import from return make break defer continue package len print with open try: except: in}
ctext::addHighlightClass $txt types #7187d5 {string int int16 int32 int64 float bool byte}
ctext::addHighlightClassWithOnlyCharStart $txt vars #4471ca "\&"
ctext::addHighlightClassWithOnlyCharStart $txt vars #4471ca "\*"

View File

@ -179,6 +179,7 @@
::msgcat::mcset ru "Show backup files" "Показывать временные файлы"
::msgcat::mcset ru "Show the Menu" "Показывать меню"
::msgcat::mcset ru "Show dot files" "Показывать скрытые файлы"
::msgcat::mcset ru "Specify the absolute path to the directory or file" "Укажите полный путь к каталогу или файлу"
::msgcat::mcset ru "Split edit window" "Разделить окно редактора"
::msgcat::mcset ru "SQL commands" "SQL команды"
::msgcat::mcset ru "Text autoformat" "Автоформат текста"

View File

@ -126,7 +126,7 @@ namespace eval Tree {
set findString [dict get $lexers [dict get $editors $txt fileType] procFindString]
regsub -all {PROCNAME} $findString $values str
Editor::FindFunction "$str"
Editor::FindFunction $txt "$str"
}
}
}

View File

@ -10,7 +10,7 @@ exec wish "$0" -- "$@"
######################################################
# Version: 2.0.0
# Release: alpha
# Build: 19092022115815
# Build: 21092022142626
######################################################
# определим текущую версию, релиз и т.д.
@ -50,7 +50,6 @@ package require Thread
# Устанавливаем текущий каталог
set dir(root) [pwd]
set dir(doc) [file join $dir(root) doc]
# Устанавливаем рабочий каталог, если его нет то создаём.
@ -111,38 +110,32 @@ source [file join $dir(lib) gui.tcl]
# Open the PATH if command line argument has been setting
if [info exists opened] {
puts ">$opened"
# puts ">$opened"
foreach path $opened {
if {[file pathtype $path] ne "absolute"} {
puts "\n\t[::msgcat::mc "Specify the absolute path to the directory or file"]: $path\n"
exit
}
if [file isdirectory $path] {
set activeProject $path
FileOper::ReadFolder $path
ReadFilesFromDirectory $path $path
# puts "aaa[dict values $project "ansible*"]"
} elseif [file exists $path] {
ResetModifiedFlag [FileOper::Edit $path]
}
}
} else {
if {$cfgVariables(opened) ne ""} {
puts "<$cfgVariables(opened)"
# puts "<$cfgVariables(opened)"
set activeProject $cfgVariables(opened)
FileOper::ReadFolder $cfgVariables(opened)
ReadFilesFromDirectory $cfgVariables(opened) $cfgVariables(opened)
if {$cfgVariables(editedFiles) ne ""} {
foreach f [split $cfgVariables(editedFiles) " "] {
puts $f
# puts $f
FileOper::Edit $f
}
}
}
}
# if [info exists project] {
# foreach f [array names project] {
# puts "--$f"
# puts "----"
# foreach a [split $project($f) " "] {
# puts $variables($a)
# }
# }
#