Added the "Open Recent" menu.

The "recentlyEditedFolders" option in the configuration file contains a list of recently opened directories.
The procedures for working with this list have also been added.
This commit is contained in:
Калинин Сергей Валерьевич
2025-10-21 15:40:22 +03:00
parent 439993091f
commit b04e62434a
8 changed files with 73 additions and 30 deletions

View File

@@ -64,6 +64,7 @@ multilineComments=true
\[UserSession\] \[UserSession\]
opened= opened=
editedFiles= editedFiles=
recentlyEditedFolders=
" "
proc Config::create {dir} { proc Config::create {dir} {
set cfgFile [open [file join $dir projman.ini] "w+"] set cfgFile [open [file join $dir projman.ini] "w+"]

View File

@@ -580,6 +580,8 @@ namespace eval Editor {
if { [set height [llength $findedVars]] > 10 } { set height 10 } if { [set height [llength $findedVars]] > 10 } { set height 10 }
$win.lBox configure -height $height $win.lBox configure -height $height
focus $win.lBox
bind $win <Escape> { bind $win <Escape> {
destroy $Editor::win destroy $Editor::win
focus -force $Editor::txt.t focus -force $Editor::txt.t
@@ -590,7 +592,7 @@ namespace eval Editor {
focus -force $Editor::txt.t focus -force $Editor::txt.t
break break
} }
bind VarHelperBind <Control-Return> { bind $win <Control-Return> {
$Editor::txt delete "insert - 1 chars wordstart" "insert wordend - 1 chars" $Editor::txt delete "insert - 1 chars wordstart" "insert wordend - 1 chars"
$Editor::txt insert "insert" [.varhelper.lBox get [.varhelper.lBox curselection]] $Editor::txt insert "insert" [.varhelper.lBox get [.varhelper.lBox curselection]]
# eval [bind VarHelperBind <Escape>] # eval [bind VarHelperBind <Escape>]

View File

@@ -149,6 +149,7 @@ namespace eval FileOper {
# } # }
# .frmStatus.lblGitLogo configure -image git_logo_20x20 # .frmStatus.lblGitLogo configure -image git_logo_20x20
# .frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]" # .frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]"
AddRecentEditedFolder $fullPath
return $fullPath return $fullPath
} }

View File

@@ -9,7 +9,7 @@
###################################################### ######################################################
proc GetFileMenu {m} { proc GetFileMenu {m} {
global activeProject global activeProject cfgVariables
$m add command -label [::msgcat::mc "New file"] -command Editor::New\ $m add command -label [::msgcat::mc "New file"] -command Editor::New\
-accelerator "Ctrl+N" -accelerator "Ctrl+N"
$m add command -label [::msgcat::mc "Open file"] -accelerator "Ctrl+O" -command { $m add command -label [::msgcat::mc "Open file"] -accelerator "Ctrl+O" -command {
@@ -24,6 +24,13 @@ proc GetFileMenu {m} {
-accelerator "Ctrl+w" -accelerator "Ctrl+w"
$m add command -label [::msgcat::mc "Close all"] -command {FileOper::CloseAll} $m add command -label [::msgcat::mc "Close all"] -command {FileOper::CloseAll}
$m add separator
menu $m.openRecent
$m add cascade -label [::msgcat::mc "Open recent"] -menu $m.openRecent
foreach item $cfgVariables(recentFolder) {
$m.openRecent add command -label $item -command [list FileOper::ReadFolder $item]
}
$m add separator $m add separator
$m add command -label [::msgcat::mc "Open folder"] -accelerator "Ctrl+K" -command { $m add command -label [::msgcat::mc "Open folder"] -accelerator "Ctrl+K" -command {

View File

@@ -7,8 +7,8 @@
# Author: Roman Schaller <r.schaller@gmx.ch> # # Author: Roman Schaller <r.schaller@gmx.ch> #
########################################################### ###########################################################
::msgcat::mcset de "About ..." "<EFBFBD>ber ..." ::msgcat::mcset de "About ..." "Über ..."
::msgcat::mcset de "Add to project" "Zu Projekt hinzuf<EFBFBD>gen" ::msgcat::mcset de "Add to project" "Zu Projekt hinzufügen"
::msgcat::mcset de "Author" "Autor" ::msgcat::mcset de "Author" "Autor"
::msgcat::mcset de "Text autoformat" "Text autoformat" ::msgcat::mcset de "Text autoformat" "Text autoformat"
::msgcat::mcset de "Cancel" "Abbrechen" ::msgcat::mcset de "Cancel" "Abbrechen"
@@ -29,9 +29,9 @@
::msgcat::mcset de "Cut into clipboard" "In Zwischenablage ausschneiden" ::msgcat::mcset de "Cut into clipboard" "In Zwischenablage ausschneiden"
::msgcat::mcset de "CVS commit" ::msgcat::mcset de "CVS commit"
::msgcat::mcset de "CVS update" ::msgcat::mcset de "CVS update"
::msgcat::mcset de "Delete" "L<EFBFBD>schen" ::msgcat::mcset de "Delete" "Löschen"
::msgcat::mcset de "Delete backup files" "Backup-Dateien l<EFBFBD>schen" ::msgcat::mcset de "Delete backup files" "Backup-Dateien löschen"
::msgcat::mcset de "Delete project" "Projekt l<EFBFBD>schen" ::msgcat::mcset de "Delete project" "Projekt löschen"
::msgcat::mcset de "Delete from project" "Von Projekt entfernen" ::msgcat::mcset de "Delete from project" "Von Projekt entfernen"
::msgcat::mcset de "Docs dir" "Dok Verzeichnis" ::msgcat::mcset de "Docs dir" "Dok Verzeichnis"
::msgcat::mcset de "Don't selected file" ::msgcat::mcset de "Don't selected file"
@@ -42,10 +42,10 @@
::msgcat::mcset de "Error open URL" ::msgcat::mcset de "Error open URL"
::msgcat::mcset de "Exit" "Beenden" ::msgcat::mcset de "Exit" "Beenden"
::msgcat::mcset de "File" "Datei" ::msgcat::mcset de "File" "Datei"
::msgcat::mcset de "File already exists. Overwrite?" "Datei besteht bereits. <EFBFBD>berschreiben?" ::msgcat::mcset de "File already exists. Overwrite?" "Datei besteht bereits. Überschreiben?"
::msgcat::mcset de "File modify" "Datei bearbeiten" ::msgcat::mcset de "File modify" "Datei bearbeiten"
::msgcat::mcset de "File was modifyed. Close?" "Datei wurde ge<EFBFBD>ndert. Trotzdem schliessen?" ::msgcat::mcset de "File was modifyed. Close?" "Datei wurde geändert. Trotzdem schliessen?"
::msgcat::mcset de "File was modifyed. Save?" "Datei wurde ge<EFBFBD>ndert. Jetzt speichern?" ::msgcat::mcset de "File was modifyed. Save?" "Datei wurde geändert. Jetzt speichern?"
::msgcat::mcset de "File saved" "Datei gespeichert" ::msgcat::mcset de "File saved" "Datei gespeichert"
::msgcat::mcset de "Find" "Suchen" ::msgcat::mcset de "Find" "Suchen"
::msgcat::mcset de "Font normal" "Schrift normal" ::msgcat::mcset de "Font normal" "Schrift normal"
@@ -55,15 +55,15 @@
::msgcat::mcset de "Home dir" "Home Verzeichnis" ::msgcat::mcset de "Home dir" "Home Verzeichnis"
::msgcat::mcset de "Home page" "Homepage" ::msgcat::mcset de "Home page" "Homepage"
::msgcat::mcset de "Image dir" "Image Verzeichnis" ::msgcat::mcset de "Image dir" "Image Verzeichnis"
::msgcat::mcset de "Insert" "Einf<EFBFBD>gen" ::msgcat::mcset de "Insert" "Einfügen"
::msgcat::mcset de "Interface language" "Interface Sprache" ::msgcat::mcset de "Interface language" "Interface Sprache"
::msgcat::mcset de "Install Tcl/Tk Project Manager" "Tcl/Tk Project Manager installieren" ::msgcat::mcset de "Install Tcl/Tk Project Manager" "Tcl/Tk Project Manager installieren"
::msgcat::mcset de "Line number" "Zeilennummer" ::msgcat::mcset de "Line number" "Zeilennummer"
::msgcat::mcset de "Make RPM" "RPM erstellen" ::msgcat::mcset de "Make RPM" "RPM erstellen"
::msgcat::mcset de "Make archive" "Archiv erstellen" ::msgcat::mcset de "Make archive" "Archiv erstellen"
::msgcat::mcset de "Make backup files" "Backup-Dateien erstellen" ::msgcat::mcset de "Make backup files" "Backup-Dateien erstellen"
::msgcat::mcset de "Must be one file select!" "Eine Datei muss ausgew<EFBFBD>hlt sein!" ::msgcat::mcset de "Must be one file select!" "Eine Datei muss ausgewählt sein!"
::msgcat::mcset de "Must be one or two file select!" "Eine oder zwei Dateien m<EFBFBD>ssen ausgew<EFBFBD>hlt sein!" ::msgcat::mcset de "Must be one or two file select!" "Eine oder zwei Dateien müssen ausgewählt sein!"
::msgcat::mcset de "Modifying the Registry..." ::msgcat::mcset de "Modifying the Registry..."
::msgcat::mcset de "Modules" "Module" ::msgcat::mcset de "Modules" "Module"
::msgcat::mcset de "New" "Neu" ::msgcat::mcset de "New" "Neu"
@@ -71,19 +71,19 @@
::msgcat::mcset de "New project" "Neues Projekt" ::msgcat::mcset de "New project" "Neues Projekt"
::msgcat::mcset de "Not implemented yet" "Noch nicht implementiert" ::msgcat::mcset de "Not implemented yet" "Noch nicht implementiert"
::msgcat::mcset de "Not found active project" "Kein aktives Projekt gefunden" ::msgcat::mcset de "Not found active project" "Kein aktives Projekt gefunden"
::msgcat::mcset de "Open" "<EFBFBD>ffnen" ::msgcat::mcset de "Open" "Öffnen"
::msgcat::mcset de "Open file" "Datei <EFBFBD>ffnen" ::msgcat::mcset de "Open file" "Datei öffnen"
::msgcat::mcset de "Open project" "Projekt <EFBFBD>ffnen" ::msgcat::mcset de "Open project" "Projekt öffnen"
::msgcat::mcset de "Opened file in progress" "Ge<EFBFBD>ffnete Datei in Bearbeitung" ::msgcat::mcset de "Opened file in progress" "Geöffnete Datei in Bearbeitung"
::msgcat::mcset de "Overwrite" "<EFBFBD>berschreiben" ::msgcat::mcset de "Overwrite" "Überschreiben"
::msgcat::mcset de "Paste" "Einf<EFBFBD>gen" ::msgcat::mcset de "Paste" "Einfügen"
::msgcat::mcset de "Paste from clipboard" "Von Zwischenablage einf<EFBFBD>gen" ::msgcat::mcset de "Paste from clipboard" "Von Zwischenablage einfügen"
::msgcat::mcset de "Print ..." "Drucken ..." ::msgcat::mcset de "Print ..." "Drucken ..."
::msgcat::mcset de "Print" "Drucken" ::msgcat::mcset de "Print" "Drucken"
::msgcat::mcset de "Print command" "Druck-Befehl" ::msgcat::mcset de "Print command" "Druck-Befehl"
::msgcat::mcset de "Print selected text" "Markierter Text drucken" ::msgcat::mcset de "Print selected text" "Markierter Text drucken"
::msgcat::mcset de "Program finished successfully" "Programm wurde erfolgreich beendet" ::msgcat::mcset de "Program finished successfully" "Programm wurde erfolgreich beendet"
::msgcat::mcset de "Program failed" "Ausf<EFBFBD>hrung fehlgeschlagen" ::msgcat::mcset de "Program failed" "Ausführung fehlgeschlagen"
::msgcat::mcset de "Programm output" "Programm Ausgabe" ::msgcat::mcset de "Programm output" "Programm Ausgabe"
::msgcat::mcset de "Project" "Projekt" ::msgcat::mcset de "Project" "Projekt"
::msgcat::mcset de "Projects" "Projekte" ::msgcat::mcset de "Projects" "Projekte"
@@ -101,8 +101,8 @@
::msgcat::mcset de "Release" ::msgcat::mcset de "Release"
::msgcat::mcset de "RPM dir" "RPM Verzeichnis" ::msgcat::mcset de "RPM dir" "RPM Verzeichnis"
::msgcat::mcset de "RPM file mask" "RPM Datei Maske" ::msgcat::mcset de "RPM file mask" "RPM Datei Maske"
::msgcat::mcset de "Run" "Ausf<EFBFBD>hren" ::msgcat::mcset de "Run" "Ausführen"
::msgcat::mcset de "Running project" "Projekt ausf<EFBFBD>hren" ::msgcat::mcset de "Running project" "Projekt ausführen"
::msgcat::mcset de "Running file" ::msgcat::mcset de "Running file"
::msgcat::mcset de "Save" "Speichern" ::msgcat::mcset de "Save" "Speichern"
::msgcat::mcset de "Save as" "Speichern unter" ::msgcat::mcset de "Save as" "Speichern unter"
@@ -110,9 +110,9 @@
::msgcat::mcset de "Save file as" "Datei speichern unter" ::msgcat::mcset de "Save file as" "Datei speichern unter"
::msgcat::mcset de "Save all" "Alles speichern" ::msgcat::mcset de "Save all" "Alles speichern"
::msgcat::mcset de "Search" "Suchen" ::msgcat::mcset de "Search" "Suchen"
::msgcat::mcset de "Select" "Ausw<EFBFBD>hlen" ::msgcat::mcset de "Select" "Auswählen"
::msgcat::mcset de "Select directory" "Verzeichnis ausw<EFBFBD>hlen" ::msgcat::mcset de "Select directory" "Verzeichnis auswählen"
::msgcat::mcset de "Selected directory" "Ausgew<EFBFBD>hltes Verzeichnis" ::msgcat::mcset de "Selected directory" "Ausgewähltes Verzeichnis"
::msgcat::mcset de "Settings" "Einstellungen" ::msgcat::mcset de "Settings" "Einstellungen"
::msgcat::mcset de "Show backup files" "Backup-Dateien anzeigen" ::msgcat::mcset de "Show backup files" "Backup-Dateien anzeigen"
::msgcat::mcset de "Interpretator" "Interpreter" ::msgcat::mcset de "Interpretator" "Interpreter"
@@ -120,7 +120,7 @@
::msgcat::mcset de "TGZ file mask" "TGZ Datei Maske" ::msgcat::mcset de "TGZ file mask" "TGZ Datei Maske"
::msgcat::mcset de "Thanks" "Danksagung" ::msgcat::mcset de "Thanks" "Danksagung"
::msgcat::mcset de "Toolbar" "Symbolleiste" ::msgcat::mcset de "Toolbar" "Symbolleiste"
::msgcat::mcset de "Undo" "R<EFBFBD>ckg<EFBFBD>ngig" ::msgcat::mcset de "Undo" "Rückgängig"
::msgcat::mcset de "Update" ::msgcat::mcset de "Update"
::msgcat::mcset de "Version" ::msgcat::mcset de "Version"
::msgcat::mcset de "View" "Ansicht" ::msgcat::mcset de "View" "Ansicht"
@@ -130,4 +130,3 @@

View File

@@ -108,6 +108,7 @@
::msgcat::mcset en "Open file" ::msgcat::mcset en "Open file"
::msgcat::mcset en "Open project" ::msgcat::mcset en "Open project"
::msgcat::mcset en "Opened file in progress" ::msgcat::mcset en "Opened file in progress"
::msgcat::mcset en "Open recent"
::msgcat::mcset en "Operators" ::msgcat::mcset en "Operators"
::msgcat::mcset en "Overwrite" ::msgcat::mcset en "Overwrite"
::msgcat::mcset en "Parameters" ::msgcat::mcset en "Parameters"
@@ -184,4 +185,3 @@

View File

@@ -141,6 +141,7 @@
::msgcat::mcset ru "Open folder" "Открыть каталог" ::msgcat::mcset ru "Open folder" "Открыть каталог"
::msgcat::mcset ru "Open project" "Открыть проект" ::msgcat::mcset ru "Open project" "Открыть проект"
::msgcat::mcset ru "Opened file in progress" "Открытие файла" ::msgcat::mcset ru "Opened file in progress" "Открытие файла"
::msgcat::mcset ru "Open recent" "Открыть недавнее"
::msgcat::mcset ru "Operators" "Операторы" ::msgcat::mcset ru "Operators" "Операторы"
::msgcat::mcset ru "Overwrite" "Замена" ::msgcat::mcset ru "Overwrite" "Замена"
::msgcat::mcset ru "Parameters" "Параметры" ::msgcat::mcset ru "Parameters" "Параметры"

View File

@@ -683,3 +683,35 @@ proc SetActiveProject {path} {
.frmStatus.lblGitLogo configure -image git_logo_20x20 .frmStatus.lblGitLogo configure -image git_logo_20x20
.frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]" .frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]"
} }
# Added recently opened folder into menu "File"->"Open recent"
proc OpenRecentProject {path} {
SetActiveProject $path
FileOper::ReadFolder $path
ReadFilesFromDirectory $path $path
}
proc AddRecentEditedFolder {path} {
global cfgVariables
if {$path == ""} {
return
}
if {[info exists cfgVariables(recentFolder)] == 0} {
set cfgVariables(recentFolder) [list $path]
} else {
# check if path already in a list
foreach item $cfgVariables(recentFolder) {
if {$item == $path} {
return
}
}
# check list length, and remove 0 element if length is 10
if {[llength $cfgVariables(recentFolder)] == 10} {
# lremove $cfgVariables(recentFolder) 0; # tcl 8.7
set cfgVariables(recentFolder) [lrange $cfgVariables(recentFolder) 1 end]
}
lappend cfgVariables(recentFolder) $path
}
.frmMenu.mnuFile.m.openRecent add command -label $path -command [list OpenRecentProject $path]
}