summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/scripts')
-rwxr-xr-xMaster/texmf-dist/scripts/tlshell/tlshell.tcl56
1 files changed, 47 insertions, 9 deletions
diff --git a/Master/texmf-dist/scripts/tlshell/tlshell.tcl b/Master/texmf-dist/scripts/tlshell/tlshell.tcl
index 0751d3b2d0e..dbc3ea73ed3 100755
--- a/Master/texmf-dist/scripts/tlshell/tlshell.tcl
+++ b/Master/texmf-dist/scripts/tlshell/tlshell.tcl
@@ -163,8 +163,11 @@ proc place_dlg {wnd {p ""}} {
wm state $wnd normal
raise $wnd $p
tkwait visibility $wnd
- focus $wnd
- grab set $wnd
+ if {$::tcl_platform(platform) ne "windows"} {
+ # dont understand why these give trouble in windows
+ focus $wnd
+ grab set $wnd
+ }
} ; # place_dlg
proc long_message {str type {p "."}} {
@@ -518,7 +521,7 @@ proc log_widget_cb {mode {l ""}} {
.tllg.log.tx configure -state normal
.tllg.log.tx insert end "$l\n"
if {$::tcl_platform(os) ne "Darwin"} {
- .tllg.err.tx configure -state disabled
+ .tllg.log.tx configure -state disabled
}
} elseif {$mode eq "init"} {
show_logs
@@ -1761,6 +1764,38 @@ proc set_paper {p} {
run_cmd "paper paper $p" log_widget_cb
}
+##### running external commands #####
+
+# For capturing an external command, we need a separate output channel,
+# but we reuse ::out_log.
+# stderr is bundled with stdout so ::err_log should stay empty.
+proc read_capt {} {
+ set l "" ; # will contain the line to be read
+ if {([catch {chan gets $::capt l} len] || [chan eof $::capt])} {
+ catch {chan close $::capt}
+ log_widget_cb "finish"
+ set ::done_waiting 1
+ } elseif {$len >= 0} {
+ lappend ::out_log $l
+ log_widget_cb "line" $l
+ }
+}; # read_capt
+
+proc run_external {cmd mess} {
+ set ::out_log {}
+ set ::err_log {}
+ lappend ::out_log $mess
+ unset -nocomplain ::done_waiting
+ # dont understand why, on windows, start_tlmgr does not trigger
+ # a console window but this proc does
+ if [catch {open "|$cmd 2>&1" "r"} ::capt] {
+ tk_messageBox -message "Failure to launch $cmd"
+ }
+ chan configure $::capt -buffering line -blocking 0
+ chan event $::capt readable read_capt
+ log_widget_cb "init"
+}
+
##### main window #####
proc make_widgets {} {
@@ -1802,6 +1837,7 @@ proc make_widgets {} {
-command {get_packages_info_remote; collect_filtered}
.mn.file add command -command {destroy .} -label "Exit" -underline 1
+ # inx: keeping count where needed, i.e. when an entry needs to be referenced
.mn add cascade -label "Packages" -menu .mn.pkg
menu .mn.pkg
set inx 0
@@ -1825,9 +1861,14 @@ proc make_widgets {} {
-command restore_backups_dialog
}
- #.mn add cascade -label "Actions" -menu .mn.act -underline 0
- #menu .mn.act
- #set inx 0
+ .mn add cascade -label "Actions" -menu .mn.act -underline 0
+ menu .mn.act
+ .mn.act add command -label "Regenerate filename database" -command \
+ {run_external "mktexlsr" "Regenerating filename database..."}
+ .mn.act add command -label "Regenerate formats" -command \
+ {run_external "fmtutil-sys --all" "Rebuilding formats..."}
+ .mn.act add command -label "Regenerate fontmaps" -command \
+ {run_external "updmap-sys" "Rebuilding fontmap files..."}
.mn add cascade -label "Options" -menu .mn.opt -underline 0
menu .mn.opt
@@ -1846,9 +1887,6 @@ proc make_widgets {} {
.mn.opt add command -label "Platforms..." -command platform_select
}
- #.mn add cascade -label "Actions" -menu .mn.act -underline 0
- #menu .mn.act
-
.mn add cascade -label "Help" -menu .mn.help -underline 0
menu .mn.help
.mn.help add command -command {tk_messageBox -message "Helpless"} \