From faf594ce9b2a8535a49516e002a1a7eb765c0468 Mon Sep 17 00:00:00 2001 From: svkalinin Date: Thu, 21 Jul 2022 10:37:19 +0300 Subject: [PATCH] Some changes into GUI (tabs) --- CHANGELOG | 7 ++ img/close.gif | Bin 0 -> 640 bytes img/close_16x16.png | Bin 0 -> 6310 bytes lib/editor.tcl | 124 +++++++++++++++++++++++- lib/filedialog.tcl | 28 +++++- lib/highlight/perl.tcl | 5 - lib/highlight/php.tcl | 1 + lib/highlight/shell.tcl | 202 ++++++++++++++++++++++++++++++++++++++++ lib/main.tcl | 5 + lib/menu.tcl | 3 +- lib/procedure.tcl | 24 ++++- lib/toolbar.tcl | 1 + projman.conf | 2 + projman.tcl | 5 +- 14 files changed, 390 insertions(+), 17 deletions(-) create mode 100644 img/close.gif create mode 100644 img/close_16x16.png create mode 100644 lib/highlight/shell.tcl diff --git a/CHANGELOG b/CHANGELOG index 4622807..efaa646 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -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. + + diff --git a/img/close.gif b/img/close.gif new file mode 100644 index 0000000000000000000000000000000000000000..d53835325b00fc8d12a34d1d080263eb0645d67a GIT binary patch literal 640 zcmZ?wbhEHb6krfwI2Ogg&(AL?C@3T(BrGf}A}lN>CMGQ{Ehi_dprD|ps;Z%(p{c2< zqphu@qhp}2Z)|LAVr*<`Vq$7)YG!I`Zf3mdwzl^6_O7n3ZmzEG?rxr*o*^N@ zAt50V;o;Gdkx@~R@i8&UNr}lxNh!%mX{jmcsVO;GSvlF+xj8_Tla~iXxrGJ!g@pyh z#YH8>#ib?1l@%40mF4xdwGH+4jg1X0%}tXgO_)4s;*=?q=gyryZ{D1xix)3hvS|78 zrR&$N*}8S}_N`lY?b@+>_s)HL_8d5{_xPbhM~)midFJ$vrlnagL-UOad1 z#-&TQuU@@={mR|z*YDlC{p8-g=MNq{dUXHAqeoxfzWq;kp!iSFxhOTUBsE2$JhLQ2 z!QIn0fI;ym3nLdpJ%bJd5P%|zf&D~7eN&T+KwTU2U!Asc7+Y2-wy87>D>e28LSb1xKi}GibKj zgnOz6L`H;028c2;O0~HJ$uf#wy(xBwQMldR=f@2e#$TSIFtr88v#SRSC0E8MhjsO4v literal 0 HcmV?d00001 diff --git a/img/close_16x16.png b/img/close_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..4d8f7609fc9a791b90e26d127130f2934d1288bb GIT binary patch literal 6310 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 PpD=>q?(25kB{c3|#=oqG literal 0 HcmV?d00001 diff --git a/lib/editor.tcl b/lib/editor.tcl index c5dc030..200ad51 100644 --- a/lib/editor.tcl +++ b/lib/editor.tcl @@ -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 +} diff --git a/lib/filedialog.tcl b/lib/filedialog.tcl index 177aaf2..9a6f4ae 100644 --- a/lib/filedialog.tcl +++ b/lib/filedialog.tcl @@ -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 {} { diff --git a/lib/highlight/perl.tcl b/lib/highlight/perl.tcl index 3ddd264..aec82cc 100644 --- a/lib/highlight/perl.tcl +++ b/lib/highlight/perl.tcl @@ -199,8 +199,3 @@ proc HighLightPERL {text line lineNumber node} { } } - - - - - diff --git a/lib/highlight/php.tcl b/lib/highlight/php.tcl index 7158e76..b2f6945 100644 --- a/lib/highlight/php.tcl +++ b/lib/highlight/php.tcl @@ -268,3 +268,4 @@ proc HighLightPHP {text line lineNumber node} { + diff --git a/lib/highlight/shell.tcl b/lib/highlight/shell.tcl new file mode 100644 index 0000000..cd1471f --- /dev/null +++ b/lib/highlight/shell.tcl @@ -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 + } +} + + + + + + + + + + + + + diff --git a/lib/main.tcl b/lib/main.tcl index 746bc9f..7f9d9a6 100644 --- a/lib/main.tcl +++ b/lib/main.tcl @@ -177,6 +177,9 @@ bind . Quit bind . Quit bind . PrintDialog bind . PrintDialog +bind . FileOperation::Open +bind . FileOperation::Open + set sepIndex 0 ########## STATUS BAR ########## @@ -382,3 +385,5 @@ if {[info exists workingProject]} { + + diff --git a/lib/menu.tcl b/lib/menu.tcl index 92f77cb..7dd3806 100644 --- a/lib/menu.tcl +++ b/lib/menu.tcl @@ -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} { + diff --git a/lib/procedure.tcl b/lib/procedure.tcl index ec05623..dcb81bf 100644 --- a/lib/procedure.tcl +++ b/lib/procedure.tcl @@ -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] + } + } + } + } +} diff --git a/lib/toolbar.tcl b/lib/toolbar.tcl index 01bc1ac..a4603e8 100644 --- a/lib/toolbar.tcl +++ b/lib/toolbar.tcl @@ -100,3 +100,4 @@ proc GoToLineButton {w} { + diff --git a/projman.conf b/projman.conf index a4cb82c..1210806 100644 --- a/projman.conf +++ b/projman.conf @@ -79,3 +79,5 @@ set workingProject "" + + diff --git a/projman.tcl b/projman.tcl index f2dc268..67878b3 100755 --- a/projman.tcl +++ b/projman.tcl @@ -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