From 04e7dd2560a37a9eb5f124886bd50d7585065f50 Mon Sep 17 00:00:00 2001 From: svkalinin Date: Mon, 17 Oct 2022 16:55:22 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D0=BB=D0=BE=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=20=D0=BF=D0=BE=20=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B5=20git?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/config.tcl | 1 + lib/editor.tcl | 6 +- lib/files.tcl | 18 +++--- lib/git.tcl | 141 ++++++++++++++++++++++++++++++++++++++++++ lib/gui.tcl | 8 +-- lib/image_library.tcl | 49 +++++++++++++++ lib/msgs/ru.msg | 2 + lib/notebook.tcl | 6 ++ lib/procedure.tcl | 6 +- projman.tcl | 2 +- 10 files changed, 220 insertions(+), 19 deletions(-) create mode 100644 lib/git.tcl diff --git a/lib/config.tcl b/lib/config.tcl index 60e6126..e4b7fc1 100644 --- a/lib/config.tcl +++ b/lib/config.tcl @@ -27,6 +27,7 @@ opened= editedFiles= searchCommand=/usr/bin/grep searchCommandOptions=-r -n -H +gitCommand=/usr/bin/git \[GUI\] locale=$locale theme=dark diff --git a/lib/editor.tcl b/lib/editor.tcl index d8482b1..a76cdde 100644 --- a/lib/editor.tcl +++ b/lib/editor.tcl @@ -620,7 +620,7 @@ namespace eval Editor { dict set editors $txt procedureList $procList dict set editors $txt variableList $varList } - + proc FindFunction {txt findString} { global nbEditor puts $findString @@ -795,8 +795,8 @@ namespace eval Editor { } wm geom $win +$x+$y } - -proc FindReplaceText {txt findString replaceString regexp} { + + proc FindReplaceText {txt findString replaceString regexp} { global nbEditor puts [focus] # set txt [$nbEditor select].frmText.t diff --git a/lib/files.tcl b/lib/files.tcl index 338abda..bbb378c 100644 --- a/lib/files.tcl +++ b/lib/files.tcl @@ -100,14 +100,16 @@ namespace eval FileOper { # puts "close tab $nbItem" if {$nbItem == ""} {return} - if {$modified($nbItem) eq "true"} { - set answer [tk_messageBox -message [::msgcat::mc "File was modifyed"] \ - -icon question -type yesnocancel \ - -detail [::msgcat::mc "Do you want to save it?"]] - switch $answer { - yes Save - no {} - cancel {return "cancel"} + if [info exists modified($nbItem)] { + if {$modified($nbItem) eq "true"} { + set answer [tk_messageBox -message [::msgcat::mc "File was modifyed"] \ + -icon question -type yesnocancel \ + -detail [::msgcat::mc "Do you want to save it?"]] + switch $answer { + yes Save + no {} + cancel {return "cancel"} + } } } $nbEditor forget $nbItem diff --git a/lib/git.tcl b/lib/git.tcl new file mode 100644 index 0000000..0a4aa7c --- /dev/null +++ b/lib/git.tcl @@ -0,0 +1,141 @@ +###################################################### +# ProjMan 2 +# Distributed under GNU Public License +# Author: Sergey Kalinin svk@nuk-svk.ru +# Copyright (c) "SVK", 2022, https://nuk-svk.ru +###################################################### +# Git module +# usage a system git command +####################################################### + + +namespace eval Git { + variable gitCommand + + proc GetConfig {} { + global activeProject + set confOptions { + remote.origin.url + user.user + user.email + init.defaultbranch + branch.master.remote + } + } + + proc Status {} { + global cfgVariables activeProject + set cmd exec + lappend cmd $cfgVariables(gitCommand) + lappend cmd "status" + lappend cmd "-s" + lappend cmd "--" + lappend cmd $activeProject + catch $cmd pipe + foreach line [split $pipe "\n"] { + lappend res $line + } + return $res + } + + proc Diff {f} { + global cfgVariables activeProject + set cmd exec + lappend cmd $cfgVariables(gitCommand) + lappend cmd "diff" + lappend cmd "--" + lappend cmd [file join $activeProject [string trimleft $f "../"]] + catch $cmd pipe + puts $cmd + # puts $pipe + foreach line [split $pipe "\n"] { + lappend res $line + } + return $res + } + + proc Commit {} { + global cfgVariables activeProject + } + + proc Pull {} { + global cfgVariables activeProject + } + + proc Push {} { + global cfgVariables activeProject + } + + proc Merge {} { + global cfgVariables activeProject + } + + proc Dialog {} { + global cfgVariables activeProject nbEditor + variable fr + set fr [NB::InsertItem $nbEditor git_browse "git"] + ttk::frame $fr.header + set lblName "lblGit" + set lblText $activeProject + ttk::label $fr.header.$lblName -text $lblText + pack $fr.header.$lblName -side left -expand true -fill x + pack $fr.header -side top -fill x + + ttk::frame $fr.body + pack $fr.body -side top -expand true -fill both + + set lstFiles [listbox $fr.body.lBox -width 30 -border 2 -yscrollcommand "$fr.body.yscroll set" -border 1] + ttk::scrollbar $fr.body.yscroll -orient vertical -command "$fr.body.lBox yview" + pack $fr.body.lBox -expand true -fill y -side left + pack $fr.body.yscroll -side left -expand false -fill y + + set txt $fr.body.t + # set txt $frmText.t + + pack [ttk::scrollbar $fr.body.v -command "$fr.body.t yview"] -side right -fill y + ttk::scrollbar $fr.body.h -orient horizontal -command "$fr.body.t xview" + ctext $txt -xscrollcommand "$fr.body.h set" -yscrollcommand "$fr.body.v set" \ + -font $cfgVariables(font) -relief flat -wrap none \ + -linemapfg $cfgVariables(lineNumberFG) -linemapbg $cfgVariables(lineNumberBG) \ + -tabs "[expr {4 * [font measure $cfgVariables(font) 0]}] left" -tabstyle tabular -undo true + + pack $txt -fill both -expand 1 + pack $fr.body.h -side bottom -fill x + + foreach { word } [Git::Status] { + $fr.body.lBox insert end [string trim $word] + } + catch { $fr.body.lBox activate 0 ; $fr.body.lBox selection set 0 0 } + bind $fr.body.lBox { + set values [$Git::fr.body.lBox get [$Git::fr.body.lBox curselection]] + if [regexp -nocase -line -lineanchor -- {([\w?]+)\s(.+?)} $values m mod fileName] { + $Git::fr.body.t delete 1.0 end + switch $mod { + M { + set i 0 + foreach line [Git::Diff $fileName] { + puts $line + if {$i > 3} { + $Git::fr.body.t inser end "$line\n" + } + incr i + } + $Git::fr.body.t highlight 1.0 end + } + "??" { + $Git::fr.body.t inser end [::msgcat::mc "Untraceable file"] + } + D { + $Git::fr.body.t inser end [::msgcat::mc "File was deleted"] + } + } + } + + break + } + ctext::addHighlightClassForRegexp $txt paths #19a2a6 {@@.+@@} + ctext::addHighlightClassForRegexp $txt add green {^\+.*$} + ctext::addHighlightClassForRegexp $txt gremove grey {^\-.*$} + $txt highlight 1.0 end + } +} diff --git a/lib/gui.tcl b/lib/gui.tcl index 709aacb..659cb31 100644 --- a/lib/gui.tcl +++ b/lib/gui.tcl @@ -104,9 +104,11 @@ pack propagate .frmBody.panel false pack .frmBody.frmTool -side left -fill y pack .frmBody.panel -side left -fill both -expand true -ttk::button $frmTool.btn_tree -command ViewFilesTree -image tree_24x24 +ttk::button $frmTool.btn_tree -command ViewFilesTree -image tree_24x24 +ttk::button $frmTool.btn_search -command FileOper::FindInFiles -image search_24x24 +ttk::button $frmTool.btn_git -command Git::Dialog -image git_24x24 -pack $frmTool.btn_tree -side top -padx 1 -pady 1 +pack $frmTool.btn_tree $frmTool.btn_search $frmTool.btn_git -side top -padx 1 -pady 1 # #label $frmTool.lbl_logo -image tcl # pack $frmTool.btn_quit -side bottom -padx 5 -pady 5 # #pack $frmTool.lbl_logo -side bottom -padx 5 -pady 5 @@ -122,8 +124,6 @@ set tree [ttk::treeview $frmTree.tree -show tree \ ttk::scrollbar $frmTree.h -orient horizontal -command [list $frmTree.tree xview] ttk::scrollbar $frmTree.v -orient vertical -command [list $frmTree.tree yview] - - bind $tree {Tree::DoublePressItem $tree} bind $tree {Tree::PressItem $tree; break} diff --git a/lib/image_library.tcl b/lib/image_library.tcl index b0b62c7..2ccc3ae 100644 --- a/lib/image_library.tcl +++ b/lib/image_library.tcl @@ -1069,3 +1069,52 @@ image create photo split_vertical_11x11 -data { ZWQgd2l0aCBHSU1QV4EOFwAAAEdJREFUGNNjnDlz5n8GIkB6ejojEwPxoJwJSWdjenp6Iy4+AwMD J7rJE/Hx0RX/wMcnxc00VMxIQjg3kmYyLMAZGBg4CSkGAHuPE34LukmBAAAAAElFTkSuQmCC } +image create photo search_24x24 -data { + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9 + kT1Iw0AcxV9TRS0VETuIdAhYnSyIijhqFYpQodQKrTqYXPoFTRqSFBdHwbXg4Mdi1cHFWVcHV0EQ + /ABxdHJSdJES/5cUWsR4cNyPd/ced+8AoV5mqtkxDqiaZaTiMTGTXRW7XhFAP3oQxrDETH0umUzA + c3zdw8fXuyjP8j735+hVciYDfCLxLNMNi3iDeHrT0jnvE4dYUVKIz4nHDLog8SPXZZffOBccFnhm + yEin5olDxGKhjeU2ZkVDJZ4ijiiqRvlCxmWF8xZntVxlzXvyFwZz2soy12mGEccilpCECBlVlFCG + hSitGikmUrQf8/APOf4kuWRylcDIsYAKVEiOH/wPfndr5icn3KRgDOh8se2PEaBrF2jUbPv72LYb + J4D/GbjSWv5KHZj5JL3W0iJHQN82cHHd0uQ94HIHGHzSJUNyJD9NIZ8H3s/om7LAwC0QWHN7a+7j + 9AFIU1eJG+DgEBgtUPa6x7u723v790yzvx9mlnKiL4DMEQAAAAZiS0dEAAAAAAAA+UO7fwAAAAlw + SFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB+YKEQkrLOWl0GEAAAN/SURBVEjHtZZPTBtXEMa/ffbu + PmPXGCsikCoKPSFKq1jIXDj0X9T00kOrHCohei6qpSAhWQpyqygHUgku5VAk0KqlRRSDkVxfCKaq + FaVEjUz2hLbBTlqnTrCQKevGXuK1m33byxIRq7GdJp3j07zf7Mx8M2+B/9m4/3pxbm7uuGEYXk3T + ciMjI0UA5nMHWFlZ8TLGPhNFcZAQctw6NnVd31ZV9etYLDa7urpaPHrH1ix8cXHRL4riz4IgvMsY + sxcKhUypVMoCMBwOR5fb7X6vp6fnHbvdfk1RFPWZMlhYWOhyuVwyx3GeTCazIUmStLW1dRuABoAP + BAKvDQwMhNxud3epVLo5ODj4IYD7TWcwNDS0aLfbX0+lUqujo6Nf5PP5qwB+B5AHsLu5uXnLMIx4 + d3f3GZfLdbq/v78Sj8eTAKqkEXx+fv4Uz/Nni8XiTjAYnAGwCeBBTVP/jsVi6Uwmcx4A6+zs/AjA + CQBoGIAQchYAyeVyMoC0VZZ/M3NsbOyaruu3nU5nV19f38sAONJEhU4BQLlczlpfXs+qjLG7HMeR + 3t7eEwBsDQMwxh4CAKWUPk3rNRm7AGBnZ6fcVIkODg5uAEB7e3sfgJfq+UqS5BQEwVcul9VEIqEC + MBoGGB4evl6pVDJer9cXCoXOABCf5tva2jpOCHFa/coDMJvpQWV3d/cyx3HE7/dPjo+PnwNAa53C + 4fAFSul5XdcL0Wj0u8M5aDhokiSJHo8nLorimwBgmibTNO16tVpNmKb5hyiKr1BKz/E8/2q1Wi2t + r69/OTMz8w2AuwBMrhHc6/Ve4Xn+bVVVU9vb2+s+n++DlpaWk0/o0zSNvb29W2tra7ORSOSKBX9U + NwNJklrb2tp+EAThLVVVUxMTExcVRfkFgCMYDL7R0dHht9lsbk3TCrIsy9Fo9FcAvwH4EwCru4vC + 4fD7lNJZm83Wub+/n56cnLyoKMpPAPYsF8FSFAVgWMP38Cj40Oy1B8vLy587HI5LADhd1/+anp6e + UBQlcQQOAFUA+83ssScCRCKRryilnx42c2Nj49tkMnm1Bv5M9limS0tLnxzCASCdTv84NTX1PYB7 + zUxw3SczGo3yhJAcIeQYAGSz2WQgEAgBuFFnuTWfga7rJwkhxxhjj1Kp1JoFv/m88Mc9kGX5vsfj + +ViWZWbJ7c6LgNfKlB5RCHtRvy3/ALLWeOAkYiyVAAAAAElFTkSuQmCC +} +image create photo git_24x24 -data { +iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9 +kT1Iw0AcxV9TRS0VETuIdAhYnSyIijhqFYpQodQKrTqYXPoFTRqSFBdHwbXg4Mdi1cHFWVcHV0EQ +/ABxdHJSdJES/5cUWsR4cNyPd/ced+8AoV5mqtkxDqiaZaTiMTGTXRW7XhFAP3oQxrDETH0umUzA +c3zdw8fXuyjP8j735+hVciYDfCLxLNMNi3iDeHrT0jnvE4dYUVKIz4nHDLog8SPXZZffOBccFnhm +yEin5olDxGKhjeU2ZkVDJZ4ijiiqRvlCxmWF8xZntVxlzXvyFwZz2soy12mGEccilpCECBlVlFCG +hSitGikmUrQf8/APOf4kuWRylcDIsYAKVEiOH/wPfndr5icn3KRgDOh8se2PEaBrF2jUbPv72LYb +J4D/GbjSWv5KHZj5JL3W0iJHQN82cHHd0uQ94HIHGHzSJUNyJD9NIZ8H3s/om7LAwC0QWHN7a+7j +9AFIU1eJG+DgEBgtUPa6x7u723v790yzvx9mlnKiL4DMEQAAAAZiS0dEAAAAAAAA+UO7fwAAAAlw +SFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB+YKEQoREgMrreoAAAJQSURBVEjH7VVPiBJRHP58o07O +ik6XdYTwEijUXQg65VU8ZNqpY6c6ee4QsmrXaCOt06okCCkxhywvRh5Klv5sCCGKC2rTdBnUIQp2 +fF1GmHVHV+tY3+335vu97zdvvvcN8B+nwGIs6vW6XVGUXZZlY5RSoqrqy1qtligWiyMAdLHZwI9T +Si3T6fRVpVJJVKvV4ZxPjA3j8fiBw+G4SQjhGYZxud3uWCgUegRg22w6RVF2db6bYRgXz/PXIpHI +QyP/mIDNZosDQKPReNJqtXYAgOf5KwB8ZgIsy8ZM+CEj/5gApZQAAMdxstfr/aKvWQBsmQmsw7ca +G6bTaY3n+XgwGLwzX5Mk6QDA2ExgHT5jbHA6nW89Ho+f4zg/AAwGg/18Pp8ajUYHAH6ecIjF8s7n +813kOO48pZQOh8P9XC63I8vyJzP+3FUeURSpKIoUwA0AZxfdZuQXCoX7oihS3WlXdT5Mj0i3lmyo +vwNQzHYulUpeQshtjuNuAUCn03kB4OMi37rqkqTT6cuBQOCu1Wq9QAhxLeP1+/03yWRyD8DXlRdt +Dv14VkLTtCNVVeV2u/08k8k8BfAZwGSRt/INKKWzbrfbaDabzyqVyiEAzfB4BuAHgBEACcAvsz1W +CvR6vdeJRCIF4L0+3WzTLCKL2VIulx8bbHsmHA5/0309+5OwI2bZMq8FQbgUjUbvLcuijQVYlr1+ +Wrb8lcAc62bROjj2kSeTyUZZtA5OZJEgCH673X5O07QjSZI+ZLPZ1Kps2eiPptfb+plv6ZMfLouL +fwO/AYhqCBpNK/77AAAAAElFTkSuQmCC +} diff --git a/lib/msgs/ru.msg b/lib/msgs/ru.msg index 96f2ef6..00457cd 100644 --- a/lib/msgs/ru.msg +++ b/lib/msgs/ru.msg @@ -72,6 +72,7 @@ ::msgcat::mcset ru "File" "Файл" ::msgcat::mcset ru "Files" "Файлах" ::msgcat::mcset ru "File already exists. Overwrite?" "Файл уже существует. Переписать?" +::msgcat::mcset ru "File was deleted" "Файл был удалён" ::msgcat::mcset ru "File was modifyed. Close?" "Файл был изменен. Закрыть?" ::msgcat::mcset ru "File was modifyed" "Файл был изменен" ::msgcat::mcset ru "File modify" "Файл изменен" @@ -191,6 +192,7 @@ ::msgcat::mcset ru "Toolbar" "Панель инструментов" ::msgcat::mcset ru "Undo" "Отменить" ::msgcat::mcset ru "Update" "Обновить" +::msgcat::mcset ru "Untraceable file" "Неотслеживаемый файл" ::msgcat::mcset ru "Variables" "Переменные" ::msgcat::mcset ru "Version" "Версия" ::msgcat::mcset ru "View" "Вид" diff --git a/lib/notebook.tcl b/lib/notebook.tcl index ea43a54..0eb3f10 100644 --- a/lib/notebook.tcl +++ b/lib/notebook.tcl @@ -23,6 +23,12 @@ namespace eval NB { $nb select $fm } } + git { + set fm [ttk::frame $nb.$item] + pack $fm -side top -expand true -fill both + $nb add $fm -text Git;# -image close_12x12 -compound right + $nb select $fm + } } # puts "NB item - $fm" return $fm diff --git a/lib/procedure.tcl b/lib/procedure.tcl index 8d7daff..bb47f48 100644 --- a/lib/procedure.tcl +++ b/lib/procedure.tcl @@ -168,6 +168,7 @@ proc GetVariableFilePath {txt} { return [list $vName $vPath $vValue] } } + proc FindVariablesDialog {txt args} { global editors lexers cfgVariables # variable txt @@ -253,7 +254,7 @@ proc FindVariablesDialog {txt args} { if {$path ne ""} { destroy .findVariables FileOper::Edit $path - Editor::FindFunction "$varName" + Editor::FindFunction $t "$varName" } # $txt tag remove sel 1.0 end # focus $Editor::txt.t @@ -268,7 +269,7 @@ proc FindVariablesDialog {txt args} { if {$path ne ""} { destroy .findVariables FileOper::Edit $path - Editor::FindFunction "$varName" + Editor::FindFunction $t "$varName" } break } @@ -513,4 +514,3 @@ proc FindInFilesDialog {txt {args ""}} { } # $win.lBox focus I001 } - diff --git a/projman.tcl b/projman.tcl index 0900cfe..23ee368 100755 --- a/projman.tcl +++ b/projman.tcl @@ -10,7 +10,7 @@ exec wish "$0" -- "$@" ###################################################### # Version: 2.0.0 # Release: alpha -# Build: 23092022123657 +# Build: 17102022165430 ###################################################### # определим текущую версию, релиз и т.д.