Исправлена установка фокуса на окно диалога GotoFunctionDialog и обратно на текст.
Переделан механизм чтения структуры файла и добавлены команды для sh (bash), go, tcl.
This commit is contained in:
parent
f1b9903635
commit
dacccf2fb9
|
@ -82,3 +82,10 @@
|
||||||
|
|
||||||
24/08/2022
|
24/08/2022
|
||||||
- Fixed ReadStructure procedure (added lexer)
|
- 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}
|
if {[dict exists $lexers $fileType] == 0} {return}
|
||||||
for {set lineNumber 0} {$lineNumber <= [$txt count -lines 0.0 end]} {incr lineNumber} {
|
for {set lineNumber 0} {$lineNumber <= [$txt count -lines 0.0 end]} {incr lineNumber} {
|
||||||
set line [$txt get $lineNumber.0 $lineNumber.end]
|
set line [$txt get $lineNumber.0 $lineNumber.end]
|
||||||
# TCL procedure
|
|
||||||
# puts "[dict get $lexers $fileType procRegexpCommand]"
|
|
||||||
#
|
|
||||||
if {[dict exists $lexers $fileType procRegexpCommand] != 0 } {
|
if {[dict exists $lexers $fileType procRegexpCommand] != 0 } {
|
||||||
if {[eval [dict get $lexers $fileType procRegexpCommand]]} {
|
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)"]
|
puts [Tree::InsertItem $tree $treeItemName $procName "procedure" "$procName ($params)"]
|
||||||
lappend l [list $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
|
dict set editors $txt procedureList $l
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
proc FindFunction {findString} {
|
proc FindFunction {findString} {
|
||||||
global nbEditor
|
global nbEditor
|
||||||
puts $findString
|
puts $findString
|
||||||
set pos "0.0"
|
set pos "0.0"
|
||||||
|
@ -661,9 +634,9 @@ proc FindFunction {findString} {
|
||||||
set box_x [expr [lindex $box 0] + [winfo rootx $txt] ]
|
set box_x [expr [lindex $box 0] + [winfo rootx $txt] ]
|
||||||
set box_y [expr [lindex $box 1] + [winfo rooty $txt] + [lindex $box 3] ]
|
set box_y [expr [lindex $box 1] + [winfo rooty $txt] + [lindex $box 3] ]
|
||||||
set l ""
|
set l ""
|
||||||
bindtags $txt [list GoToFunctionBind [winfo toplevel $txt] $txt Text sysAfter all]
|
# 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 <Escape> "bindtags $txt {[list [winfo toplevel $txt] $txt Text sysAfter all]}; catch { destroy .gotofunction; break}"
|
||||||
bind GoToFunctionBind <Key> { Editor::GoToFunctionKey %W %K %A ; break}
|
# bind GoToFunctionBind <Key> { Editor::GoToFunctionKey %W %K %A ; break}
|
||||||
# puts [array names editors]
|
# puts [array names editors]
|
||||||
|
|
||||||
foreach item [dict get $editors $txt procedureList] {
|
foreach item [dict get $editors $txt procedureList] {
|
||||||
|
@ -725,6 +698,7 @@ proc FindFunction {findString} {
|
||||||
proc GotoFunctionDialog {w x y args} {
|
proc GotoFunctionDialog {w x y args} {
|
||||||
global editors lexers
|
global editors lexers
|
||||||
variable txt
|
variable txt
|
||||||
|
variable win
|
||||||
set txt $w.frmText.t
|
set txt $w.frmText.t
|
||||||
set win .gotofunction
|
set win .gotofunction
|
||||||
|
|
||||||
|
@ -734,7 +708,7 @@ proc FindFunction {findString} {
|
||||||
wm overrideredirect $win 1
|
wm overrideredirect $win 1
|
||||||
|
|
||||||
listbox $win.lBox -width 30 -border 2 -yscrollcommand "$win.yscroll set" -border 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.lBox -expand true -fill y -side left
|
||||||
pack $win.yscroll -side left -expand false -fill y
|
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 }
|
if { [set height [llength $args]] > 10 } { set height 10 }
|
||||||
$win.lBox configure -height $height
|
$win.lBox configure -height $height
|
||||||
|
|
||||||
bind $win <Escape> " destroy $win; focus $w.frmText.t; break "
|
bind $win <Escape> {
|
||||||
bind $win.lBox <Escape> " destroy $win; focus $w.frmText.t; break"
|
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> {
|
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
|
destroy .gotofunction
|
||||||
$Editor::txt tag remove sel 1.0 end
|
$Editor::txt tag remove sel 1.0 end
|
||||||
# focus $Editor::txt.t
|
# focus $Editor::txt.t
|
||||||
|
|
|
@ -1,11 +1,23 @@
|
||||||
#---------------------------------------------------
|
########################################################
|
||||||
|
#
|
||||||
|
#-------------------------------------------------------
|
||||||
|
# "PROCNAME" in procFindString will be changed on
|
||||||
|
# "procName" from procRegexpCommand
|
||||||
|
#-------------------------------------------------------
|
||||||
# TCL/TK
|
# TCL/TK
|
||||||
dict set lexers TCL commentSymbol {#}
|
dict set lexers TCL commentSymbol {#}
|
||||||
dict set lexers TCL procFindString {proc }
|
dict set lexers TCL procFindString {proc PROCNAME}
|
||||||
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 procRegexpCommand {regexp -nocase -all -- {^\s*?(proc) (.*?) \{(.*?)\} \{} $line match keyWord procName params}
|
||||||
|
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
# Go lang
|
# Go lang
|
||||||
dict set lexers GO commentSymbol {//}
|
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]"
|
set nbItem "$nbEditor.[string range $parentItem [expr [string last "::" $parentItem] + 2] end]"
|
||||||
$nbEditor select $nbItem
|
$nbEditor select $nbItem
|
||||||
set txt $nbItem.frmText.t
|
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
|
# Version: 2.0.0
|
||||||
# Release: alpha
|
# Release: alpha
|
||||||
# Build: 24082022154854
|
# Build: 25082022131123
|
||||||
######################################################
|
######################################################
|
||||||
|
|
||||||
# определим текущую версию, релиз и т.д.
|
# определим текущую версию, релиз и т.д.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user