Исправлена установка фокуса на окно диалога GotoFunctionDialog и обратно на текст.
Переделан механизм чтения структуры файла и добавлены команды для sh (bash), go, tcl.
This commit is contained in:
parent
f1b9903635
commit
dacccf2fb9
|
@ -82,3 +82,10 @@
|
|||
|
||||
24/08/2022
|
||||
- Fixed ReadStructure procedure (added lexer)
|
||||
|
||||
25/08/2022
|
||||
- Fixed focus on the editor window after clicking Escape in the function selection dialog
|
||||
- Change color scheme for FindFunction dialog
|
||||
- Added sh icon (for shell scripts)
|
||||
- Fixed lexers for find procedures and functions
|
||||
|
||||
|
|
|
@ -541,45 +541,18 @@ namespace eval Editor {
|
|||
if {[dict exists $lexers $fileType] == 0} {return}
|
||||
for {set lineNumber 0} {$lineNumber <= [$txt count -lines 0.0 end]} {incr lineNumber} {
|
||||
set line [$txt get $lineNumber.0 $lineNumber.end]
|
||||
# TCL procedure
|
||||
# puts "[dict get $lexers $fileType procRegexpCommand]"
|
||||
#
|
||||
if {[dict exists $lexers $fileType procRegexpCommand] != 0 } {
|
||||
if {[eval [dict get $lexers $fileType procRegexpCommand]]} {
|
||||
set procName "$v2$v3$v4$v5"
|
||||
# lappend procList($activeProject) [list $procName [string trim $params]]
|
||||
# puts "$treeItemName proc $procName $params"
|
||||
# tree parent item type text
|
||||
puts [Tree::InsertItem $tree $treeItemName $procName "procedure" "$procName ($params)"]
|
||||
lappend l [list $procName $params]
|
||||
}
|
||||
} else {
|
||||
# GO function
|
||||
if {[regexp -nocase -all -- {^\s*?func\s*?\((\w+\s*?\*\w+)\)\s*?(\w+)\((.*?)\)\s*?([a-zA-Z0-9\{\}\[\]\(\)-_.]*?|)\s*?\{} $line match v1 funcName params returns]} {
|
||||
# set procName "$v2$v3$v4$v5"
|
||||
# lappend procList($activeProject) [list $procName [string trim $params]]
|
||||
if {$v1 ne ""} {
|
||||
set linkName [lindex [split $v1 " "] 1]
|
||||
set functionName "\($linkName\).$funcName"
|
||||
}
|
||||
# puts "$treeItemName func $funcName $params"
|
||||
# tree parent item type text
|
||||
puts [Tree::InsertItem $tree $treeItemName $funcName "func" "$functionName ($params)"]
|
||||
lappend l [list $functionName $params]
|
||||
}
|
||||
if {[regexp -nocase -all -- {^\s*?func\s*?(\w+)\((.*?)\)\s+?([a-zA-Z0-9\{\}\[\]\(\)-_.]*?|)\s*?\{} $line match funcName params returns]} {
|
||||
# puts "$treeItemName func $funcName $params"
|
||||
# tree parent item type text
|
||||
puts [Tree::InsertItem $tree $treeItemName $funcName "func" "$funcName ($params)"]
|
||||
lappend l [list $funcName $params]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
dict set editors $txt procedureList $l
|
||||
|
||||
}
|
||||
|
||||
proc FindFunction {findString} {
|
||||
proc FindFunction {findString} {
|
||||
global nbEditor
|
||||
puts $findString
|
||||
set pos "0.0"
|
||||
|
@ -661,9 +634,9 @@ proc FindFunction {findString} {
|
|||
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}
|
||||
# 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]
|
||||
|
||||
foreach item [dict get $editors $txt procedureList] {
|
||||
|
@ -725,6 +698,7 @@ proc FindFunction {findString} {
|
|||
proc GotoFunctionDialog {w x y args} {
|
||||
global editors lexers
|
||||
variable txt
|
||||
variable win
|
||||
set txt $w.frmText.t
|
||||
set win .gotofunction
|
||||
|
||||
|
@ -734,7 +708,7 @@ proc FindFunction {findString} {
|
|||
wm overrideredirect $win 1
|
||||
|
||||
listbox $win.lBox -width 30 -border 2 -yscrollcommand "$win.yscroll set" -border 1
|
||||
scrollbar $win.yscroll -orient vertical -command "$win.lBox yview" -width 13 -border 1
|
||||
ttk::scrollbar $win.yscroll -orient vertical -command "$win.lBox yview"
|
||||
pack $win.lBox -expand true -fill y -side left
|
||||
pack $win.yscroll -side left -expand false -fill y
|
||||
|
||||
|
@ -747,10 +721,21 @@ proc FindFunction {findString} {
|
|||
if { [set height [llength $args]] > 10 } { set height 10 }
|
||||
$win.lBox configure -height $height
|
||||
|
||||
bind $win <Escape> " destroy $win; focus $w.frmText.t; break "
|
||||
bind $win.lBox <Escape> " destroy $win; focus $w.frmText.t; break"
|
||||
bind $win <Escape> {
|
||||
destroy $Editor::win
|
||||
focus -force $Editor::txt.t
|
||||
break
|
||||
}
|
||||
bind $win.lBox <Escape> {
|
||||
destroy $Editor::win
|
||||
focus -force $Editor::txt.t
|
||||
break
|
||||
}
|
||||
bind $win.lBox <Return> {
|
||||
Editor::FindFunction "[dict get $lexers [dict get $editors $Editor::txt fileType] procFindString][.gotofunction.lBox get [.gotofunction.lBox curselection]]"
|
||||
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"
|
||||
destroy .gotofunction
|
||||
$Editor::txt tag remove sel 1.0 end
|
||||
# focus $Editor::txt.t
|
||||
|
|
|
@ -1,11 +1,23 @@
|
|||
#---------------------------------------------------
|
||||
########################################################
|
||||
#
|
||||
#-------------------------------------------------------
|
||||
# "PROCNAME" in procFindString will be changed on
|
||||
# "procName" from procRegexpCommand
|
||||
#-------------------------------------------------------
|
||||
# TCL/TK
|
||||
dict set lexers TCL commentSymbol {#}
|
||||
dict set lexers TCL procFindString {proc }
|
||||
dict set lexers TCL procRegexpCommand {regexp -nocase -all -- {^\s*?(proc) (::|_|)(\w+)(::|:|_|)(\w+)\s*?(\{|\()(.*)(\}|\)) \{} $line match v1 v2 v3 v4 v5 v6 params v8}
|
||||
dict set lexers TCL procFindString {proc PROCNAME}
|
||||
dict set lexers TCL procRegexpCommand {regexp -nocase -all -- {^\s*?(proc) (.*?) \{(.*?)\} \{} $line match keyWord procName params}
|
||||
|
||||
#--------------------------------------------------
|
||||
# Go lang
|
||||
dict set lexers GO commentSymbol {//}
|
||||
dict set lexers GO procFindString {func.*?}
|
||||
dict set lexers GO procFindString {func.*?PROCNAME}
|
||||
dict set lexers GO procRegexpCommand {regexp -nocase -all -- {\s*?func\s*?(\(\w+\s*?\**?\w+\)|)\s*?(\w+)\((.*?)\)\s+?([a-zA-Z0-9\{\}\[\]\(\)-_.]*?|)\s*?\{} $line match linkName procName params returns}
|
||||
|
||||
#--------------------------------------------------
|
||||
# SHELL (Bash)
|
||||
dict set lexers SH commentSymbol {#}
|
||||
dict set lexers SH procFindString {(function |)\s*?PROCNAME\(\)}
|
||||
dict set lexers SH procRegexpCommand {regexp -nocase -all -- {^\s*?(function |)\s*?(.*?)\(()\)} $line match keyWord procName params}
|
||||
|
||||
|
|
|
@ -98,7 +98,10 @@ namespace eval Tree {
|
|||
set nbItem "$nbEditor.[string range $parentItem [expr [string last "::" $parentItem] + 2] end]"
|
||||
$nbEditor select $nbItem
|
||||
set txt $nbItem.frmText.t
|
||||
Editor::FindFunction "[dict get $lexers [dict get $editors $txt fileType] procFindString]$values"
|
||||
set findString [dict get $lexers [dict get $editors $txt fileType] procFindString]
|
||||
regsub -all {PROCNAME} $findString $values str
|
||||
|
||||
Editor::FindFunction "$str"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@ exec wish "$0" -- "$@"
|
|||
######################################################
|
||||
# Version: 2.0.0
|
||||
# Release: alpha
|
||||
# Build: 24082022154854
|
||||
# Build: 25082022131123
|
||||
######################################################
|
||||
|
||||
# определим текущую версию, релиз и т.д.
|
||||
|
|
Loading…
Reference in New Issue
Block a user