projman/projman.tcl

150 lines
4.8 KiB
Tcl
Raw Permalink Normal View History

#!/bin/sh
# Tcl ignores the next line -*- tcl -*- \
exec wish "$0" -- "$@"
2022-07-21 10:56:46 +03:00
######################################################
# Tcl/Tk Project manager 2.0
# Distributed under GNU Public License
# Author: Sergey Kalinin svk@nuk-svk.ru
2022-07-21 10:56:46 +03:00
# Home page: https://nuk-svk.ru
######################################################
# Version: 2.0.0
# Release: alpha
2023-07-30 11:33:52 +03:00
# Build: 30072023112719
2022-07-21 10:56:46 +03:00
######################################################
# определим текущую версию, релиз и т.д.
2022-07-21 10:56:46 +03:00
set f [open [info script] "RDONLY"]
while {[gets $f line] >=0} {
if [regexp -nocase -all -- {version:\s+([0-9]+?.[0-9]+?.[0-9]+?)} $line match v1] {
set projman(Version) $v1
2015-10-19 13:27:31 +03:00
}
2022-07-21 10:56:46 +03:00
if [regexp -nocase -all -- {release:\s+([a-z0-9]+?)} $line match v1] {
set projman(Release) $v1
}
if [regexp -nocase -all -- {build:\s+([a-z0-9]+?)} $line match v1] {
set projman(Build) $v1
}
if [regexp -nocase -all -- {author:\s+(.+?)} $line match v1] {
set projman(Author) $v1
}
if [regexp -nocase -all -- {home page:\s+(.+?)} $line match v1] {
set projman(Homepage) $v1
2015-10-19 13:27:31 +03:00
}
}
2022-07-21 10:56:46 +03:00
close $f
2015-10-19 13:27:31 +03:00
2022-07-21 10:56:46 +03:00
package require msgcat
package require inifile
package require ctext
package require base64
package require fileutil
package require Thread
package require fileutil::magic::filetype
2022-07-21 10:56:46 +03:00
# Устанавливаем текущий каталог
set dir(root) [pwd]
2022-07-21 10:56:46 +03:00
set dir(doc) [file join $dir(root) doc]
2015-10-19 13:27:31 +03:00
# ДОбавляем в список файлы (каталоги) из командной строки
if { $::argc > 0 } {
foreach arg $::argv {
lappend opened $arg
}
puts $opened
}
2022-07-21 10:56:46 +03:00
# Устанавливаем рабочий каталог, если его нет то создаём.
# Согласно спецификации XDG проверяем наличие переменных и каталогов
if [info exists env(XDG_CONFIG_HOME)] {
set dir(cfg) [file join $env(XDG_CONFIG_HOME) projman]
} elseif [file exists [file join $env(HOME) .config]] {
set dir(cfg) [file join $env(HOME) .config projman]
2015-10-19 13:27:31 +03:00
} else {
2022-07-21 10:56:46 +03:00
set dir(cfg) [file join $env(HOME) .projman]
}
if {[file exists $dir(cfg)] == 0} {
file mkdir $dir(cfg)
2015-10-19 13:27:31 +03:00
}
# puts "Config dir is $dir(cfg)"
2022-07-21 10:56:46 +03:00
# каталог с модулями
set dir(lib) "[file join $dir(root) lib]"
2015-10-19 13:27:31 +03:00
2022-07-21 10:56:46 +03:00
source [file join $dir(lib) config.tcl]
foreach modFile [lsort [glob -nocomplain [file join $dir(lib) *.tcl]]] {
if {[file tail $modFile] ne "gui.tcl" && [file tail $modFile] ne "config.tcl"} {
2018-02-05 11:24:14 +03:00
source $modFile
2022-07-21 10:56:46 +03:00
puts "Loading module $modFile"
2018-02-05 11:24:14 +03:00
}
}
2022-07-21 10:56:46 +03:00
# TTK Theme loading
set dir(theme) "[file join $dir(root) theme]"
foreach modFile [lsort [glob -nocomplain [file join $dir(theme) *]]] {
if [file isdirectory $modFile] {
source $modFile/[file tail $modFile].tcl
puts "Loading theme $modFile.tcl"
} elseif {[file extension $modFile] eq ".tcl"} {
source $modFile
puts "Loading theme $modFile"
}
2018-02-05 11:24:14 +03:00
}
2015-10-19 13:27:31 +03:00
2018-07-05 08:41:18 +03:00
2022-07-21 10:56:46 +03:00
# загружаем пользовательский конфиг, если он отсутствует, то копируем дефолтный
if {[file exists [file join $dir(cfg) projman.ini]] ==0} {
Config::create $dir(cfg)
}
2022-07-21 10:56:46 +03:00
Config::read $dir(cfg)
2018-07-05 08:41:18 +03:00
2022-07-21 10:56:46 +03:00
::msgcat::mclocale $cfgVariables(locale)
if [::msgcat::mcload [file join $dir(lib) msgs]] {
puts "Load locale messages... OK"
}
puts "Setting the locale... [::msgcat::mclocale]"
source [file join $dir(lib) gui.tcl]
# Open the PATH if command line argument has been setting
if [info exists opened] {
foreach path $opened {
# Приводим путь к полному виду
if {[file pathtype $path] ne "absolute"} {
set path [file normalize $path]
}
2022-07-21 10:56:46 +03:00
if [file isdirectory $path] {
# set activeProject $path
SetActiveProject $path
.frmStatus.lblGitLogo configure -image git_logo_20x20
.frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]"
2022-07-21 10:56:46 +03:00
FileOper::ReadFolder $path
ReadFilesFromDirectory $path $path
2022-07-21 10:56:46 +03:00
} elseif [file exists $path] {
# ResetModifiedFlag [FileOper::Edit $path]
FileOper::Edit $path
2022-07-21 10:56:46 +03:00
}
}
} else {
if {$cfgVariables(opened) ne ""} {
# puts "<$cfgVariables(opened)"
SetActiveProject $cfgVariables(opened)
.frmStatus.lblGitLogo configure -image git_logo_20x20
.frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]"
FileOper::ReadFolder $cfgVariables(opened)
ReadFilesFromDirectory $cfgVariables(opened) $cfgVariables(opened)
if {$cfgVariables(editedFiles) ne ""} {
foreach f [split $cfgVariables(editedFiles) " "] {
# puts $f
FileOper::Edit $f
}
}
}
2022-07-21 10:56:46 +03:00
}