Compare commits
No commits in common. "0b4d0dbf5cd5d803511dccfa6c4029349a9573ed" and "3042b1c1c19d4e4f48c92e996b9fcfac566e1b1e" have entirely different histories.
0b4d0dbf5c
...
3042b1c1c1
@ -117,9 +117,4 @@
|
|||||||
|
|
||||||
20/10/200
|
20/10/200
|
||||||
- Added Git support: add and commit changes, show git log, show each commit...
|
- Added Git support: add and commit changes, show git log, show each commit...
|
||||||
|
|
||||||
11/11/2022
|
|
||||||
- Added GoTo Line dialog
|
|
||||||
- Fixed Git commit procedure
|
|
||||||
- Added variable and procedure helper
|
|
||||||
|
|
||||||
|
4
debian/build-deb-projman.sh
vendored
4
debian/build-deb-projman.sh
vendored
@ -23,6 +23,4 @@ dpkg-buildpackage
|
|||||||
|
|
||||||
#cp ../projman_${VERSION}-${RELEASE}_amd64.deb /files/
|
#cp ../projman_${VERSION}-${RELEASE}_amd64.deb /files/
|
||||||
|
|
||||||
rm -v projman
|
rm projman
|
||||||
rm -r -v debian/{projman,.debhelper}
|
|
||||||
|
|
||||||
|
@ -28,9 +28,6 @@ editedFiles=
|
|||||||
searchCommand=/usr/bin/grep
|
searchCommand=/usr/bin/grep
|
||||||
searchCommandOptions=-r -n -H
|
searchCommandOptions=-r -n -H
|
||||||
gitCommand=/usr/bin/git
|
gitCommand=/usr/bin/git
|
||||||
# must return a mime type of file
|
|
||||||
fileTypeCommand=/usr/bin/file
|
|
||||||
fileTypeCommandOptions=-i -b
|
|
||||||
\[GUI\]
|
\[GUI\]
|
||||||
locale=$locale
|
locale=$locale
|
||||||
theme=dark
|
theme=dark
|
||||||
|
208
lib/editor.tcl
208
lib/editor.tcl
@ -370,6 +370,7 @@ namespace eval Editor {
|
|||||||
set win .varhelper
|
set win .varhelper
|
||||||
# if { [winfo exists $win] == 0 } { return }
|
# if { [winfo exists $win] == 0 } { return }
|
||||||
set ind [$win.lBox curselection]
|
set ind [$win.lBox curselection]
|
||||||
|
puts ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
|
||||||
|
|
||||||
switch -- $K {
|
switch -- $K {
|
||||||
Prior {
|
Prior {
|
||||||
@ -429,10 +430,6 @@ namespace eval Editor {
|
|||||||
variable txt
|
variable txt
|
||||||
variable win
|
variable win
|
||||||
# set txt $w.frmText.t
|
# set txt $w.frmText.t
|
||||||
# блокировка открытия диалога если запущен другой
|
|
||||||
if [winfo exists .findVariables] {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
set txt $w
|
set txt $w
|
||||||
set win .varhelper
|
set win .varhelper
|
||||||
puts "$x $y $w $word $wordType"
|
puts "$x $y $w $word $wordType"
|
||||||
@ -591,7 +588,7 @@ namespace eval Editor {
|
|||||||
$txt tag remove lightSelected 1.0 end
|
$txt tag remove lightSelected 1.0 end
|
||||||
|
|
||||||
if { [winfo exists .varhelper] } { destroy .varhelper }
|
if { [winfo exists .varhelper] } { destroy .varhelper }
|
||||||
puts $k
|
|
||||||
switch $k {
|
switch $k {
|
||||||
Return {
|
Return {
|
||||||
regexp {^(\s*)} [$txt get [expr $lineNum - 1].0 [expr $lineNum - 1].end] -> spaceStart
|
regexp {^(\s*)} [$txt get [expr $lineNum - 1].0 [expr $lineNum - 1].end] -> spaceStart
|
||||||
@ -611,22 +608,13 @@ namespace eval Editor {
|
|||||||
Right {
|
Right {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
# Shift_L {
|
Shift {
|
||||||
# return
|
|
||||||
# }
|
|
||||||
# Shift_R {
|
|
||||||
# return
|
|
||||||
# }
|
|
||||||
Control_L {
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
Control_R {
|
Controll {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
Alt_L {
|
Meta {
|
||||||
return
|
|
||||||
}
|
|
||||||
Alt_R {
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -727,19 +715,59 @@ namespace eval Editor {
|
|||||||
# set txt $w.frmText.t
|
# set txt $w.frmText.t
|
||||||
bind $txt <KeyRelease> "catch {Editor::ReleaseKey %K $txt $fileType}"
|
bind $txt <KeyRelease> "catch {Editor::ReleaseKey %K $txt $fileType}"
|
||||||
bind $txt <KeyPress> "Editor::PressKey %K $txt"
|
bind $txt <KeyPress> "Editor::PressKey %K $txt"
|
||||||
|
# bind $txt.t <KeyRelease> "Editor::ReleaseKey %K $txt.t $fileType"
|
||||||
|
# bind $txt.t <KeyPress> "Editor::PressKey %K $txt.t"
|
||||||
|
# bind $txt <KeyRelease> "Editor::Key %k %K"
|
||||||
|
#$txt tag bind Sel <Control-/> {puts ">>>>>>>>>>>>>>>>>>>"}
|
||||||
|
#bind $txt <Control-slash> {puts "/////////////////"}
|
||||||
|
# #bind $txt <Control-g> GoToLine
|
||||||
|
# bind $txt <Control-g> {focus .frmTool.frmGoto.entGoTo; .frmTool.frmGoto.entGoTo delete 0 end}
|
||||||
|
bind $txt <Control-agrave> "Editor::FindDialog $w"
|
||||||
|
bind $txt <Control-f> "Editor::FindDialog $txt"
|
||||||
|
bind $txt <Control-F> "Editor::FindDialog $txt"
|
||||||
|
# bind $txt <F3> {FindNext $w.text 1}
|
||||||
|
# bind $txt <Control-ecircumflex> ReplaceDialog
|
||||||
|
# bind $txt <Control-r> ReplaceDialog
|
||||||
|
# bind $txt <F4> {ReplaceCommand $w.text 1}
|
||||||
|
# bind $txt <Control-ucircumflex> {FileDialog [$noteBookFiles raise] save}
|
||||||
|
# bind $txt <Control-s> {FileDialog [$noteBookFiles raise] save}
|
||||||
|
# bind $txt <Control-ocircumflex> {FileDialog [$noteBookFiles raise] save_as}
|
||||||
|
# bind $txt <Shift-Control-s> {FileDialog [$noteBookFiles raise] save_as}
|
||||||
|
bind $txt <Control-odiaeresis> FileOper::Close
|
||||||
|
bind $txt <Control-w> FileOper::Close
|
||||||
|
# bind $txt <Control-division> "tk_textCut $w.text;break"
|
||||||
|
# bind $txt <Control-x> "tk_textCut $w.text;break"
|
||||||
|
# bind $txt <Control-ntilde> "tk_textCopy $txt"
|
||||||
|
# bind $txt <Control-c> "tk_textCopy $txt"
|
||||||
bind $txt <Control-igrave> "Editor::SelectionPaste $txt"
|
bind $txt <Control-igrave> "Editor::SelectionPaste $txt"
|
||||||
bind $txt <Control-v> "Editor::SelectionPaste $txt"
|
bind $txt <Control-v> "Editor::SelectionPaste $txt"
|
||||||
bind $txt <Control-l> "SearchVariable $txt; break"
|
|
||||||
|
#bind $txt <Control-adiaeresis> "auto_completition $txt"
|
||||||
|
bind $txt <Control-l> "SearchVariable $txt"
|
||||||
|
# bind $txt <Control-icircumflex> ""
|
||||||
|
# bind $txt <Control-j> ""
|
||||||
bind $txt <Control-i> "ImageBase64Encode $txt"
|
bind $txt <Control-i> "ImageBase64Encode $txt"
|
||||||
|
|
||||||
bind $txt <Control-bracketleft> "Editor::InsertTabular $txt"
|
bind $txt <Control-bracketleft> "Editor::InsertTabular $txt"
|
||||||
bind $txt <Control-bracketright> "Editor::DeleteTabular $txt"
|
bind $txt <Control-bracketright> "Editor::DeleteTabular $txt"
|
||||||
|
|
||||||
bind $txt <Control-comma> "Editor::Comment $txt $fileType"
|
bind $txt <Control-comma> "Editor::Comment $txt $fileType"
|
||||||
bind $txt <Control-period> "Editor::Uncomment $txt $fileType"
|
bind $txt <Control-period> "Editor::Uncomment $txt $fileType"
|
||||||
bind $txt <Control-eacute> Find
|
bind $txt <Control-eacute> Find
|
||||||
|
#bind . <Control-m> PageTab
|
||||||
|
#bind . <Control-udiaeresis> PageTab
|
||||||
bind $txt <Insert> {OverWrite}
|
bind $txt <Insert> {OverWrite}
|
||||||
bind $txt <ButtonRelease-1> "Editor::SearchBrackets $txt"
|
bind $txt <ButtonRelease-1> "Editor::SearchBrackets $txt"
|
||||||
|
# bind <Button-1> [bind sysAfter <Any-Key>]
|
||||||
|
# bind $txt <Button-3> {catch [PopupMenuEditor %X %Y]}
|
||||||
|
# bind $txt <Button-4> "%W yview scroll -3 units"
|
||||||
|
# bind $txt <Button-5> "%W yview scroll 3 units"
|
||||||
|
#bind $txt <Shift-Button-4> "%W xview scroll -2 units"
|
||||||
|
#bind $txt <Shift-Button-5> "%W xview scroll 2 units"
|
||||||
bind $txt <Button-1><ButtonRelease-1> "Editor::SelectionHighlight $txt"
|
bind $txt <Button-1><ButtonRelease-1> "Editor::SelectionHighlight $txt"
|
||||||
|
# bind $txt <<Selection>> "Editor::SelectionHighlight $txt"
|
||||||
bind $txt <<Modified>> "SetModifiedFlag $w"
|
bind $txt <<Modified>> "SetModifiedFlag $w"
|
||||||
|
# bind $txt <<Selection>> "Editor::SelectionGet $txt"
|
||||||
bind $txt <Control-i> ImageBase64Encode
|
bind $txt <Control-i> ImageBase64Encode
|
||||||
bind $txt <Control-u> "Editor::SearchBrackets %W"
|
bind $txt <Control-u> "Editor::SearchBrackets %W"
|
||||||
bind $txt <Control-J> "catch {Editor::GoToFunction $txt}"
|
bind $txt <Control-J> "catch {Editor::GoToFunction $txt}"
|
||||||
@ -749,12 +777,6 @@ namespace eval Editor {
|
|||||||
bind $txt <Alt-b> "$txt delete {insert linestart} insert"
|
bind $txt <Alt-b> "$txt delete {insert linestart} insert"
|
||||||
bind $txt <Alt-e> "$txt delete insert {insert lineend}"
|
bind $txt <Alt-e> "$txt delete insert {insert lineend}"
|
||||||
bind $txt <Alt-s> "Editor::SplitEditorH $w $fileType"
|
bind $txt <Alt-s> "Editor::SplitEditorH $w $fileType"
|
||||||
bind $txt <Control-g> "Editor::GoToLineNumberDialog $txt"
|
|
||||||
bind $txt <Control-agrave> "Editor::FindDialog $w"
|
|
||||||
bind $txt <Control-f> "Editor::FindDialog $txt"
|
|
||||||
bind $txt <Control-F> "Editor::FindDialog $txt"
|
|
||||||
bind $txt <Control-odiaeresis> FileOper::Close
|
|
||||||
bind $txt <Control-w> FileOper::Close
|
|
||||||
bind $txt <Control-o> {
|
bind $txt <Control-o> {
|
||||||
set filePath [FileOper::OpenDialog]
|
set filePath [FileOper::OpenDialog]
|
||||||
if {$filePath != ""} {
|
if {$filePath != ""} {
|
||||||
@ -769,38 +791,6 @@ namespace eval Editor {
|
|||||||
}
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
# bind $txt.t <KeyRelease> "Editor::ReleaseKey %K $txt.t $fileType"
|
|
||||||
# bind $txt.t <KeyPress> "Editor::PressKey %K $txt.t"
|
|
||||||
# bind $txt <KeyRelease> "Editor::Key %k %K"
|
|
||||||
#$txt tag bind Sel <Control-/> {puts ">>>>>>>>>>>>>>>>>>>"}
|
|
||||||
#bind $txt <Control-slash> {puts "/////////////////"}
|
|
||||||
# #bind $txt <Control-g> GoToLine
|
|
||||||
# bind $txt <F3> {FindNext $w.text 1}
|
|
||||||
# bind $txt <Control-ecircumflex> ReplaceDialog
|
|
||||||
# bind $txt <Control-r> ReplaceDialog
|
|
||||||
# bind $txt <F4> {ReplaceCommand $w.text 1}
|
|
||||||
# bind $txt <Control-ucircumflex> {FileDialog [$noteBookFiles raise] save}
|
|
||||||
# bind $txt <Control-s> {FileDialog [$noteBookFiles raise] save}
|
|
||||||
# bind $txt <Control-ocircumflex> {FileDialog [$noteBookFiles raise] save_as}
|
|
||||||
# bind $txt <Shift-Control-s> {FileDialog [$noteBookFiles raise] save_as}
|
|
||||||
# bind $txt <Control-division> "tk_textCut $w.text;break"
|
|
||||||
# bind $txt <Control-x> "tk_textCut $w.text;break"
|
|
||||||
# bind $txt <Control-ntilde> "tk_textCopy $txt"
|
|
||||||
# bind $txt <Control-c> "tk_textCopy $txt"
|
|
||||||
|
|
||||||
#bind $txt <Control-adiaeresis> "auto_completition $txt"
|
|
||||||
# bind $txt <Control-icircumflex> ""
|
|
||||||
# bind $txt <Control-j> ""
|
|
||||||
#bind . <Control-m> PageTab
|
|
||||||
#bind . <Control-udiaeresis> PageTab
|
|
||||||
# bind <Button-1> [bind sysAfter <Any-Key>]
|
|
||||||
# bind $txt <Button-3> {catch [PopupMenuEditor %X %Y]}
|
|
||||||
# bind $txt <Button-4> "%W yview scroll -3 units"
|
|
||||||
# bind $txt <Button-5> "%W yview scroll 3 units"
|
|
||||||
#bind $txt <Shift-Button-4> "%W xview scroll -2 units"
|
|
||||||
#bind $txt <Shift-Button-5> "%W xview scroll 2 units"
|
|
||||||
# bind $txt <<Selection>> "Editor::SelectionHighlight $txt"
|
|
||||||
# bind $txt <<Selection>> "Editor::SelectionGet $txt"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
proc SearchBrackets {txt} {
|
proc SearchBrackets {txt} {
|
||||||
@ -1313,57 +1303,6 @@ namespace eval Editor {
|
|||||||
$text see insert
|
$text see insert
|
||||||
}
|
}
|
||||||
|
|
||||||
proc GoToLineNumberDialog {w} {
|
|
||||||
global editors lexers
|
|
||||||
variable txt
|
|
||||||
variable win
|
|
||||||
# set txt $w.frmText.t
|
|
||||||
set txt $w
|
|
||||||
set win .gotoline
|
|
||||||
set box [$txt bbox insert]
|
|
||||||
set x [expr [lindex $box 0] + [winfo rootx $txt] ]
|
|
||||||
set y [expr [lindex $box 1] + [winfo rooty $txt] + [lindex $box 3] ]
|
|
||||||
|
|
||||||
if { [winfo exists $win] } { destroy $win }
|
|
||||||
toplevel $win
|
|
||||||
wm transient $win .
|
|
||||||
wm overrideredirect $win 1
|
|
||||||
|
|
||||||
ttk::entry $win.ent
|
|
||||||
pack $win.ent -expand true -fill y -side left -padx 3 -pady 3
|
|
||||||
|
|
||||||
bind $win <Escape> {
|
|
||||||
destroy $Editor::win
|
|
||||||
focus -force $Editor::txt.t
|
|
||||||
break
|
|
||||||
}
|
|
||||||
bind $win.ent <Escape> {
|
|
||||||
destroy $Editor::win
|
|
||||||
focus -force $Editor::txt.t
|
|
||||||
break
|
|
||||||
}
|
|
||||||
bind $win.ent <Return> {
|
|
||||||
set lineNumber [.gotoline.ent get]
|
|
||||||
# $txt see insert $lineNumber
|
|
||||||
puts $Editor::txt
|
|
||||||
$Editor::txt mark set insert $lineNumber.0
|
|
||||||
$Editor::txt see insert
|
|
||||||
focus $Editor::txt.t
|
|
||||||
destroy .gotoline
|
|
||||||
break
|
|
||||||
}
|
|
||||||
# Определям расстояние до края экрана (основного окна) и если
|
|
||||||
# оно меньше размера окна со списком то сдвигаем его вверх
|
|
||||||
set winGeom [winfo reqheight $win]
|
|
||||||
set topHeight [winfo height .]
|
|
||||||
# puts "$x, $y, $winGeom, $topHeight"
|
|
||||||
if [expr [expr $topHeight - $y] < $winGeom] {
|
|
||||||
set y [expr $topHeight - $winGeom]
|
|
||||||
}
|
|
||||||
wm geom $win +$x+$y
|
|
||||||
focus $win.ent
|
|
||||||
}
|
|
||||||
|
|
||||||
proc EditorWidget {fr fileType} {
|
proc EditorWidget {fr fileType} {
|
||||||
global cfgVariables editors
|
global cfgVariables editors
|
||||||
|
|
||||||
@ -1417,17 +1356,6 @@ namespace eval Editor {
|
|||||||
|
|
||||||
proc Editor {fileFullPath nb itemName} {
|
proc Editor {fileFullPath nb itemName} {
|
||||||
global cfgVariables editors
|
global cfgVariables editors
|
||||||
set imageType {
|
|
||||||
PNG
|
|
||||||
JPG
|
|
||||||
JPEG
|
|
||||||
WEBP
|
|
||||||
GIF
|
|
||||||
TIFF
|
|
||||||
JP2
|
|
||||||
ICO
|
|
||||||
XPM
|
|
||||||
}
|
|
||||||
set fr $itemName
|
set fr $itemName
|
||||||
if ![string match "*untitled*" $itemName] {
|
if ![string match "*untitled*" $itemName] {
|
||||||
set lblText $fileFullPath
|
set lblText $fileFullPath
|
||||||
@ -1459,13 +1387,47 @@ namespace eval Editor {
|
|||||||
pack propagate $fr.panelTxt false
|
pack propagate $fr.panelTxt false
|
||||||
pack $fr.panelTxt -side top -fill both -expand true
|
pack $fr.panelTxt -side top -fill both -expand true
|
||||||
|
|
||||||
if {[lsearch -exact $imageType $fileType] != -1} {
|
set frmText [Editor::EditorWidget $fr $fileType]
|
||||||
ImageViewer $fileFullPath $itemName $fr
|
|
||||||
} else {
|
|
||||||
set frmText [Editor::EditorWidget $fr $fileType]
|
|
||||||
}
|
|
||||||
$fr.panelTxt add $frmText -weight 0
|
$fr.panelTxt add $frmText -weight 0
|
||||||
|
|
||||||
return $fr
|
return $fr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ctextBindings.tcl
|
||||||
|
#
|
||||||
|
# Copyright (C) 2012 Sedat Serper
|
||||||
|
# A similar script and functionality is implemented in tG² as of v1.06.01.41
|
||||||
|
#
|
||||||
|
# proc ctext_binding4Tag {w tags} {
|
||||||
|
# # foreach tag $tags {
|
||||||
|
# $w tag bind $tag <Enter> {%W config -cursor hand2}
|
||||||
|
# $w tag bind $tag <Leave> {%W config -cursor xterm}
|
||||||
|
# $w tag bind $tag <ButtonRelease-1> {
|
||||||
|
# set cur [::tk::TextClosestGap %W %x %y]
|
||||||
|
# if {[catch {%W index anchor}]} {%W mark set anchor $cur}
|
||||||
|
# set anchor [%W index anchor]
|
||||||
|
# set last [::tk::TextNextPos %W "$cur - 1c" tcl_wordBreakAfter]
|
||||||
|
# set first [::tk::TextPrevPos %W anchor tcl_wordBreakBefore]
|
||||||
|
# if {![catch {set tmp [%W get $first $last]}]} {
|
||||||
|
# ctext_execTagCmd $tmp
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# THE DEMO
|
||||||
|
#
|
||||||
|
# # ----------------------- demo -------------------------------------------
|
||||||
|
# # Open a new wish console and copy/paste the following complete script.
|
||||||
|
# # Clicking on parts that are highlighted and observe the console output...
|
||||||
|
# # Adjust procedure 'ctext_execTagCmd' to customize the handling 4 your application.
|
||||||
|
# package require ctext
|
||||||
|
# pack [ctext .t] -fill both -expand 1
|
||||||
|
# ctext::addHighlightClass .t bindings purple [list <Enter> <Leave> <ButtonRelease-1>]
|
||||||
|
# ctext::addHighlightClass .t commands orange [list foreach proc if set catch]
|
||||||
|
# .t fastinsert end [info body ctext_binding4Tag]
|
||||||
|
# .t highlight 1.0 end
|
||||||
|
# ctext_binding4Tag .t {bindings commands}
|
||||||
|
110
lib/files.tcl
110
lib/files.tcl
@ -13,95 +13,7 @@ namespace eval FileOper {
|
|||||||
|
|
||||||
set ::types {
|
set ::types {
|
||||||
{"All files" *}
|
{"All files" *}
|
||||||
}
|
}
|
||||||
|
|
||||||
proc GetFileMimeType {fileFullPath {opt ""}} {
|
|
||||||
global cfgVariables
|
|
||||||
# Проверям наличие программы в системе, если есть то добавляем опции
|
|
||||||
# если нет то используем тиклевый пакет
|
|
||||||
if [file exists $cfgVariables(fileTypeCommand)] {
|
|
||||||
set cmd exec
|
|
||||||
lappend cmd $cfgVariables(fileTypeCommand)
|
|
||||||
foreach _ [split $cfgVariables(fileTypeCommandOptions) " "] {
|
|
||||||
lappend cmd $_
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
set cmd [list eval ::fileutil::magic::filetype]
|
|
||||||
}
|
|
||||||
|
|
||||||
# lappend cmd $activeProject
|
|
||||||
lappend cmd $fileFullPath
|
|
||||||
catch $cmd pipe
|
|
||||||
# puts $pipe
|
|
||||||
if [regexp -nocase -- {(\w+)/([[:alnum:]-]+); charset=([[:alnum:]-]+)} $pipe m fType fExt fCharset] {
|
|
||||||
puts "$fType $fExt $fCharset"
|
|
||||||
}
|
|
||||||
switch $opt {
|
|
||||||
"charset" {
|
|
||||||
if [info exists fCharset] {
|
|
||||||
return $fCharset
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
switch $fType {
|
|
||||||
"application" {
|
|
||||||
if {$fExt ne "json"} {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
"text" {
|
|
||||||
return text
|
|
||||||
}
|
|
||||||
"image" {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
default {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
## GETTING FILE ATTRIBUTES ##
|
|
||||||
proc GetFileAttr {file {opt ""}} {
|
|
||||||
global tcl_platform
|
|
||||||
set fileAttribute ""
|
|
||||||
# get file modify time
|
|
||||||
switch $opt {
|
|
||||||
attr {
|
|
||||||
if {$tcl_platform(platform) == "windows"} {
|
|
||||||
set unixTime [file mtime $file]
|
|
||||||
set modifyTime [clock format $unixTime -format "%d/%m/%Y, %H:%M"]
|
|
||||||
} elseif {$tcl_platform(platform) == "mac"} {
|
|
||||||
|
|
||||||
} elseif {$tcl_platform(platform) == "unix"} {
|
|
||||||
set unixTime [file mtime $file]
|
|
||||||
set modifyTime [clock format $unixTime -format "%d/%m/%Y, %H:%M"]
|
|
||||||
}
|
|
||||||
return $modifyTime
|
|
||||||
}
|
|
||||||
size {
|
|
||||||
# get file size
|
|
||||||
set size [file size $file]
|
|
||||||
if {$size < 1024} {
|
|
||||||
set fileSize "$size b"
|
|
||||||
}
|
|
||||||
if {$size >= 1024} {
|
|
||||||
set s [expr ($size.0) / 1024]
|
|
||||||
set dot [string first "\." $s]
|
|
||||||
set int [string range $s 0 [expr $dot - 1]]
|
|
||||||
set dec [string range $s [expr $dot + 1] [expr $dot + 2]]
|
|
||||||
set fileSize "$int.$dec Kb"
|
|
||||||
}
|
|
||||||
if {$size >= 1048576} {
|
|
||||||
set s [expr ($size.0) / 1048576]
|
|
||||||
set dot [string first "\." $s]
|
|
||||||
set int [string range $s 0 [expr $dot - 1]]
|
|
||||||
set dec [string range $s [expr $dot + 1] [expr $dot + 2]]
|
|
||||||
set fileSize "$int.$dec Mb"
|
|
||||||
}
|
|
||||||
return $fileSize
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
proc OpenDialog {} {
|
proc OpenDialog {} {
|
||||||
global env project activeProject
|
global env project activeProject
|
||||||
@ -220,8 +132,6 @@ namespace eval FileOper {
|
|||||||
}
|
}
|
||||||
unset modified($nbItem)
|
unset modified($nbItem)
|
||||||
.frmStatus.lblPosition configure -text ""
|
.frmStatus.lblPosition configure -text ""
|
||||||
.frmStatus.lblEncoding configure -text ""
|
|
||||||
.frmStatus.lblSize configure -text ""
|
|
||||||
}
|
}
|
||||||
|
|
||||||
proc Save {} {
|
proc Save {} {
|
||||||
@ -360,21 +270,8 @@ namespace eval FileOper {
|
|||||||
global nbEditor tree
|
global nbEditor tree
|
||||||
if {[file exists $fileFullPath] == 0} {
|
if {[file exists $fileFullPath] == 0} {
|
||||||
return false
|
return false
|
||||||
} else {
|
|
||||||
# puts [::fileutil::magic::filetype $fileFullPath]
|
|
||||||
set fileType [FileOper::GetFileMimeType $fileFullPath]
|
|
||||||
}
|
|
||||||
switch $fileType {
|
|
||||||
"text" {
|
|
||||||
# return text
|
|
||||||
}
|
|
||||||
"image" {
|
|
||||||
# return image
|
|
||||||
}
|
|
||||||
false {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
set filePath [file dirname $fileFullPath]
|
set filePath [file dirname $fileFullPath]
|
||||||
set fileName [file tail $fileFullPath]
|
set fileName [file tail $fileFullPath]
|
||||||
regsub -all {\.|/|\\|\s} $fileFullPath "_" itemName
|
regsub -all {\.|/|\\|\s} $fileFullPath "_" itemName
|
||||||
@ -394,8 +291,7 @@ namespace eval FileOper {
|
|||||||
$itemName.frmText.t.t mark set insert 1.0
|
$itemName.frmText.t.t mark set insert 1.0
|
||||||
$itemName.frmText.t.t see 1.0
|
$itemName.frmText.t.t see 1.0
|
||||||
focus -force $itemName.frmText.t.t
|
focus -force $itemName.frmText.t.t
|
||||||
.frmStatus.lblSize configure -text [GetFileAttr $fileFullPath "size"]
|
|
||||||
.frmStatus.lblEncoding configure -text [GetFileMimeType $fileFullPath "charset"]
|
|
||||||
return $itemName
|
return $itemName
|
||||||
}
|
}
|
||||||
|
|
||||||
|
19
lib/git.tcl
19
lib/git.tcl
@ -159,20 +159,16 @@ namespace eval Git {
|
|||||||
|
|
||||||
proc Commit {w} {
|
proc Commit {w} {
|
||||||
global cfgVariables activeProject
|
global cfgVariables activeProject
|
||||||
set txt $w.body.tCommit
|
set txt [string trim [$w get 0.0 end]]
|
||||||
set listBox $w.body.lCommit
|
puts $txt
|
||||||
set description [string trim [$txt get 0.0 end]]
|
|
||||||
puts $description
|
|
||||||
set cmd exec
|
set cmd exec
|
||||||
append cmd " $cfgVariables(gitCommand)"
|
append cmd " $cfgVariables(gitCommand)"
|
||||||
append cmd " commit"
|
append cmd " commit"
|
||||||
append cmd " -m"
|
append cmd " -m"
|
||||||
append cmd " \"$description\""
|
append cmd " \"$txt\""
|
||||||
append cmd " --"
|
append cmd " --"
|
||||||
foreach item [$listBox get 0 [$listBox size]] {
|
append cmd " $activeProject"
|
||||||
append cmd " [file join $activeProject $item]"
|
if {$txt eq ""} {
|
||||||
}
|
|
||||||
if {$description eq ""} {
|
|
||||||
set answer [tk_messageBox -message [::msgcat::mc "Empty commit description"] \
|
set answer [tk_messageBox -message [::msgcat::mc "Empty commit description"] \
|
||||||
-icon info -type ok \
|
-icon info -type ok \
|
||||||
-detail [::msgcat::mc "You must enter a commit description"]]
|
-detail [::msgcat::mc "You must enter a commit description"]]
|
||||||
@ -556,7 +552,7 @@ namespace eval Git {
|
|||||||
|
|
||||||
ttk::button $fr.body.bCommit -image done_20x20 -compound left \
|
ttk::button $fr.body.bCommit -image done_20x20 -compound left \
|
||||||
-text "[::msgcat::mc "Commit changes"]" \
|
-text "[::msgcat::mc "Commit changes"]" \
|
||||||
-command "Git::Commit $fr; Git::DialogUpdate $fr"
|
-command "Git::Commit $fr.body.tCommit; Git::DialogUpdate $fr"
|
||||||
ttk::button $fr.body.bPush -image doneall_20x20 -compound left \
|
ttk::button $fr.body.bPush -image doneall_20x20 -compound left \
|
||||||
-text "[::msgcat::mc "Push changes"]" \
|
-text "[::msgcat::mc "Push changes"]" \
|
||||||
-command "Git::PushPrepare; Git::DialogUpdate $fr"
|
-command "Git::PushPrepare; Git::DialogUpdate $fr"
|
||||||
@ -625,7 +621,7 @@ namespace eval Git {
|
|||||||
Git::DialogUpdate $Git::fr
|
Git::DialogUpdate $Git::fr
|
||||||
}
|
}
|
||||||
bind $fr.body.lBox <Return> "Git::CommitAdd $fr"
|
bind $fr.body.lBox <Return> "Git::CommitAdd $fr"
|
||||||
bind $fr.body.lBox <Double-Button-1> "catch {Git::CommitAdd $fr; $fr.body.t delete 0.0 end; $fr.body.tCommit delete 0.0 end}"
|
bind $fr.body.lBox <Double-Button-1> "catch {Git::CommitAdd $fr}"
|
||||||
bind $fr.body.lBox <Button-1><ButtonRelease-1> "Git::ListBoxPress $fr"
|
bind $fr.body.lBox <Button-1><ButtonRelease-1> "Git::ListBoxPress $fr"
|
||||||
bind $fr.body.lBox <KeyRelease> "Git::Key %K $fr"
|
bind $fr.body.lBox <KeyRelease> "Git::Key %K $fr"
|
||||||
|
|
||||||
@ -646,7 +642,6 @@ namespace eval Git {
|
|||||||
}
|
}
|
||||||
# End Git commit history
|
# End Git commit history
|
||||||
|
|
||||||
ctext::addHighlightClassForRegexp $fr.body.t files yellow {^diff.*$}
|
|
||||||
ctext::addHighlightClassForRegexp $fr.body.t paths #19a2a6 {@@.+@@}
|
ctext::addHighlightClassForRegexp $fr.body.t paths #19a2a6 {@@.+@@}
|
||||||
ctext::addHighlightClassForRegexp $fr.body.t add green {^\+.*$}
|
ctext::addHighlightClassForRegexp $fr.body.t add green {^\+.*$}
|
||||||
ctext::addHighlightClassForRegexp $fr.body.t gremove grey {^\-.*$}
|
ctext::addHighlightClassForRegexp $fr.body.t gremove grey {^\-.*$}
|
||||||
|
@ -79,15 +79,13 @@ pack .frmStatus -side top -padx 1 -fill x
|
|||||||
# pack .panel -expand true -fill both
|
# pack .panel -expand true -fill both
|
||||||
# pack propagate .panel false
|
# pack propagate .panel false
|
||||||
#pack [label .frmMenu.lbl -text "ddd"]
|
#pack [label .frmMenu.lbl -text "ddd"]
|
||||||
|
|
||||||
pack [ttk::label .frmStatus.lblGitLogo -justify left] -side left
|
pack [ttk::label .frmStatus.lblGitLogo -justify left] -side left
|
||||||
pack [ttk::label .frmStatus.lblGit] -side left -expand true -fill x
|
pack [ttk::label .frmStatus.lblGit] -side left
|
||||||
bind .frmStatus.lblGit <Button-1><ButtonRelease-1> {
|
bind .frmStatus.lblGit <Button-1><ButtonRelease-1> {
|
||||||
Git::BranchDialog %X %Y
|
Git::BranchDialog %X %Y
|
||||||
}
|
}
|
||||||
pack [ttk::label .frmStatus.lblPosition -justify right] -side left -expand true -fill x
|
|
||||||
pack [ttk::label .frmStatus.lblSize -justify center] -side right -fill x
|
pack [ttk::label .frmStatus.lblPosition -justify right] -side right
|
||||||
pack [ttk::label .frmStatus.lblEncoding -justify center] -side right -fill x
|
|
||||||
|
|
||||||
ttk::menubutton .frmMenu.mnuFile -text [::msgcat::mc "File"] -menu .frmMenu.mnuFile.m
|
ttk::menubutton .frmMenu.mnuFile -text [::msgcat::mc "File"] -menu .frmMenu.mnuFile.m
|
||||||
GetFileMenu [menu .frmMenu.mnuFile.m]
|
GetFileMenu [menu .frmMenu.mnuFile.m]
|
||||||
|
@ -1,69 +0,0 @@
|
|||||||
proc ImageViewer {f w node} {
|
|
||||||
set factor($node) 1.0
|
|
||||||
ttk::frame $w.f
|
|
||||||
pack $w.f -side left -fill both -expand true
|
|
||||||
canvas $w.f.c -xscrollcommand "$w.f.x set" -yscrollcommand "$w.y set"
|
|
||||||
ttk::scrollbar $w.f.x -ori hori -command "$w.f.c xview"
|
|
||||||
ttk::scrollbar $w.y -ori vert -command "$w.f.c yview"
|
|
||||||
|
|
||||||
pack $w.f.c -side top -fill both -expand true
|
|
||||||
pack $w.f.x -side top -fill x
|
|
||||||
pack $w.y -side left -fill y
|
|
||||||
bind $w.f.c <Button-4> "%W yview scroll -3 units"
|
|
||||||
bind $w.f.c <Button-5> "%W yview scroll 3 units"
|
|
||||||
bind $w.f.c <Shift-Button-4> "%W xview scroll -2 units"
|
|
||||||
bind $w.f.c <Shift-Button-5> "%W xview scroll 2 units"
|
|
||||||
bind $w.f.c <Control-Button-4> "scale $w.f.c 0.5 $node"
|
|
||||||
bind $w.f.c <Control-Button-5> "scale $w.f.c 2 $node"
|
|
||||||
#$w.scrwin setwidget $w.scrwin.f
|
|
||||||
openImg $f $w.f.c $node
|
|
||||||
}
|
|
||||||
|
|
||||||
proc openImg {fn w node} {
|
|
||||||
global im1
|
|
||||||
set im1 [image create photo -file $fn]
|
|
||||||
#scale $w
|
|
||||||
list [file size $fn] bytes, [image width $im1]x[image height $im1]
|
|
||||||
$w create image 1 1 -image $im1 -anchor nw -tag img
|
|
||||||
}
|
|
||||||
|
|
||||||
proc scale {w {n 1} node} {
|
|
||||||
global im1 im2 factor noteBook tab_label
|
|
||||||
set factor($node) [expr {$factor($node) * $n}]
|
|
||||||
$w delete img
|
|
||||||
catch {image delete $im2}
|
|
||||||
set im2 [image create photo]
|
|
||||||
if {$factor($node)>=1} {
|
|
||||||
set f [expr int($factor($node))]
|
|
||||||
$im2 copy $im1 -zoom $f $f
|
|
||||||
} else {
|
|
||||||
set f [expr round(1./$factor($node))]
|
|
||||||
$im2 copy $im1 -subsample $f $f
|
|
||||||
}
|
|
||||||
$w create image 1 1 -image $im2 -anchor nw -tag img
|
|
||||||
$noteBook itemconfigure $node -text "$tab_label (size x$factor($node))"
|
|
||||||
$w config -scrollregion [$w bbox all]
|
|
||||||
}
|
|
||||||
|
|
||||||
proc ImageBase64Encode {text} {
|
|
||||||
global env
|
|
||||||
set types {
|
|
||||||
{"PNG" {.png}}
|
|
||||||
{"GIF" {.gif}}
|
|
||||||
{"JPEG" {.jpg}}
|
|
||||||
{"BMP" {.bmp}}
|
|
||||||
{"All files" *}
|
|
||||||
}
|
|
||||||
set img [tk_getOpenFile -initialdir $env(HOME) -filetypes $types -parent .]
|
|
||||||
if {$img ne ""} {
|
|
||||||
set f [open $img]
|
|
||||||
fconfigure $f -translation binary
|
|
||||||
set data [base64::encode [read $f]]
|
|
||||||
close $f
|
|
||||||
# base name on root name of the image file
|
|
||||||
set name [file root [file tail $img]]
|
|
||||||
$text insert [Position] "image create photo $name -data {\n$data\n}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -189,9 +189,6 @@ proc FindVariablesDialog {txt args} {
|
|||||||
set y [expr [lindex $box 1] + [winfo rooty $txt] + [lindex $box 3] ]
|
set y [expr [lindex $box 1] + [winfo rooty $txt] + [lindex $box 3] ]
|
||||||
|
|
||||||
set win .findVariables
|
set win .findVariables
|
||||||
if [winfo exists .varhelper] {
|
|
||||||
destroy .varhelper
|
|
||||||
}
|
|
||||||
|
|
||||||
if { [winfo exists $win] } { destroy $win }
|
if { [winfo exists $win] } { destroy $win }
|
||||||
toplevel $win
|
toplevel $win
|
||||||
|
@ -10,7 +10,7 @@ exec wish "$0" -- "$@"
|
|||||||
######################################################
|
######################################################
|
||||||
# Version: 2.0.0
|
# Version: 2.0.0
|
||||||
# Release: alpha
|
# Release: alpha
|
||||||
# Build: 11112022131048
|
# Build: 08112022125307
|
||||||
######################################################
|
######################################################
|
||||||
|
|
||||||
# определим текущую версию, релиз и т.д.
|
# определим текущую версию, релиз и т.д.
|
||||||
@ -47,7 +47,6 @@ package require ctext
|
|||||||
package require base64
|
package require base64
|
||||||
package require fileutil
|
package require fileutil
|
||||||
package require Thread
|
package require Thread
|
||||||
package require fileutil::magic::filetype
|
|
||||||
|
|
||||||
# Устанавливаем текущий каталог
|
# Устанавливаем текущий каталог
|
||||||
set dir(root) [pwd]
|
set dir(root) [pwd]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user