Some changes into GUI (tabs)

This commit is contained in:
svkalinin 2022-07-21 10:37:19 +03:00
parent f1ca27d3e0
commit faf594ce9b
14 changed files with 390 additions and 17 deletions

View File

@ -5,6 +5,11 @@
# Author: Sergey Kalinin banzaj28@yandex.ru
##########################################################
0.4.6
25.05.2022
- Added linux shell highlight
- Added "Close" button into file tab
0.4.5
15.03.2018
- Added sort procedure for projects tree
@ -437,6 +442,8 @@ characters to the right of the insertion cursor.

BIN
img/close.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 640 B

BIN
img/close_16x16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

@ -606,9 +606,124 @@ proc EditFile {tree node fileName} {
set fileExt [string tolower [string range [file extension $fileName] 1 end]]
set parentNode [$tree parent $node]
set project [$tree itemcget $parentNode -data]
image create photo close_16x16 -data {
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
YWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBt
ZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2
MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRm
LXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczpp
cHRjRXh0PSJodHRwOi8vaXB0Yy5vcmcvc3RkL0lwdGM0eG1wRXh0LzIwMDgtMDItMjkvIgogICAg
eG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpz
dEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgog
ICAgeG1sbnM6cGx1cz0iaHR0cDovL25zLnVzZXBsdXMub3JnL2xkZi94bXAvMS4wLyIKICAgIHht
bG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOmRjPSJodHRwOi8v
cHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9i
ZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8x
LjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6MGQ3ZjM0YWItOTUzZS00
ODY1LWJkYWMtNWZjYzA5MmNjNWVkIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmI2MTk2
NTlmLWJiZjMtNDBkNi05YWMwLThiMmIyNzc4MGU3YiIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVu
dElEPSJ4bXAuZGlkOjAyODVmOGJjLTU1NjgtNGJmMS1iNDhkLTUwZGM2MGZkYjU5ZCIKICAgR0lN
UDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIx
NjUzNjM5ODc4NjYyNDkwIgogICBHSU1QOlZlcnNpb249IjIuMTAuMjIiCiAgIGRjOkZvcm1hdD0i
aW1hZ2UvcG5nIgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJ
TVAgMi4xMCI+CiAgIDxpcHRjRXh0OkxvY2F0aW9uQ3JlYXRlZD4KICAgIDxyZGY6QmFnLz4KICAg
PC9pcHRjRXh0OkxvY2F0aW9uQ3JlYXRlZD4KICAgPGlwdGNFeHQ6TG9jYXRpb25TaG93bj4KICAg
IDxyZGY6QmFnLz4KICAgPC9pcHRjRXh0OkxvY2F0aW9uU2hvd24+CiAgIDxpcHRjRXh0OkFydHdv
cmtPck9iamVjdD4KICAgIDxyZGY6QmFnLz4KICAgPC9pcHRjRXh0OkFydHdvcmtPck9iamVjdD4K
ICAgPGlwdGNFeHQ6UmVnaXN0cnlJZD4KICAgIDxyZGY6QmFnLz4KICAgPC9pcHRjRXh0OlJlZ2lz
dHJ5SWQ+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAg
ICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2
dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjNjMGYyODI4LTRhY2EtNDdmMy1iZjM4LWJjY2YzYTM5MTEz
YyIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChMaW51eCkiCiAgICAgIHN0
RXZ0OndoZW49IiswMzowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAg
IDxwbHVzOkltYWdlU3VwcGxpZXI+CiAgICA8cmRmOlNlcS8+CiAgIDwvcGx1czpJbWFnZVN1cHBs
aWVyPgogICA8cGx1czpJbWFnZUNyZWF0b3I+CiAgICA8cmRmOlNlcS8+CiAgIDwvcGx1czpJbWFn
ZUNyZWF0b3I+CiAgIDxwbHVzOkNvcHlyaWdodE93bmVyPgogICAgPHJkZjpTZXEvPgogICA8L3Bs
dXM6Q29weXJpZ2h0T3duZXI+CiAgIDxwbHVzOkxpY2Vuc29yPgogICAgPHJkZjpTZXEvPgogICA8
L3BsdXM6TGljZW5zb3I+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBt
ZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
Cjw/eHBhY2tldCBlbmQ9InciPz5/607fAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAACxMAAAsTAQCa
nBgAAAAHdElNRQfmBRsIGCYdNEHNAAABw0lEQVQozz3NPUxTURxA8XPvfe1TFKRFo8UIRT40GqNh
QdEYFReNg4tx00QDC9HBzcQRJ6ODMcbZuDg4OBLTaKIYQgcDVUClDfGjUKClYGn7Xvvu3wU98y85
SiNEyTu9+zuOLJ0txku+PxWMlabIbaCwKI1FN14b7Lux3PnZSasS1lrPSxYflkepW4xA4/2Ry7fz
bRPOnL6u2/S6KYRNR7hfFqrTCJjhO/PFWbkpB+WSZGRNxmVETku7xL65Z1wY6HmbKkhNvsgjeSae
iIh4kpCL0iotr3SzM3DY66rSzCHi1AkDEELIoXD6t3U7S+dnnCrH2UUD/1rlJb8xqKhuN53DftcL
naaJVswmCMiSYR2xtaTZeaV+oKBn+EgfezZBiF7OEWXV/hzVK5Mrtg7E2P1/oQjRw1VitpJ11j7g
+SHhAlHA8pUCR9lOmdckcm5a51OlCYshggOUecAQj5nlPc+DSsL7brZuVPLuCYksYNhHgif4JJnk
jUynKvf0vPHwMnrRHMtFxtUy7/hBmDDZ+q+Uf7c2JqIMhpp2TzXdMidtC0qjrV0sJ0pPg09YUAYH
jy34Oxq6TVz2ipCtpatz5k8AwF+X6NHCM54kXAAAAABJRU5ErkJggg==
}
# set w [$noteBook insert end $node -text "$file" -image [Bitmap::get [file join $imgDir [GetImage $fileName].gif]] \
#-background $editor(bg) -foreground $editor(fg)]
set w [$noteBook insert end $node -text "$file" -image [Bitmap::get [file join $imgDir [GetImage $fileName].gif]]]
set w [$noteBook insert end $node -text "$file" -image [Bitmap::get [file join $imgDir [GetImage $fileName].gif]] \
-ractiveimage close_16x16 -rimage close_16x16 -rimagecmd CloseFileNB]
# set w [$noteBook insert end $node -text "$file" -image [Bitmap::get [file join $imgDir close.png]]]
EditorFileNavigateMenu $w $fileName
@ -995,14 +1110,17 @@ proc ReadFileStructure {mod line lineNumber tree node} {
# View modern notebook tab header for edited file
# like as : "> dir1 > dir2 > file.tcl"
proc EditorFileNavigateMenu {w fullPathFile} {
set lblEditFileFullPath [label $w.lblEditFileFullPath -text [regsub -all -- {/|\\} $fullPathFile " > "] -anchor w]
set lblEditFileFullPath [label $w.lblEditFileFullPath -text [regsub -all -- {/|\\} $fullPathFile " > "] -anchor w ]
pack $lblEditFileFullPath -side top -fill x -padx 2 -pady 3
}
####################################
GetOp
proc CloseFileNB {node nodeItem} {
global tree
FileDialog $tree close
}

View File

@ -329,10 +329,32 @@ proc FileDialog {nbNode operation} {
namespace eval FileOperation {
global noteBook fontNormal fontBold fileList noteBook projDir activeProject imgDir editor
global types noteBook fontNormal fontBold fileList noteBook projDir activeProject imgDir editor rootDir
}
set types {
{"Tcl files" {.tcl}}
{"Tk files" {.tk}}
{"Rivet files" {.rvt}}
{"TclHttpd Template" {.tml}}
{"Sql files" {.sql}}
{"Html files" {.html}}
{"Text files" {.txt}}
{"JAVA files" {.java}}
{"PERL files" {.pl}}
{"PHP files" {.php}}
{"FORTRAN files" {.for}}
{"CAML or ML files" {.ml}}
{"CAML or ML interface files" {.mli}}
{"Ruby files" {.rb}}
{"Text files" {} TEXT}
{"All files" *}
}
set dot "_"
proc FileOperation::Open {} {
set dir $projDir
global tree node types dot env noteBook fontNormal fontBold fileList noteBook projDir activeProject imgDir editor rootDir
# set dir $projDir
set dir $env(HOME)
set fullPath [tk_getOpenFile -initialdir $dir -filetypes $types -parent $noteBook]
set file [string range $fullPath [expr [string last "/" $fullPath]+1] end]
regsub -all "." $file "_" node
@ -341,7 +363,7 @@ proc FileOperation::Open {} {
set name [file rootname $file]
set ext [string range [file extension $file] 1 end]
set node "$name$dot$ext"
EditFile $node $fullPath
EditFile .frmBody.frmCat.noteBook.ffiles.frmTreeFiles.treeFiles $node $fullPath
return 1
}
proc FileOperation::Close {} {

View File

@ -199,8 +199,3 @@ proc HighLightPERL {text line lineNumber node} {
}
}

View File

@ -268,3 +268,4 @@ proc HighLightPHP {text line lineNumber node} {

202
lib/highlight/shell.tcl Normal file
View File

@ -0,0 +1,202 @@
###########################################################
# Tcl/Tk Project Manager #
# version 0.0.1 #
# TCL highlight file #
# Copyright (c) "Sergey Kalinin", 2001, http://nuk-svk.ru #
# Author: Sergey Kalinin banzaj28@yandex.ru #
###########################################################
set beginQuote "0.0"
set endQuote "2.0"
set endQuotePrev "0.0"
proc HighLightSHELL {text line lineNumber node} {
global fontNormal fontBold editorFontBold tree imgDir noteBook systemCmdList
global editor color
global beginQuote endQuote endQuotePrev
set startIndex 0
$text tag configure bold -font $editor(fontBold)
$text tag configure className -font $editor(fontBold) -foreground $color(procName)
$text tag configure keyWord -foreground $color(keyWord)
$text tag configure comments -foreground $color(comments)
$text tag configure variable -foreground $color(var)
$text tag configure string -foreground $color(string)
$text tag configure braceHighLight -font $editor(fontBold)\
-foreground $color(braceBG) -background $color(braceFG)
$text tag configure brace -foreground $color(brace)
$text tag configure percent -foreground $color(percent)
$text tag configure bindKey -foreground $color(bindKey)
$text tag configure sql -font $editor(fontBold) -foreground $color(sql)
set keyWord [info commands]
foreach n $systemCmdList {lappend keyWord $n}
# for OOP extention
foreach n {if else then fi for done do while lt gt} {lappend keyWord $n}
set dataType {list abstract boolean byte char double float int long short}
set sqlOperators {select from where and or count sum in order cast as by}
set a ""
set startPos 0
set endPos 0
set length 0
set workLine $line
set className ""
while {$workLine != ""} {
if {[regexp "(^|\t| )\[a-zA-Z\\_:\]+" $workLine word]} {
set length [string length $word]
set startPos [string first [string trim $word] $line]
set endPos [expr $startPos + $length]
set workLine [string range $workLine $length end]
if {[lsearch $keyWord [string trim $word]] != -1} {
$text tag add keyWord $lineNumber.$startPos $lineNumber.$endPos
}
if {[lsearch $dataType [string trim $word]] != -1} {
$text tag add bold $lineNumber.$startPos $lineNumber.$endPos
}
if {[lsearch $sqlOperators [string trim $word]] != -1} {
$text tag add sql $lineNumber.$startPos $lineNumber.$endPos
}
if {[string trim $word]=="class" || [string trim $word]=="extends" || [string trim $word]=="implements" || [string trim $word]=="use"} {
$text tag add className $lineNumber.[expr $startPos + $length] $lineNumber.[string wordend $line [expr $startPos + $length +2]]
}
set startPos [expr $endPos + 1]
} else {
break
}
}
# string " " highlight
set startPos 0
set workLine $line
while {$workLine != ""} {
if {[regexp "\".*?\"" $workLine a b] || [regexp "\'.*?\'" $workLine a b]} {
set start [string first $a $workLine]
set end $start
incr end [string length $a]
set workLine [string range $workLine $end end]
incr start $startPos
incr end $startPos
$text tag add string $lineNumber.$start $lineNumber.$end
set startPos $end
} else {
break
}
}
# variable highlight #regexp -nocase -all -- {\$({|)[a-zA-Z0-9]+(:-|)(.+?}|)} string match v1 v2 v3
#[regexp "\\$\[a-zA-Z0-9\\_\-\]+" $workLine a] ||
set startPos 0
set workLine $line
while {$workLine != ""} {
if [regexp -nocase -all -- {\$({|)([a-zA-Z0-9_\-]+)(:-|)(.+?}|\}|)} $workLine match v1 a v3 v4] {
set start [string first $a $workLine]
set end $start
incr end [string length $a]
set workLine [string range $workLine $end end]
incr start $startPos
incr end $startPos
if {$a != ""} {
$text tag add variable $lineNumber.$start $lineNumber.$end
}
set startPos $end
} else {
break
}
}
set startPos 0
set workLine $line
while {$workLine != ""} {
if {[regexp "\\@\[a-zA-Z\\_:\]+" $workLine a]} {
set start [string first $a $workLine]
set end $start
incr end [string length $a]
set workLine [string range $workLine $end end]
incr start $startPos
incr end $startPos
if {$a != ""} {
$text tag add variable $lineNumber.$start $lineNumber.$end
}
set startPos $end
} else {
break
}
}
# persent % highlight
set startPos 0
set workLine $line
while {$workLine != ""} {
# if {[regexp "\%.*? " $workLine a b]}
if {[regexp "\%" $workLine a b] || [regexp "(\-\>)" $workLine a b]} {
set start [string first $a $workLine]
set end $start
incr end [string length $a]
set workLine [string range $workLine $end end]
incr start $startPos
incr end $startPos
$text tag add percent $lineNumber.$start $lineNumber.$end
set startPos $end
} else {
break
}
}
# DEDERER
# hightlight [, {, }, ], ( , )
set startPos 0
set workLine $line
while {$workLine != ""} {
if {[regexp {\(|\[|{|}|\]|\)} $workLine a b]} {
set start [string first $a $workLine]
set end $start
incr end [string length $a]
set workLine [string range $workLine $end end]
incr start $startPos
incr end $startPos
$text tag add bold $lineNumber.$start $lineNumber.$end
set startPos $end
} else {
break
}
}
# parameter for command hightlight regexp -nocase -all -- {\s-+\w+(?=\s)} string match
set startPos 0
set workLine $line
while {$workLine != ""} {
if {[regexp -nocase -all -- {\s-+\w+(?=\s)} $workLine a b]} {
set start [expr [string first $a $workLine] + 1]
set end $start
incr end [string length $a]
set workLine [string range $workLine $end end]
incr start $startPos
incr end $startPos
$text tag add bindKey $lineNumber.$start $lineNumber.$end
set startPos $end
} else {
break
}
}
## COMENTS ##
set workLine [$text get $lineNumber.0 $lineNumber.end]
if {[regexp -indices "(^|\t|;| )#" $workLine word]} {
set p [lindex $word 1]
$text tag add comments $lineNumber.$p $lineNumber.end
$text tag raise comments
} else {
$text tag remove comments $lineNumber.0 $lineNumber.end
}
}

View File

@ -177,6 +177,9 @@ bind . <Control-eacute> Quit
bind . <Control-q> Quit
bind . <Control-ccedilla> PrintDialog
bind . <Control-p> PrintDialog
bind . <Control-o> FileOperation::Open
bind . <Control-O> FileOperation::Open
set sepIndex 0
########## STATUS BAR ##########
@ -382,3 +385,5 @@ if {[info exists workingProject]} {

View File

@ -25,7 +25,7 @@ proc GetProjMenu {m} {
$m add command -label [::msgcat::mc "Project settings"] -command {NewProj edit $activeProject ""}\
-font $fontNormal
$m add separator
$m add command -label [::msgcat::mc "Open project"] -command {OpenProj} -font $fontNormal
$m add command -label [::msgcat::mc "Open project"] -command {OpenProj "projects"} -font $fontNormal
$m add command -label [::msgcat::mc "New project"] -command {NewProj new "" ""} -font $fontNormal
$m add command -label [::msgcat::mc "Delete project"] -command DelProj -font $fontNormal
$m add separator
@ -182,3 +182,4 @@ proc GetFileMenu {m} {

View File

@ -587,6 +587,8 @@ proc HighLight {ext text line lineNumber node} {
HighLightPHP $text $line $lineNumber $node
} elseif {($ext == "rb")} {
HighLightRUBY $text $line $lineNumber $node
} elseif {($ext == "sh")} {
HighLightSHELL $text $line $lineNumber $node
} else {
HighLightTCL $text $line $lineNumber $node
}
@ -665,8 +667,26 @@ proc GetExtention {node} {
return $ext
}
# Get system command name from PATH environment variable
proc GetSystemCommand {} {
global tcl_platform env systemCmdList
switch -exact -- $tcl_platform(platform) {
"unix" {
foreach path [split $env(PATH) ":"] {
foreach commandName [lsort [glob -nocomplain [file join $path *]]] {
lappend systemCmdList [file tail $commandName]
}
}
}
"windows" {
foreach path [split $env(PATH) ";"] {
foreach commandName [lsort [glob -nocomplain [file join $path *]]] {
lappend systemCmdList [file tail $commandName]
}
}
}
}
}

View File

@ -100,3 +100,4 @@ proc GoToLineButton {w} {

View File

@ -79,3 +79,5 @@ set workingProject ""

View File

@ -11,7 +11,7 @@ exec wish "$0" -- "$@"
###############################################
########## VERSION INFORMATION ##########
set ver "0.4.5"
set ver "0.4.6"
package require BWidget
package require msgcat
@ -174,7 +174,6 @@ option add *Dialog.msg.background $editor(bg)
# option add *Text.HighlightThickness 2 userDefault
# option add *Entry.HighlightThickness 1 userDefault
GetSystemCommand