Compare commits

...

9 Commits

10 changed files with 168 additions and 14 deletions

View File

@ -127,3 +127,10 @@
- Add Refresh button into Git Dialog
- Fixed FindFunction
07/12/2022
- Added Perl language support
- Added INI-files support
- Added MD-files structure navigation
- Fixed saving user session and opening files and folders at the next start
- Added buttons "Git clone" and "Git init" in the dialog box displayed when the Git button is pressed

View File

@ -23,8 +23,6 @@ if [info exists env(LANG)] {
set ::configDefault "\[General\]
cfgModifyDate=''
opened=
editedFiles=
searchCommand=/usr/bin/grep
searchCommandOptions=-r -n -H
gitCommand=/usr/bin/git
@ -36,7 +34,7 @@ locale=$locale
theme=dark
toolBarShow=true
menuShow=true
statusbarShow=true
statusBarShow=true
filesPanelShow=true
filesPanelPlace=left
geometry=1024x768
@ -62,6 +60,9 @@ lineNumberShow=true
tabSize=4
procedureHelper=false
variableHelper=true
\[UserSession\]
opened=
editedFiles=
"
proc Config::create {dir} {
set cfgFile [open [file join $dir projman.ini] "w+"]
@ -81,7 +82,7 @@ proc Config::read {dir} {
}
proc Config::write {dir} {
global activeProject
global activeProject editors
set cfgFile [ini::open [file join $dir projman.ini] "w"]
foreach section [array names ::cfgINIsections] {
foreach key $::cfgINIsections($section) {
@ -91,14 +92,27 @@ proc Config::write {dir} {
set systemTime [clock seconds]
# Set a config modify time (i don't know why =))'
ini::set $cfgFile "General" cfgModifyDate [clock format $systemTime -format "%D %H:%M:%S"]
ini::set $cfgFile "UserSession" editedFiles ""
# Save an top level window geometry into config
ini::set $cfgFile "GUI" geometry [wm geometry .]
if {[info exists activeProject] !=0 && $activeProject ne ""} {
ini::set $cfgFile "General" opened $activeProject
ini::set $cfgFile "UserSession" opened $activeProject
# Добавим пути к открытым в редакторе файлам в переменную
if [info exists editors] {
foreach i [dict keys $editors] {
lappend edited [dict get $editors $i fileFullPath]
}
if [info exists edited] {
ini::set $cfgFile "UserSession" editedFiles $edited
}
}
} else {
ini::set $cfgFile "General" opened ""
ini::set $cfgFile "UserSession" opened ""
ini::set $cfgFile "UserSession" editedFiles ""
}
# puts $editors
ini::commit $cfgFile
ini::close $cfgFile
}

View File

@ -590,7 +590,7 @@ namespace eval Editor {
$txt tag remove lightSelected 1.0 end
if { [winfo exists .varhelper] } { destroy .varhelper }
puts $k
# puts $k
switch $k {
Return {
regexp {^(\s*)} [$txt get [expr $lineNum - 1].0 [expr $lineNum - 1].end] -> spaceStart
@ -1477,6 +1477,7 @@ namespace eval Editor {
ImageViewer $fileFullPath $itemName $fr
} else {
set frmText [Editor::EditorWidget $fr $fileType $nb]
dict set editors $frmText.t fileFullPath $fileFullPath
}
$fr.panelTxt add $frmText -weight 0

View File

@ -211,7 +211,7 @@ namespace eval FileOper {
}
proc Close {} {
global nbEditor modified tree
global nbEditor modified tree editors
set nbItem [$nbEditor select]
# puts "close tab $nbItem"
@ -246,6 +246,8 @@ namespace eval FileOper {
if [info exists modified($nbItem)] {
unset modified($nbItem)
}
# puts $nbItem
set editors [dict remove $editors $nbItem.frmText.t]
.frmStatus.lblPosition configure -text ""
.frmStatus.lblEncoding configure -text ""
.frmStatus.lblSize configure -text ""

View File

@ -118,4 +118,27 @@ namespace eval Highlight {} {
ctext::addHighlightClassForRegexp $txt quotedtext #a9b36c {^(\s*?)(>+).+?$}
ctext::addHighlightClassForRegexp $txt italictext #dff74e {((_|\*)+?)(\w+?)((_|\*)+?)}
}
proc PL {txt} {
ctext::addHighlightClassForRegexp $txt qoute #b84a0c {("|'|`).*?("|'|`)}
ctext::addHighlightClassForRegexp $txt flags orange {\s-[a-zA-Z]+}
ctext::addHighlightClass $txt stackControl #19a2a6 {sub my end class new if else elsif for foreach while case when use ne eq print exit chdir rand die lt gt le ge say unless return chomp package push exec grep eval warn scalar next continue close}
ctext::addHighlightClassForRegexp $txt vars #4471ca {(\$|\*|\&)[\.a-zA-Z0-9\_\-\[\]]+}
ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
# ctext::addHighlightClassForSpecialChars $txt dog #0082ff {@}
ctext::addHighlightClassForRegexp $txt dog #0082ff {(@)[\.a-zA-Z0-9\_\-\[\]]+}
ctext::addHighlightClassForRegexp $txt paths lightblue {\.[a-zA-Z0-9\_\-]+}
ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*}
ctext::addHighlightClassForRegexp $txt namespaces #0093ff {->|\+\+|::}
}
proc INI {txt} {
ctext::addHighlightClassForRegexp $txt qoute #b84a0c {("|'|`).*?("|'|`)}
ctext::addHighlightClassForRegexp $txt flags orange {\s-[a-zA-Z]+}
ctext::addHighlightClassForRegexp $txt stackControl #4471ca {^(\s*?)\[[\.a-zA-Z0-9\_\-\[\]]+\]}
ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
ctext::addHighlightClassForRegexp $txt dog #0082ff {(@)[\.a-zA-Z0-9\_\-\[\]]+}
ctext::addHighlightClassForRegexp $txt colors #68ceff {(#|//)[^\n\r]*}
ctext::addHighlightClassForRegexp $txt keyword #19a2a6 {^(\s*?)[a-zA-Z0-9\_\-]+(\s*?=)}
ctext::addHighlightClassForSpecialChars $txt equal #0082ff {=}
}
}

View File

@ -1295,3 +1295,89 @@ image create photo new_20x20 -data {
1rbtZYyxbJrmBlgCccDeAQ9APzY2C+A5baqqOuu67gB4BVpgNWD7ZDZmGIazJiIR0HVlq3eGW6Ws
6/UzP0VErp1zJ1uNzYgOgckwgO9qktvR39YbIoJqCGWh7C4AAAAASUVORK5CYII=
}
image create photo key_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9
kT1Iw0AcxV9TS0UqDnYQcchQxcGCX4ijVqEIFUKt0KqDyaUfQpOGJMXFUXAtOPixWHVwcdbVwVUQ
BD9AHJ2cFF2kxP8lhRYxHhz34929x907QKiXmWZ1jAKabpvpZELM5lbE8CsiCCGMMQzLzDJmJSkF
3/F1jwBf7+I8y//cn6NbzVsMCIjEM8wwbeJ14qlN2+C8TxxlJVklPiceMemCxI9cVzx+41x0WeCZ
UTOTniOOEovFNlbamJVMjXiSOKZqOuULWY9VzluctXKVNe/JXxjJ68tLXKc5gCQWsAgJIhRUsYEy
bMRp1UmxkKb9hI+/3/VL5FLItQFGjnlUoEF2/eB/8LtbqzAx7iVFEkDoxXE+BoHwLtCoOc73seM0
ToDgM3Clt/yVOjD9SXqtpcWOgJ5t4OK6pSl7wOUO0PdkyKbsSkGaQqEAvJ/RN+WA3luga9XrrbmP
0wcgQ12lboCDQ2CoSNlrPu/ubO/t3zPN/n4AiVZysDNUkngAAAAGYktHRAD/AP8A/6C9p5MAAAAJ
cEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfmDAUHMwbmoJmMAAABRklEQVQoz32SPyyDURTFf+fr
V50kVEzWRjSYasPS1aoMJmnzBqZiE5FIjP6EtMNLulmwskksRmKqzhiJiAVJ22spqZbvbPfe807e
+90nWioUCtOSNiT1ASFQBda99w9ESADOuRmgGIbhYrlcfmz1psxsJx6Pz373/lKQy+ViwGaj0Zhr
N3rvrySt1uv17agbBMlkckxStVKpvHQOvfdXwGhkgKR+M7v/z2Bmb1EBYbPZXACyzrnJfzzDkQHA
qPc+BRhAPp9PxWKxV+/9M8Dh9ch4yaVvDXoktpYzteNfTzCzz47DR2Z2/mNAG8CQ4B2zgy4G7UUi
kfgEeiV9/DDABoBBIAN6igxorfE0CIJNgNJNelcoC7oETqyp+S4GkvTrZ0lnwEPpJr2LUUTsLWfu
VqIgPjvnLr45mBnAGkZRxv7SRG0lagtfFWR2IQ04e8UAAAAASUVORK5CYII=
}
image create photo crt_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9
kT1Iw0AcxV9TS0UqDnYQcchQxcGCX4ijVqEIFUKt0KqDyaUfQpOGJMXFUXAtOPixWHVwcdbVwVUQ
BD9AHJ2cFF2kxP8lhRYxHhz34929x907QKiXmWZ1jAKabpvpZELM5lbE8CsiCCGMMQzLzDJmJSkF
3/F1jwBf7+I8y//cn6NbzVsMCIjEM8wwbeJ14qlN2+C8TxxlJVklPiceMemCxI9cVzx+41x0WeCZ
UTOTniOOEovFNlbamJVMjXiSOKZqOuULWY9VzluctXKVNe/JXxjJ68tLXKc5gCQWsAgJIhRUsYEy
bMRp1UmxkKb9hI+/3/VL5FLItQFGjnlUoEF2/eB/8LtbqzAx7iVFEkDoxXE+BoHwLtCoOc73seM0
ToDgM3Clt/yVOjD9SXqtpcWOgJ5t4OK6pSl7wOUO0PdkyKbsSkGaQqEAvJ/RN+WA3luga9XrrbmP
0wcgQ12lboCDQ2CoSNlrPu/ubO/t3zPN/n4AiVZysDNUkngAAAAGYktHRAD/AP8A/6C9p5MAAAAJ
cEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfmDAUHMwbmoJmMAAABRklEQVQoz32SPyyDURTFf+fr
V50kVEzWRjSYasPS1aoMJmnzBqZiE5FIjP6EtMNLulmwskksRmKqzhiJiAVJ22spqZbvbPfe807e
+90nWioUCtOSNiT1ASFQBda99w9ESADOuRmgGIbhYrlcfmz1psxsJx6Pz373/lKQy+ViwGaj0Zhr
N3rvrySt1uv17agbBMlkckxStVKpvHQOvfdXwGhkgKR+M7v/z2Bmb1EBYbPZXACyzrnJfzzDkQHA
qPc+BRhAPp9PxWKxV+/9M8Dh9ch4yaVvDXoktpYzteNfTzCzz47DR2Z2/mNAG8CQ4B2zgy4G7UUi
kfgEeiV9/DDABoBBIAN6igxorfE0CIJNgNJNelcoC7oETqyp+S4GkvTrZ0lnwEPpJr2LUUTsLWfu
VqIgPjvnLr45mBnAGkZRxv7SRG0lagtfFWR2IQ04e8UAAAAASUVORK5CYII=
}
image create photo pem_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9
kT1Iw0AcxV9TS0UqDnYQcchQxcGCX4ijVqEIFUKt0KqDyaUfQpOGJMXFUXAtOPixWHVwcdbVwVUQ
BD9AHJ2cFF2kxP8lhRYxHhz34929x907QKiXmWZ1jAKabpvpZELM5lbE8CsiCCGMMQzLzDJmJSkF
3/F1jwBf7+I8y//cn6NbzVsMCIjEM8wwbeJ14qlN2+C8TxxlJVklPiceMemCxI9cVzx+41x0WeCZ
UTOTniOOEovFNlbamJVMjXiSOKZqOuULWY9VzluctXKVNe/JXxjJ68tLXKc5gCQWsAgJIhRUsYEy
bMRp1UmxkKb9hI+/3/VL5FLItQFGjnlUoEF2/eB/8LtbqzAx7iVFEkDoxXE+BoHwLtCoOc73seM0
ToDgM3Clt/yVOjD9SXqtpcWOgJ5t4OK6pSl7wOUO0PdkyKbsSkGaQqEAvJ/RN+WA3luga9XrrbmP
0wcgQ12lboCDQ2CoSNlrPu/ubO/t3zPN/n4AiVZysDNUkngAAAAGYktHRAD/AP8A/6C9p5MAAAAJ
cEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfmDAUHMwbmoJmMAAABRklEQVQoz32SPyyDURTFf+fr
V50kVEzWRjSYasPS1aoMJmnzBqZiE5FIjP6EtMNLulmwskksRmKqzhiJiAVJ22spqZbvbPfe807e
+90nWioUCtOSNiT1ASFQBda99w9ESADOuRmgGIbhYrlcfmz1psxsJx6Pz373/lKQy+ViwGaj0Zhr
N3rvrySt1uv17agbBMlkckxStVKpvHQOvfdXwGhkgKR+M7v/z2Bmb1EBYbPZXACyzrnJfzzDkQHA
qPc+BRhAPp9PxWKxV+/9M8Dh9ch4yaVvDXoktpYzteNfTzCzz47DR2Z2/mNAG8CQ4B2zgy4G7UUi
kfgEeiV9/DDABoBBIAN6igxorfE0CIJNgNJNelcoC7oETqyp+S4GkvTrZ0lnwEPpJr2LUUTsLWfu
VqIgPjvnLr45mBnAGkZRxv7SRG0lagtfFWR2IQ04e8UAAAAASUVORK5CYII=
}
image create photo csr_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9
kT1Iw0AcxV9TS0UqDnYQcchQxcGCX4ijVqEIFUKt0KqDyaUfQpOGJMXFUXAtOPixWHVwcdbVwVUQ
BD9AHJ2cFF2kxP8lhRYxHhz34929x907QKiXmWZ1jAKabpvpZELM5lbE8CsiCCGMMQzLzDJmJSkF
3/F1jwBf7+I8y//cn6NbzVsMCIjEM8wwbeJ14qlN2+C8TxxlJVklPiceMemCxI9cVzx+41x0WeCZ
UTOTniOOEovFNlbamJVMjXiSOKZqOuULWY9VzluctXKVNe/JXxjJ68tLXKc5gCQWsAgJIhRUsYEy
bMRp1UmxkKb9hI+/3/VL5FLItQFGjnlUoEF2/eB/8LtbqzAx7iVFEkDoxXE+BoHwLtCoOc73seM0
ToDgM3Clt/yVOjD9SXqtpcWOgJ5t4OK6pSl7wOUO0PdkyKbsSkGaQqEAvJ/RN+WA3luga9XrrbmP
0wcgQ12lboCDQ2CoSNlrPu/ubO/t3zPN/n4AiVZysDNUkngAAAAGYktHRAD/AP8A/6C9p5MAAAAJ
cEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfmDAUHMwbmoJmMAAABRklEQVQoz32SPyyDURTFf+fr
V50kVEzWRjSYasPS1aoMJmnzBqZiE5FIjP6EtMNLulmwskksRmKqzhiJiAVJ22spqZbvbPfe807e
+90nWioUCtOSNiT1ASFQBda99w9ESADOuRmgGIbhYrlcfmz1psxsJx6Pz373/lKQy+ViwGaj0Zhr
N3rvrySt1uv17agbBMlkckxStVKpvHQOvfdXwGhkgKR+M7v/z2Bmb1EBYbPZXACyzrnJfzzDkQHA
qPc+BRhAPp9PxWKxV+/9M8Dh9ch4yaVvDXoktpYzteNfTzCzz47DR2Z2/mNAG8CQ4B2zgy4G7UUi
kfgEeiV9/DDABoBBIAN6igxorfE0CIJNgNJNelcoC7oETqyp+S4GkvTrZ0lnwEPpJr2LUUTsLWfu
VqIgPjvnLr45mBnAGkZRxv7SRG0lagtfFWR2IQ04e8UAAAAASUVORK5CYII=
}
image create photo git_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9
kT1Iw0AcxV9TS0UqDnYQcchQnSz4hYiTVqEIFUKt0KqDyaUfQpOGJMXFUXAtOPixWHVwcdbVwVUQ
BD9AHJ2cFF2kxP8lhRYxHhz34929x907QKiXmWZ1jACabpvpZELM5lbE8CsiCCOEaYzKzDJmJSkF
3/F1jwBf7+I8y//cn6NbzVsMCIjEM8wwbeJ14slN2+C8TxxlJVklPiceNumCxI9cVzx+41x0WeCZ
UTOTniOOEovFNlbamJVMjXiCOKZqOuULWY9VzluctXKVNe/JXxjJ68tLXKc5gCQWsAgJIhRUsYEy
bMRp1UmxkKb9hI+/3/VL5FLItQFGjnlUoEF2/eB/8LtbqzA+5iVFEkDoxXE+BoHwLtCoOc73seM0
ToDgM3Clt/yVOjD1SXqtpcWOgJ5t4OK6pSl7wOUO0PdkyKbsSkGaQqEAvJ/RN+WA3luga9XrrbmP
0wcgQ12lboCDQ2CoSNlrPu/ubO/t3zPN/n4AtjZywjCqfNkAAAAGYktHRAD/AP8A/6C9p5MAAAAJ
cEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfmDAcGATEYpspOAAABMUlEQVQoz42SsUoDQRRFz+yM
G5CQ0sbC2iqNECwWUUTUQgj5AasUi4sfE8hPSEgjwcZCUkRIYWNnpZWlRI1keLvPZgXd7AZv+Zhz
Zu5jDCVJkqThvR+qqjjnOv1+/4OKBMVBt9td896fqeoBcJSm6SiO4/q/BEmSNIA7YBO4AB5VNVol
Mb/hxWJxA+zmo23n3KeIvAAYY8bW2tNiHVsBA1gRuTfGvAKHwJaqRq1W62o6nfo/Fbz3wwIMsGGt
vQTesyxrAg+qGonIYGkHqipU5zwIgjdglldxSwLnXMcYMy6Ac1X9AnaAZ2APmIRh2C5dYhzH9TRN
R6oaAWRZ1lTVubX2KT8yqdVqx71eb1YqKJHcAh44qYKXBPlHWgeugf1VN1cKfl4iIgNjjAvDsF0F
A3wD9EWTx4J8PxsAAAAASUVORK5CYII=
}

View File

@ -55,5 +55,21 @@ dict set lexers MD procFindString {(#+?)\s*?PROCNAME}
dict set lexers MD procRegexpCommand {regexp -nocase -all -- {^(#+?)\s(.+?)$} $line match keyWord procName}
# dict set lexers YML varRegexpCommandMultiline {regexp -all -line -- {^(\s*)(set_fact|vars):$} $line match indent keyWord}
#--------------------------------------------------
# Perl
dict set lexers PL commentSymbol {#}
dict set lexers PL variableSymbol {$}
dict set lexers PL tabSize 4
dict set lexers PL procFindString {(sub )\s*?PROCNAME}
dict set lexers PL procRegexpCommand {regexp -nocase -all -- {^\s*?(sub)\s([a-zA-Z0-9\-_:]+?)($|\(.+?\))} $line match keyWord procName params}
dict set lexers PL varRegexpCommand {regexp -nocase -all -- {^(\s*?)\$([a-zA-Z0-9\-_$]+)\s+=\s+(.+?)(\s*;$)} $line match indent varName varValue lineEnd}
#--------------------------------------------------
# Perl
dict set lexers INI commentSymbol {#}
dict set lexers INI tabSize 4
dict set lexers INI procFindString {(\[)PROCNAME(\])}
dict set lexers INI procRegexpCommand {regexp -nocase -all -- {^\s*?(\[)([a-zA-Z0-9\-_:]+?)(\])$} $line match keyWord procName}
# -------------------------------------------------
dict set lexers ALL varDirectory {variables vars group_vars host_vars defaults}

View File

@ -230,7 +230,7 @@ proc ImageBase64Encode {} {
}
proc FindImage {ext} {
foreach img [image names] {
if [regexp -nocase -all -- "^($ext)(_)" $img match v1 v2] {
if [regexp -nocase -all -- "^($ext)(_16x12)" $img match v1 v2] {
# puts "\nFindinig images: $img \n"
return $img
}

View File

@ -31,6 +31,8 @@ namespace eval Tree {
set findImg [::FindImage gitlab]
} elseif {[string match {*bitbucket*} [string tolower $text]]} {
set findImg [::FindImage bitbucket]
} elseif {[string match {\.git*} [string tolower $text]]} {
set findImg [::FindImage git]
}
if {$fileExt ne "" || $findImg ne ""} {
set image $findImg
@ -47,6 +49,8 @@ namespace eval Tree {
set image [::FindImage redhat]
} elseif {[string match {*gitlab*} [string tolower [file tail $item]]]} {
set image [::FindImage gitlab]
} elseif {[string match {.git} [string tolower [file tail $item]]]} {
set image [::FindImage git]
} else {
set image pixel
}
@ -78,7 +82,7 @@ namespace eval Tree {
set key [lindex [split $id "::"] 0]
if {$values eq "" || $key eq ""} {return}
puts "$key $tree $values"
# puts "$key $tree $values"
switch $key {
directory {
FileOper::ReadFolder $values
@ -100,7 +104,7 @@ namespace eval Tree {
set key [lindex [split $id "::"] 0]
if {$values eq "" || $key eq ""} {return}
puts "$key $tree $values"
# puts "$key $tree $values"
switch -regexp $key {
directory {
FileOper::ReadFolder $values

View File

@ -10,7 +10,7 @@ exec wish "$0" -- "$@"
######################################################
# Version: 2.0.0
# Release: alpha
# Build: 01122022125119
# Build: 07122022155807
######################################################
# определим текущую версию, релиз и т.д.
@ -125,7 +125,8 @@ if [info exists opened] {
FileOper::ReadFolder $path
ReadFilesFromDirectory $path $path
} elseif [file exists $path] {
ResetModifiedFlag [FileOper::Edit $path]
# ResetModifiedFlag [FileOper::Edit $path]
FileOper::Edit $path
}
}
} else {