summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xMaster/texmf-dist/scripts/tlshell/tlshell.tcl978
-rw-r--r--Master/tlpkg/TeXLive/tltcl.tcl434
-rwxr-xr-xMaster/tlpkg/bin/tl-update-messages1
-rwxr-xr-xMaster/tlpkg/installer/install-tl-gui.tcl428
-rw-r--r--Master/tlpkg/installer/install-tl-windows.cmd16
-rwxr-xr-xMaster/tlpkg/installer/install-tl.sh44
-rw-r--r--Master/tlpkg/translations/nl.msg147
-rw-r--r--Master/tlpkg/translations/nl.po712
8 files changed, 1697 insertions, 1063 deletions
diff --git a/Master/texmf-dist/scripts/tlshell/tlshell.tcl b/Master/texmf-dist/scripts/tlshell/tlshell.tcl
index 2dc4f28341d..14a41805b24 100755
--- a/Master/texmf-dist/scripts/tlshell/tlshell.tcl
+++ b/Master/texmf-dist/scripts/tlshell/tlshell.tcl
@@ -7,40 +7,38 @@
package require Tk
-# searchpath:
+# security: disable send
+catch {rename send {}}
+
+# declarations and utilities shared with install-tl-gui.tcl
+set ::instroot [exec kpsewhich -var-value=TEXMFROOT]
+source [file join $::instroot "tlpkg" "TeXLive" "tltcl.tcl"]
+
+# searchpath and locale:
# windows: most scripts run via [w]runscript, which adjusts the searchpath
-# for the current process.
-# unix/linux: tlshell.tcl should be run via a symlink in a directory
+# for the current process. The provided tcl/tk can set locale on the fly.
+# unix/linux:
+# we may need to run tlshell.tcl via a wrapper in order to
+# make localization work right for tcl/tk version 8.5 and on macos.
+# tlshell.[sh|tcl] should be run via a symlink in a directory
# which also contains (a symlink to) kpsewhich.
# This directory will be prepended to the searchpath.
# kpsewhich will disentangle symlinks.
-# dis/enable restore dialog
+# dis/enable the restore dialog
set do_restore 0
+
+# tlcontrib
+set tlcontrib "http://contrib.texlive.info/current"
+
# dis/enable debug output (only for private development purposes)
set ddebug 0
##### general housekeeping ############################################
-# security: disable send
-catch {rename send {}}
-
# menus: disable tearoff feature
option add *Menu.tearOff 0
-# no bold text for messages
-option add *Dialog.msg.font TkDefaultFont userDefault
-
-## italicized items; not used
-#font create it_font {*}[font configure TkDefaultFont]
-#font configure it_font -slant italic
-
-set plain_unix 0
-if {$::tcl_platform(platform) eq "unix" && \
- $::tcl_platform(os) ne "Darwin"} {
- set plain_unix 1
-}
-
proc search_nocase {needle haystack} {
if {$needle eq ""} {return -1}
if {$haystack eq ""} {return -1}
@@ -72,15 +70,6 @@ proc do_debug {s} {
}
} ; # do_debug
-proc get_stacktrace {} {
- set level [info level]
- set s ""
- for {set i 1} {$i < $level} {incr i} {
- append s [format "Level %u: %s\n" $i [info level $i]]
- }
- return $s
-} ; # get_stacktrace
-
proc maketemp {ext} {
set fname ""
foreach i {0 1 2 3 4 5 6 7 8 9} { ; # ten tries
@@ -104,21 +93,6 @@ set tempsub "" ; # subdir for temp files, set during initialization
### GUI utilities #####################################################
-# dummy widgets for vertical spacing within $w
-set idummy -1
-proc spacing {w} {
- incr ::idummy
- pack [ttk::label $w.$::idummy -text " "]
-}
-
-proc pgrid {wdg args} { ; # grid command with padding
- grid $wdg {*}$args -padx 3 -pady 3
-}
-
-proc ppack {wdg args} { ; # pack command with padding
- pack $wdg {*}$args -padx 3 -pady 3
-}
-
# mouse clicks: deal with MacOS platform differences
if {[tk windowingsystem] eq "aqua"} {
event add <<RightClick>> <ButtonRelease-2> <Control-ButtonRelease-1>
@@ -131,61 +105,16 @@ if [catch {ttk::style lookup TFrame -background} ::default_bg] {
set ::default_bg white
}
-# unicode symbols as fake checkboxes in ttk::treeview widgets
-proc mark_sym {mrk} {
- if $mrk {
- return "\u25A3" ; # 'white square containing black small square'
- } else {
- return "\u25A1" ; # 'white square'
- }
-} ; # mark_sym
-
-# place a toplevel, or at least its upperleft corner, centered wrt its parent
-proc place_dlg {wnd {p ""}} {
- if {$p eq ""} {
- set p [winfo toplevel [winfo parent $wnd]]
- if {$p eq ""} return
- }
- set g [wm geometry $p]
- scan $g "%dx%d+%d+%d" pw ph px py
- set hcenter [expr {$px + $pw / 2}]
- set vcenter [expr {$py + $ph / 2}]
- set g [wm geometry $wnd]
- set wh [winfo reqheight $wnd]
- set ww [winfo reqwidth $wnd]
- set wx [expr {$hcenter - $ww / 2}]
- if {$wx < 0} { set wx 0}
- set wy [expr {$vcenter - $wh / 2}]
- if {$wy < 0} { set wy 0}
- wm geometry $wnd [format "+%d+%d" $wx $wy]
- wm attributes $wnd -topmost 1
- wm attributes $p -topmost 0
- wm state $wnd normal
- raise $wnd $p
- tkwait visibility $wnd
- if {$::tcl_platform(platform) ne "windows"} {
- # dont understand why these give trouble in windows
- focus $wnd
- grab set $wnd
- }
-} ; # place_dlg
-
+# dialog with textbox
proc long_message {str type {p "."}} {
# alternate messagebox implemented as custom dialog
# not all message types are supported
if {$type ne "ok" && $type ne "okcancel" && $type ne "yesnocancel"} {
- err_exit "Illegal type $type for long_message"
- }
- set ::lms_parent $p
- unset -nocomplain ::lms_var
- do_debug "type $type"
- catch {destroy .tlmg}
- toplevel .tlmg -class Dialog
- wm withdraw .tlmg
- wm transient .tlmg .
- if $::plain_unix {wm attributes .tlmg -type dialog}
-
- # wallpaper frame; see make_widgets
+ err_exit "Unsupported type $type for long_message"
+ }
+ create_dlg .tlmg $p
+
+ # wallpaper frame; see populate_main
pack [ttk::frame .tlmg.bg] -fill both -expand 1
ppack [ttk::frame .tlmg.tx] -in .tlmg.bg -side top -fill both -expand 1
pack [ttk::scrollbar .tlmg.tx.scroll -command ".tlmg.tx.txt yview"] \
@@ -199,27 +128,22 @@ proc long_message {str type {p "."}} {
# buttons
pack [ttk::frame .tlmg.bts] -in .tlmg.bg -side bottom -fill x
if {$type eq "ok" || $type eq "okcancel"} {
- ttk::button .tlmg.ok -text "ok" -command \
- {raise $::lms_parent; destroy .tlmg; set ::lms_var "ok"}
+ ttk::button .tlmg.ok -text [__ "ok"] -command "end_dlg \"ok\" .tlmg"
ppack .tlmg.ok -in .tlmg.bts -side right
}
if {$type eq "yesnocancel"} {
- ttk::button .tlmg.yes -text "yes" -command \
- {raise $::lms_parent; destroy .tlmg; set::lms_var "yes"}
+ ttk::button .tlmg.yes -text [__ "yes"] -command "end_dlg \"yes\" .tlmg"
ppack .tlmg.yes -in .tlmg.bts -side right
- ttk::button .tlmg.no -text "no" -command \
- {raise $::lms_parent; destroy .tlmg; set ::lms_var "no"}
+ ttk::button .tlmg.no -text [__ "no"] -command "end_dlg \"no\" .tlmg"
ppack .tlmg.no -in .tlmg.bts -side right
}
if {$type eq "yesnocancel" || $type eq "okcancel"} {
- ttk::button .tlmg.cancel -text "cancel" -command \
- {raise $::lms_parent; destroy .tlmg; set ::lms_var "cancel"}
+ ttk::button .tlmg.cancel -text [__ "cancel"] -command \
+ "end_dlg \"cancel\" .tlmg"
ppack .tlmg.cancel -in .tlmg.bts -side right
}
- place_dlg .tlmg $::lms_parent
- tkwait variable ::lms_var
- return $::lms_var
+ place_dlg .tlmg $p
} ; # long_message
proc any_message {str type {p "."}} {
@@ -242,8 +166,8 @@ proc any_message {str type {p "."}} {
### enabling and disabling user interaction
-proc enable_menu_controls {yesno} {
- if {! $yesno} {
+proc enable_menu_controls {y_n} {
+ if {! $y_n} {
. configure -menu .mn_empty
return
}
@@ -267,18 +191,18 @@ proc enable_menu_controls {yesno} {
}
}; # enable_menu_controls
-proc enable_widgets {yesno} {
+proc enable_widgets {y_n} {
# This proc should cover all active interface elements of the main window.
# But if actions are initiated via a dialog, the main window can be
- # deactivated simply by a grab and focus on the dialog.
- enable_menu_controls $yesno
+ # deactivated by a grab and focus on the dialog instead.
+ enable_menu_controls $y_n
- if $yesno {
+ if $y_n {
set st !disabled
- set ::busy "IDLE"
+ set ::busy [__ "IDLE"]
} else {
set st disabled
- set ::busy "BUSY"
+ set ::busy [__ "BUSY"]
}
# command entry
@@ -322,10 +246,8 @@ set progname [info script]
regexp {^.*[\\/]([^\\/\.]*)(?:\....)?$} $progname dummy progname
set procid [pid]
-# package repository (no suport for a one-off repository switch)
-set repo ""
-# while selecting another repo:
-set new_repo ""
+# package repositories
+array unset repos
# mirrors: dict of dicts of lists of urls per country per continent
set mirrors {}
@@ -333,7 +255,11 @@ set mirrors {}
# dict of (local and global) package dicts
set pkgs [dict create]
-set have_remote 0 ; # remote packages info not loaded
+if {$::tcl_platform(platform) ne "windows"} {
+ set ::platforms [dict create]
+}
+
+set have_remote 0 ; # remote packages info not yet loaded
set need_update_tlmgr 0
set n_updates 0
set tlshell_updatable 0
@@ -352,7 +278,10 @@ set search_desc 0
##### handling tlmgr via pipe and stderr tempfile #####################
set prmpt "tlmgr>"
-set busy "BUSY"
+set busy [__ "BUSY"]
+
+# copy logs to log window yes/no
+set show_output 0
# about [chan] gets:
# if a second parameter, in this case l, is supplied
@@ -394,6 +323,7 @@ proc start_tlmgr {{args ""}} {
tk_messageBox -message [get_stacktrace]
exit
}
+ set ::perlpid [pid $::tlshl]
do_debug "done opening tlmgr"
set ::err [open $::err_file r]
chan configure $::tlshl -buffering line -blocking 0
@@ -404,6 +334,7 @@ proc start_tlmgr {{args ""}} {
proc close_tlmgr {} {
catch {chan close $::tlshl}
catch {chan close $::err}
+ set ::perlpid 0
}; # close_tlmgr
# read a line of tlmgr output
@@ -414,7 +345,7 @@ proc read_line {} {
if {([catch {chan gets $::tlshl l} len] || [chan eof $::tlshl])} {
#do_debug "read_line: failing to read "
puts stderr "Read failure; tlmgr command was $::last_cmd"
- catch {chan close $::tlshl}
+ if {! [catch {chan close $::tlshl}]} {set ::perlpid 0}
# note. the right way to terminate is terminating the GUI shell.
# This closes stdin of tlmgr shell.
err_exit
@@ -426,16 +357,19 @@ proc read_line {} {
enable_widgets 1 ; # this may have to be redone later
# catch up with stderr
read_err_tempfile
- if {$::pipe_cb ne ""} {
+ if $::show_output {
do_debug "prompt found, $l"
- $::pipe_cb "finish"
+ log_widget_finish
}
# for vwait:
set ::done_waiting 1
+ set ::show_output 0
} else {
# regular output
lappend ::out_log $l
- if {$::pipe_cb ne ""} {$::pipe_cb "line" "$l"}
+ if $::show_output {
+ log_widget_add $l
+ }
}
}
} ; # read_line
@@ -458,20 +392,47 @@ proc show_err_log {} {
}
} ; # show_err_log
-##### running tlmgr commands #####
+proc log_widget_init {} {
+ show_logs ; # create the logs dialog
+ .tllg.status configure -text [__ "Running"]
+ .tllg.close configure -state disabled
+}
+
+proc log_widget_add l {
+ .tllg.log.tx configure -state normal
+ .tllg.log.tx insert end "$l\n"
+ if {$::tcl_platform(os) ne "Darwin"} {
+ .tllg.log.tx configure -state disabled
+ }
+}
+
+proc log_widget_finish {} {
+ .tllg.log.tx yview moveto 1
+ .tllg.logs select .tllg.log
+ # error log on top if it contains anything
+ show_err_log
+ if {$::tcl_platform(os) ne "Darwin"} {
+ .tllg.log.tx configure -state disabled
+ }
+ .tllg.status configure -text [__ "Idle"]
+ .tllg.close configure -state !disabled
+}
-# optional callback for run_cmds/read_line:
-set pipe_cb ""
+##### running tlmgr commands #####
# run a list of commands
-proc run_cmds {cmds {cb ""}} {
- set ::pipe_cb $cb
+proc run_cmds {cmds {show 0}} {
+ set ::show_output $show
do_debug "run_cmds \"$cmds\""
if $::ddebug {puts $::flid "\n$cmds"}
enable_widgets 0
set ::out_log {}
set ::err_log {}
- if {$::pipe_cb ne ""} {$::pipe_cb "init"}
+ if $show {
+ show_logs
+ .tllg.status configure -text [__ "Running"]
+ .tllg.close configure -state disabled
+ }
set l [llength $cmds]
for {set i 0} {$i<$l} {incr i} {
set cmd [lindex $cmds $i]
@@ -484,71 +445,19 @@ proc run_cmds {cmds {cb ""}} {
} ; # run_cmds
# run a single command
-proc run_cmd {cmd {cb ""}} {
- run_cmds [list $cmd] $cb
+proc run_cmd {cmd {show 0}} {
+ run_cmds [list $cmd] $show
} ; # run_cmd
proc run_cmd_waiting {cmd} {
- run_cmd $cmd
+ run_cmd $cmd 0
vwait ::done_waiting
} ; # run_cmd_waiting
-##### callbacks for file events of tlmgr pipe ::tlshl (names *_cb) ####
-
-# callback for reading tlmgr pipe.
-# but maybe we just want a boolean whether or not to write
-# to the logs notebook.
-# consider writing log to file, always or on demand
-
-# In init mode, it is invoked by run_cmds, otherwise by read_line
-
-## template for pipe callback:
-#proc template_cb {mode {l ""}} {
-# if {$mode eq "line"} {
-# # do something
-# } elseif {$mode eq "init"} {
-# # do something
-# } elseif {$mode eq "finish"} {
-# # do something BUT DO NOT TRIGGER ANOTHER EVENT LOOP
-# } else {
-# lappend ::err_log "Illegal call of whatever_cb"
-# err_exit
-# }
-#}
-
-proc log_widget_cb {mode {l ""}} {
- if {$mode eq "line"} {
- .tllg.log.tx configure -state normal
- .tllg.log.tx insert end "$l\n"
- if {$::tcl_platform(os) ne "Darwin"} {
- .tllg.log.tx configure -state disabled
- }
- } elseif {$mode eq "init"} {
- show_logs
- .tllg.status configure -text "Running"
- .tllg.close configure -state disabled
- } elseif {$mode eq "finish"} {
- .tllg.log.tx yview moveto 1
- .tllg.logs select .tllg.log
- # error log on top if it contains anything
- show_err_log
- if {$::tcl_platform(os) ne "Darwin"} {
- .tllg.log.tx configure -state disabled
- }
- .tllg.status configure -text "Idle"
- .tllg.close configure -state !disabled
- # the caller, read_line, will set ::done_waiting after
- # this callback returns from finish mode
- } else {
- lappend ::err_log "Illegal call of log_widget_cb"
- err_exit
- }
-} ; # log_widget_cb
-
##### Handling package info #####
# what invokes what?
-# The main 'globals' are:
+# The main 'globals' are (excepting dicts and arrays):
# ::have_remote is initialized to false. It is set to true by
# get_packages_info_remote, and remains true except temporarily at
@@ -579,7 +488,7 @@ proc log_widget_cb {mode {l ""}} {
# collect_filtered does not only filter, but also organize the
# information to be displayed. If necessary, it invokes
-# get_packages_info_remote and always invokes display_packes_info.
+# get_packages_info_remote and always invokes display_packages_info.
# It is invoked at initialization, when filtering options change and
# at the end of install-, remove- and update procs.
@@ -616,11 +525,11 @@ proc update_globals {} {
# also update displayed status info
if {$::have_remote && $::need_update_tlmgr} {
- .topf.luptodate configure -text "Needs updating"
+ .topf.luptodate configure -text [__ "Needs updating"]
} elseif $::have_remote {
- .topf.luptodate configure -text "Up to date"
+ .topf.luptodate configure -text [__ "Up to date"]
} else {
- .topf.luptodate configure -text "Unknown"
+ .topf.luptodate configure -text [__ "Unknown"]
}
# ... and status of update buttons
enable_menu_controls 1
@@ -764,8 +673,7 @@ proc get_packages_info_remote {} {
if [catch {run_cmd_waiting \
"info --data name,localrev,remoterev,cat-version,category,shortdesc"}] {
do_debug [get_stacktrace]
- tk_messageBox -message \
- "Repository $::repo unavailable. Please choose another one."
+ tk_messageBox -message [__ "A configured repository is unavailable."]
return 0
}
set re {^([^,]+),([0-9]+),([0-9]+),([^,]*),([^,]*),(.*)$}
@@ -814,31 +722,18 @@ proc update_local_revnumbers {} {
update_globals
} ; # update_local_revnumbers
-##### Dialogs and their supporting procs ##############################
-
-# look at dialog.tcl, part of Tk itself, how to implement dialog-type behavior
+##### Logs notebook ##############################
-# So far:
-# - logs notebook,
-# - maybe a toplevel for restoring packages from backup, and
-# - a toplevel for picking a different local or remote repository.
-
-##### logs notebook #####
-
-# if invoked via log_widget_cb init, it tracks progress of a tlmgr command.
-# log_widget_cb will temporarily disable the close button
-# and set .tllg.status to busy.
+# if invoked via run_cmds, it tracks progress of (a) tlmgr command(s).
+# run_cmds will temporarily disable the close button
+# and set .tllg.status to busy via enable_widgets 0.
# otherwise, it shows the output of the last completed (list of) command(s).
# Note that run_cmds clears ::out_log and ::err_log, but not ::dbg_log.
proc show_logs {} {
- toplevel .tllg -class Dialog
- wm withdraw .tllg
- set p [winfo toplevel [winfo parent .tllg]]
- wm transient .tllg $p
+ create_dlg .tllg .
wm title .tllg Logs
- if $::plain_unix {wm attributes .tllg -type dialog}
# wallpaper
pack [ttk::frame .tllg.bg] -fill both -expand 1
@@ -881,13 +776,15 @@ proc show_logs {} {
foreach l $::dbg_log {
.tllg.dbg.tx insert end "$l\n"
}
- if {$::tcl_platform(os) ne "Darwin"} {.tllg.dbg.tx configure -state disabled}
+ if {$::tcl_platform(os) ne "Darwin"} {
+ .tllg.dbg.tx configure -state disabled
+ }
.tllg.dbg.tx yview moveto 1
}
pack [ttk::notebook .tllg.logs] -in .tllg.bg -side top -fill both -expand 1
- .tllg.logs add .tllg.log -text "Output"
- .tllg.logs add .tllg.err -text "Errors"
+ .tllg.logs add .tllg.log -text [__ "Output"]
+ .tllg.logs add .tllg.err -text [__ "Errors"]
if $::ddebug {
.tllg.logs add .tllg.dbg -text "Debug"
raise .tllg.dbg .tllg.logs
@@ -896,46 +793,32 @@ proc show_logs {} {
raise .tllg.log .tllg.logs
pack [ttk::frame .tllg.bottom] -in .tllg.bg -side bottom -fill x
- ttk::button .tllg.close -text close -command {
- set p [winfo toplevel [winfo parent .tllg]]
- if {$p eq ""} {set p "."}
- raise $p; destroy .tllg}
+ ttk::button .tllg.close -text [__ "Close"] -command {end_dlg 0 .tllg}
ppack .tllg.close -in .tllg.bottom -side right -anchor e
ppack [ttk::label .tllg.status -anchor w] -in .tllg.bottom -side left
- place_dlg .tllg $p
+ place_dlg .tllg .
wm resizable .tllg 1 1
} ; # show_logs
-##### repositories #####
-
-proc get_repo {} {
- run_cmd_waiting "option repository"
- # this returns the configured repository.
- # for now, do not support a temporary change.
- set re {repository\t(.*)$}
- foreach l $::out_log {
- if [regexp $re $l m ::repo] break
- }
-} ; # get_repo
-
-proc is_repo_local {r} {
- set db [file join $r "tlpkg/texlive.tlpdb"]
- return [file exists $db]
-}
+##### repositories ###############################################
### mirrors
-proc edit_name {n} {
+# turn name into a string suitable for a widget name
+proc mangle_name {n} {
set n [string tolower $n]
set n [string map {" " "_"} $n]
return $n
-} ; # edit_name
+} ; # mangle_name
set mirrors [dict create]
proc read_mirrors {} {
if [catch {open [file join [exec kpsewhich -var-value SELFAUTOPARENT] \
- "tlpkg/installer/ctan-mirrors.pl"] r} fm] {return 0}
+ "tlpkg/installer/ctan-mirrors.pl"] r} fm] {
+ do_debug "cannot open mirror list"
+ return 0
+ }
set re_geo {^\s*'([^']+)' => \{\s*$}
set re_url {^\s*'(.*)' => ([0-9]+)}
set re_clo {^\s*\},?\s*$}
@@ -1021,49 +904,152 @@ proc read_mirrors {} {
if {! $ok} {do_debug $msg}
} ; # read_mirrors
-proc find_local_repo {} {
- if [is_repo_local $::new_repo] {
- set inidir $::new_repo
- } elseif [is_repo_local $::repo] {
- set inidir $::repo
- } else {
- set inidir $::env(HOME) ; # HOME also ok for windows
+proc pick_local_repo {} {
+ set tail "tlpkg/texlive.tlpdb"
+ set nrep [.tlr.cur cget -text]
+ if {! [file exists [file join $nrep $tail]]} {
+ # not local, try originally configured $::repos(main)
+ set nrep $::repos(main)
+ if {! [file exists [file join $nrep $tail]]} {
+ # again, not local
+ set nrep $::env(HOME) ; # HOME also o.k. for windows
+ }
}
- set ::new_repo ""
while 1 {
- set ::new_repo [tk_chooseDirectory -initialdir $inidir -mustexist 1 \
- -parent .tlr -title "Local repository..."]
- if {$::new_repo ne "" && ! [is_repo_local $::new_repo]} {
- tk_messageBox -message "$::new_repo not a repository" -parent .tlr
- set inidir $::new_repo
- set ::new_repo ""
+ set nrep [browse4dir $nrep .tlr]
+ if {$nrep ne "" && ! [file exists [file join $nrep $tail]]} {
+ tk_messageBox -message [__ "%s not a repository" $nrep] -parent .tlr
continue
} else {
break
}
}
-} ; # find_local_repo
+ if {$nrep ne ""} {
+ .tlr.new delete 0 end
+ .tlr.new insert end $nrep
+ }
+} ; # pick_local_repo
+
+# what is wrong with this version?
+#proc get_repos_from_tlmgr {} {
+# array unset ::repos
+# run_cmd_waiting "repository list"
+# # set re0 {^\s+([^\s\(][^\(]*[^\s\(])\s+\(([^\)]+)\)$}
+# set re0 {^[ \t]+(\S.*\S)[ \t]+\(([^\)]+)\)$}
+# set re1 {^[ \t]+(\S.*\S)$}
+# foreach l $::out_log {
+# if [regexp $re0 $l dum r t] {
+# # repository with tag
+# puts "$l\n$dum\nrep $r tag $t"
+# set ::repos($t) $r
+# } elseif [regexp $re1 $l dum r] {
+# # repository without tag, assign repository itself as tag
+# puts "rep $r"
+# set ::repos($r) $r
+# }
+# }
+# if {[llength [array names ::repos]] == 1} {
+# set n [lindex [array names ::repos] 0]
+# if {$n ne "main"} {
+# set ::repos(main) $::repos($n)
+# array unset ::repos $n
+# }
+# }
+#} ; # get_repos_from_tlmgr
-proc close_repos {} {
- raise .
- destroy .tlr
- set ::repo $::new_repo
- if {$::tcl_platform(platform) eq "windows"} {
- set ::repo [string map {\\ /} $::repo]
+proc get_repos_from_tlmgr {} {
+ array unset ::repos
+ run_cmd_waiting "option repository"
+ set rps ""
+ foreach l $::out_log {
+ if [regexp {repository\t(.*)$} $l dum rps] break
+ }
+ if {$rps ne ""} {
+ set reps [split $rps " "]
+ set nr [llength $reps]
+ foreach rp $reps {
+ # decode spaces and %
+ #set rp [string map {"%20" " "} $rp]
+ #set rp [string map {"%25" "%"} $rp]
+ if {! [regexp {^(.+)#(.+)$} $rp dum r t]} {
+ # no tag; use repository as its own tag
+ set r $rp
+ set t $rp
+ }
+ if {$nr == 1} {
+ set t "main"
+ }
+ set ::repos($t) $r
+ }
+ if {"main" ni [array names ::repos]} {
+ array unset ::repos
+ }
+ }
+}; # get_repos_from_tlmgr
+
+proc set_repos_in_tlmgr {} {
+ # tlmgr has no command to replace a single repository;
+ # we need to compose opt_location ourselves from $::repos.
+ set nr [llength [array names ::repos]]
+ set opt_repos ""
+ set rp ""
+ foreach nm [array names ::repos] {
+ if {$nr==1} {
+ if {$nm ne "main"} {
+ err_exit "Internal error"
+ } else {
+ set rp $::repos(main)
+ }
+ } else {
+ if {$nm eq $::repos($nm)} {
+ set rp $nm
+ } else {
+ set rp $::repos($nm)
+ append rp "#$nm"
+ }
+ }
+ # for now, ignore the possibility of spaces in paths;
+ # I think tlmgr has bugs there
+ #set rp [string map {"%" "%25"} $rp]
+ #set rp [string map {" " "%20"} $rp]
+ append opt_repos " $rp"
+ }
+ # puts "repository set [string range $opt_repos 1 end]"
+ run_cmd_waiting "repository set [string range $opt_repos 1 end]"
+}; # set_repos_in_tlmgr
+
+proc print_repos {} {
+ set nms [array names ::repos]
+ set c [llength $nms]
+ if {$c <= 0} {
+ return ""
+ } elseif {$c == 1} {
+ set nm [lindex $nms 0]
+ return $::repos($nm)
+ } else {
+ set s [__ "multiple repositories"]
+ set s "($s)"
+ foreach nm $nms {
+ append s "\n$::repos($nm)"
+ if {$nm ne $::repos($nm)} {append s " ($nm)"}
+ }
+ return $s
}
- set ::new_repo ""
- run_cmd_waiting "option repository $::repo"
+}
+
+proc repos_commit {} {
+ .topf.lrepos configure -text [print_repos]
+ set_repos_in_tlmgr
close_tlmgr
start_tlmgr
# reload remote package information
set ::have_remote 0
get_packages_info_remote
collect_filtered
-} ; # close_repos
+} ; # repos_commit
-proc repositories {} {
-
- set ::new_repo $::repo
+# main repository dialog
+proc main_repository {} {
# dialog toplevel with
# - popup menu of mirrors (parse tlpkg/installer/ctan-mirrors.pl)
@@ -1071,13 +1057,10 @@ proc repositories {} {
# - directory browser button
# - ok and cancel buttons
- toplevel .tlr -class Dialog
- wm withdraw .tlr
- wm transient .tlr .
- wm title .tlr "Repositories"
- if $::plain_unix {wm attributes .tlr -type dialog}
+ create_dlg .tlr .
+ wm title .tlr [__ "Main Repository"]
- # wallpaper frame; see make_widgets
+ # wallpaper frame; see populate_main
pack [ttk::frame .tlr.bg] -expand 1 -fill x
pack [ttk::frame .tlr.info] -in .tlr.bg -fill x
@@ -1086,78 +1069,155 @@ proc repositories {} {
# current repository
incr row
- pgrid [ttk::label .tlr.lcur -text "Current:"] \
+ pgrid [ttk::label .tlr.lcur -text [__ "Current:"]] \
-in .tlr.info -row $row -column 0 -sticky w
- pgrid [ttk::label .tlr.cur -textvariable ::repo] \
+ pgrid [ttk::label .tlr.cur -text $::repos(main)] \
-in .tlr.info -row 0 -column 1 -sticky w
# new repository
incr row
- pgrid [ttk::label .tlr.lnew -text "New"] \
+ pgrid [ttk::label .tlr.lnew -text [__ "New"]] \
-in .tlr.info -row $row -column 0 -sticky w
- pgrid [ttk::entry .tlr.new -textvariable ::new_repo -width 40] \
+ pgrid [ttk::entry .tlr.new -width 40] \
-in .tlr.info -row $row -column 1 -columnspan 2 -sticky w
### three ways to specify a repository ###
pack [ttk::frame .tlr.mirbuttons] -in .tlr.bg -fill x
# default remote repository
- ttk::button .tlr.ctan -text "Any CTAN mirror" \
- -command {set ::new_repo "http://mirror.ctan.org/systems/texlive/tlnet"}
+ ttk::button .tlr.ctan -text [__ "Any CTAN mirror"] -command {
+ .tlr.new delete 0 end
+ .tlr.new insert end $::any_mirror
+ }
ppack .tlr.ctan -in .tlr.mirbuttons -side left -fill x
# freshly create a cascading mirror dropdown menu
destroy .tlr.mir.m
if {[dict size $::mirrors] == 0} read_mirrors
+ do_debug "[dict size $::mirrors] mirrors"
if {[dict size $::mirrors] > 0} {
- ttk::menubutton .tlr.mir -text "Specific mirror..." -direction below \
- -menu .tlr.mir.m
+ ttk::menubutton .tlr.mir -text [__ "Specific mirror..."] \
+ -direction below -menu .tlr.mir.m
ppack .tlr.mir -in .tlr.mirbuttons -side left -fill x
menu .tlr.mir.m
dict for {cont d_cont} $::mirrors {
- set c_ed [edit_name $cont]
+ set c_ed [mangle_name $cont]
menu .tlr.mir.m.$c_ed
.tlr.mir.m add cascade -label $cont -menu .tlr.mir.m.$c_ed
dict for {cntr urls} $d_cont {
- set n_ed [edit_name $cntr]
+ set n_ed [mangle_name $cntr]
menu .tlr.mir.m.$c_ed.$n_ed
.tlr.mir.m.$c_ed add cascade -label $cntr -menu .tlr.mir.m.$c_ed.$n_ed
foreach u $urls {
.tlr.mir.m.$c_ed.$n_ed add command -label $u \
- -command "set ::new_repo $u"
+ -command ".tlr.new delete 0 end; .tlr.new insert end $u"
}
}
}
}
# local repository
- ttk::button .tlr.browse -text "Local directory..." \
- -command find_local_repo
+ ttk::button .tlr.browse -text [__ "Local directory..."] -command {
+ .tlr.new delete 0 end; .tlr.new insert end [pick_local_repo]}
ppack .tlr.browse -in .tlr.mirbuttons -side left -fill x
- spacing .tlr.bg
-
# two ways to close the dialog
- pack [ttk::frame .tlr.closebuttons] -in .tlr.bg -fill x
- ttk::button .tlr.save -text "Save and Load" -command close_repos
+ pack [ttk::frame .tlr.closebuttons] -pady [list 10 0] -in .tlr.bg -fill x
+ ttk::button .tlr.save -text [__ "Save and Load"] -command {
+ set ::repos(main) [.tlr.new get]
+ repos_commit
+ end_dlg "" .tlr
+ }
ppack .tlr.save -in .tlr.closebuttons -side right
- ttk::button .tlr.abort -text "Abort"\
- -command {raise .; destroy .tlr}
+ ttk::button .tlr.abort -text [__ "Abort"] -command {end_dlg "" .tlr}
ppack .tlr.abort -in .tlr.closebuttons -side right
place_dlg .tlr .
wm resizable .tlr 0 0
-} ; # repositories
+} ; # main_repository
+
+proc more_repos {} {
+
+ create_dlg .tladr .
+ wm title .tladr [__ "Additional repositories"]
+
+ # wallpaper frame; see populate_main
+ pack [ttk::frame .tladr.bg] -expand 1 -fill x
+
+ set ttl [__ "Additional repositories"]
+ ttk::label .tladr.title -text "$ttl (does nothing yet)" -font bigfont
+ pack .tladr.title -in .tladr.bg -padx 3 -pady 10
+
+ pack [ttk::frame .tladr.tlcf] -in .tladr.bg -anchor w -padx 3 -pady 10
+ ppack [ttk::button .tladr.tlc -text [__ "Add tlcontrib"]] \
+ -in .tladr.tlcf -side left
+ ttk::label .tladr.tlcl -text [__ "Packages which cannot be part of TeX Live"]
+ pack .tladr.tlcl -in .tladr.tlcf -side left
+
+ # treeview with repositories
+ ppack [ttk::frame .tladr.adrf] -in .tladr.bg -fill x -side top
+ ttk::treeview .tladr.reps -columns {url tag} -height 3 -show headings \
+ -selectmode browse -yscrollcommand {.tladr.vsb set}
+ .tladr.reps heading url -text "Url" -anchor w
+ .tladr.reps heading tag -text [__ "Tag (optional)"] -anchor w
+ .tladr.reps column url -width [expr {$::cw * 60}]
+ .tladr.reps column tag -width [expr {$::cw * 15}]
+ grid columnconfigure .tladr.adrf 0 -weight 1
+ ttk::scrollbar .tladr.vsb -orient vertical -command {.tladr.reps yview}
+ incr row
+ grid .tladr.vsb -in .tladr.adrf -row 0 -column 1 -sticky ns
+ grid .tladr.reps -in .tladr.adrf -row 0 -column 0 -sticky news
+ #pack .tladr.reps -in .tladr.adrf -side left -fill both -expand 1
+ foreach nm [array names ::repos] {
+ if {$nm ne "main"} {
+ if {$nm ne $::repos($nm)} {
+ .tladr.reps insert {} end -values [list $::repos($nm) $nm]
+ } else {
+ .tladr.reps insert {} end -values [list $::repos($nm) ""]
+ }
+ }
+ }
+ pack [ttk::frame .tladr.add_del] -in .tladr.bg -fill x -expand 1
+ ppack [ttk::button .tladr.delb -text [__ "Delete"]] \
+ -in .tladr.add_del -side left -fill x
+ ppack [ttk::button .tladr.addb -text [__ "Add"]] \
+ -in .tladr.add_del -side right -fill x
+
+ # pinning
+
+ ppack [ttk::frame .tladr.pinf] -in .tladr.bg -fill x -expand 1
+ ttk::label .tladr.pinl -text "Pinning" -font bfont
+ ttk::scrollbar .tladr.pinvbs -orient vertical -command {.tladr.pintx yview}
+ ttk::scrollbar .tladr.pinhbs -orient horizontal -command {.tladr.pintx xview}
+ text .tladr.pintx -height 3 -wrap none \
+ -yscrollcommand {.tladr.pinvbs set} -xscrollcommand {.tladr.pinhbs set}
+ grid columnconfigure .tladr.pinf 0 -weight 1
+ grid .tladr.pinl -in .tladr.pinf -row 0 -column 0 -sticky w
+ grid .tladr.pinhbs -in .tladr.pinf -row 2 -column 0 -sticky ew
+ grid .tladr.pinvbs -in .tladr.pinf -row 1 -column 1 -sticky ns
+ grid .tladr.pintx -in .tladr.pinf -row 1 -column 0 -sticky news
+
+ pack [ttk::frame .tladr.cancelok] \
+ -in .tladr.bg -fill x -pady [list 10 0] -side bottom
+ ppack [ttk::button .tladr.ok -text [__ "Ok"]] -in .tladr.cancelok -side right
+ ppack [ttk::button .tladr.cancel -text [__ "Cancel"]] \
+ -in .tladr.cancelok -side right
+ .tladr.ok configure -command {end_dlg "" .tladr}
+ .tladr.cancel configure -command {end_dlg "" .tladr}
+
+ place_dlg .tladr
+}
### platforms
if {$::tcl_platform(platform) ne "windows"} {
- set ::platforms {}
+ # the ::platforms dict has been created earlier
proc toggle_pl_marked {pl cl} {
# toggle_pl_marked is triggered by a mouse click only in column #1.
- # 'fut' should get updated in ::platforms and in .tlpl.pl.
+ # 'fut'[ure] should get updated in ::platforms _and_ in .tlpl.pl.
if {$cl ne "#1"} return
if {$pl eq $::our_platform} {
- tk_messageBox -message "Cannot remove own platform $::our_platform" \
+ tk_messageBox -message \
+ [__ "Cannot remove own platform %s" $::our_platform] \
-parent .tlpl
return
}
@@ -1179,9 +1239,7 @@ if {$::tcl_platform(platform) ne "windows"} {
}
} ; # toggle_pl_marked
- proc platform_do {} {
- raise .
- destroy .tlpl
+ proc platforms_commit {} {
set pl_add {}
set pl_remove {}
dict for {p pd} $::platforms {
@@ -1205,14 +1263,15 @@ if {$::tcl_platform(platform) ne "windows"} {
append cmd [join $pl_remove " "]
lappend cmds $cmd
}
- run_cmds $cmds log_widget_cb
+ run_cmds $cmds 1
vwait ::done_waiting
update_local_revnumbers
collect_filtered
- } ; # platform_do
+ } ; # platforms_do
- proc platform_select {} {
+ # the platforms dialog
+ proc platforms_select {} {
run_cmd_waiting "platform list"
set ::platforms {}
foreach l $::out_log {
@@ -1226,17 +1285,14 @@ if {$::tcl_platform(platform) ne "windows"} {
dict set ::platforms $p "fut" 1
}
}
- destroy .tlpl
- toplevel .tlpl -class Dialog
- wm withdraw .tlpl
- wm transient .tlpl .
- wm title .tlpl "Platforms"
+ create_dlg .tlpl
+ wm title .tlpl [__ "Platforms"]
if $::plain_unix {wm attributes .tlpl -type dialog}
# wallpaper frame
pack [ttk::frame .tlpl.bg] -expand 1 -fill both
- # platforms treeview
+ # platforms treeview; do we need a scrollbar?
pack [ttk::frame .tlpl.fpl] -in .tlpl.bg -fill both -expand 1
ttk::treeview .tlpl.pl -columns {sup plat} -show headings \
-height [dict size $::platforms] ; # -yscrollcommand {.tlpl.plsb set}
@@ -1244,10 +1300,9 @@ if {$::tcl_platform(platform) ne "windows"} {
#ttk::scrollbar .tlpl.plsb -orient vertical \
# -command {.tlpl.pl yview}
#ppack .tlpl.plsb -in .tlpl.fpl -side right -fill y -expand 1
- foreach col {sup plat} nm {"" "Platform"} {
- .tlpl.pl heading $col -text $nm -anchor w
- }
- .tlpl.pl column sup -width [expr {$::cw * 6}]
+ #.tlpl.pl heading sup -text ""
+ .tlpl.pl column sup -width [expr {$::cw * 8}]
+ .tlpl.pl heading plat -text [__ "platform"] -anchor w
.tlpl.pl column plat -width [expr {$::cw * 20}]
dict for {p mks} $::platforms {
.tlpl.pl insert {} end -id $p -values \
@@ -1265,16 +1320,18 @@ if {$::tcl_platform(platform) ne "windows"} {
# buttons
pack [ttk::frame .tlpl.but] -in .tlpl.bg -fill x
- ttk::button .tlpl.do -text "Apply and close" -command platform_do
- ttk::button .tlpl.dont -text "Close" -command \
- {raise .; destroy .tlpl}
+ ttk::button .tlpl.do -text [__ "Apply and close"] -command {
+ platforms_commit; end_dlg "" .tlpl
+ }
+ ttk::button .tlpl.dont -text [__ "Close"] -command \
+ {end_dlg "" .tlpl}
ppack .tlpl.do -in .tlpl.but -side right
.tlpl.do configure -state disabled
ppack .tlpl.dont -in .tlpl.but -side right
place_dlg .tlpl .
wm resizable .tlpl 0 0
- } ; # platform_select
+ } ; # platforms_select
} ; # $::tcl_platform(platform) ne "windows"
@@ -1287,8 +1344,8 @@ if $::do_restore {
# dictionary of backups, with mapping to list of available revisions
set bks {}
-proc enable_restore {yesno} {
- set st [expr {$yesno ? !disabled : disabled}]
+proc enable_restore {y_n} {
+ set st [expr {$y_n ? !disabled : disabled}]
.tlbk.bklist state $st
.tlbk.all configure -state $st
.tlbk.done configure -state $st
@@ -1296,8 +1353,7 @@ proc enable_restore {yesno} {
proc finish_restore {} {
vwait ::done_waiting
- # now log_widget_cb should have done finish mode
- # and re-enabled its close button.
+ # now log_widget_finish should have run and re-enabled its close button.
# We won't wait for the log toplevel to close, but we will
# update the packages display in the main window.
update_local_revnumbers
@@ -1305,10 +1361,8 @@ proc finish_restore {} {
} ; # finish_restore
proc restore_all {} {
- run_cmd "restore --force --all" log_widget_cb
+ run_cmd "restore --force --all" 1
finish_restore
- raise .
- destroy .tlbk
} ; # restore_all
proc restore_this {} {
@@ -1322,12 +1376,11 @@ proc restore_this {} {
if {$id ne {}} {set p [.tlbk.bklist set $id pkg]}
}
if {$p eq {}} return
- set ans [tk_messageBox -message "Restore $p to revision $r?" \
+ set ans [tk_messageBox -message [__ "Restore %s to revision %s?" $p $r] \
-type okcancel -parent .tlbk]
if {$ans ne {ok}} return
- run_cmd "restore --force $p $r" log_widget_cb
+ run_cmd "restore --force $p $r" 1
finish_restore
- # tkwait window .tllg
} ; # restore_this
proc bklist_callback_click {x y} {
@@ -1346,7 +1399,7 @@ proc restore_backups_dialog {} {
if [regexp $re $l m abk] break
}
if {$abk == 0} {
- tk_messageBox -message "No backups configured"
+ tk_messageBox -message [__ "No backups configured"]
return
}
run_cmd_waiting "option backupdir"
@@ -1356,19 +1409,19 @@ proc restore_backups_dialog {} {
if [regexp $re $l m bdir] break
}
if {$bdir eq ""} {
- tk_messageBox -message "No backup directory defined"
+ tk_messageBox -message [__ "No backup directory defined"]
return
}
set bdir [file join [exec kpsewhich -var-value SELFAUTOPARENT] $bdir]
if {! [file isdirectory $bdir]} {
- tk_messageBox -message "Backup directory $bdir does not exist"
+ tk_messageBox -message [__ "Backup directory %s does not exist" $bdir]
return
}
set pwd0 [pwd]
cd $bdir
set backups [lsort [glob *.tar.xz]]
if {[llength $backups] == 0} {
- tk_messageBox -message "No backups found in $bdir"
+ tk_messageBox -message [__ "No backups found in $bdir"]
return
}
# dictionary of backups; package => list of available revisions
@@ -1384,7 +1437,7 @@ proc restore_backups_dialog {} {
}
}
if {[llength [dict keys $::bks]] == 0} {
- tk_messageBox -message "No packages in backup directory $bdir"
+ tk_messageBox -message [__ "No packages in backup directory %s" $bdir]
return
}
# invert sort order of revisions for each package
@@ -1394,10 +1447,10 @@ proc restore_backups_dialog {} {
toplevel .tlbk -class Dialog
wm withdraw .tlbk
wm transient .tlbk .
- wm title .tlbk "Restore from backup"
+ wm title .tlbk [__ "Restore from backup"]
if $::plain_unix {wm attributes .tlbk -type dialog}
- # wallpaper frame; see make_widgets
+ # wallpaper frame; see populate_main
pack [ttk::frame .tlbk.bg] -expand 1 -fill x
# the displayed list of backed-up packages
@@ -1410,9 +1463,9 @@ proc restore_backups_dialog {} {
pack [ttk::scrollbar .tlbk.bkvsb -orient vertical -command \
{.tlbk.bklist yview}] -in .tlbk.fbk -side right -fill y
- foreach col {"pkg" "rev"} nm {"Package" "Revision"} {
- .tlbk.bklist heading $col -text $nm -anchor w
- }
+ .tlbk.bklist heading "pkg" -text [__ "Package"] -anchor w
+ .tlbk.bklist heading "rev" -text [__ "Revision"] -anchor w
+
.tlbk.bklist column "#0" -width [expr {$::cw * 2}]
.tlbk.bklist column "pkg" -width [expr {$::cw * 25}]
.tlbk.bklist column "rev" -width [expr {$::cw * 12}]
@@ -1452,13 +1505,14 @@ proc restore_backups_dialog {} {
# frame with buttons
pack [ttk::frame .tlbk.fbut] -in .tlbk.bg -side bottom -fill x
- ppack [ttk::button .tlbk.all -text "Restore all" -command restore_all] \
+ ppack [ttk::button .tlbk.all -text [__ "Restore all"] -command restore_all] \
-in .tlbk.fbut -side right
- ppack [ttk::button .tlbk.done -text "Close" \
- -command {raise .; destroy .tlbk}] -in .tlbk.fbut -side right
+ ppack [ttk::button .tlbk.done -text [__ "Close"] -command {
+ end_dlg "" .tlbk}] -in .tlbk.fbut -side right
place_dlg .tlbk .
wm resizable .tlbk 0 0
+ tkwait .tlbk
} ; # restore_backups_dialog
} ; # if $::do_restore
@@ -1469,10 +1523,10 @@ proc restore_backups_dialog {} {
proc update_tlmgr {} {
if {! $::need_update_tlmgr} {
- tk_messageBox -message "Nothing to do!"
+ tk_messageBox -message [__ "Nothing to do!"]
return
}
- run_cmd "update --self" log_widget_cb
+ run_cmd "update --self" 1
vwait ::done_waiting
# tlmgr restarts itself automatically
update_local_revnumbers
@@ -1481,13 +1535,13 @@ proc update_tlmgr {} {
proc update_all {} {
if $::need_update_tlmgr {
- tk_messageBox -message "Update self first!"
+ tk_messageBox -message [__ "Update self first!"]
return
} elseif {! $::n_updates} {
- tk_messageBox -message "Nothing to do!"
+ tk_messageBox -message [__ "Nothing to do!"]
return
}
- run_cmd "update --all" log_widget_cb
+ run_cmd "update --all" 1
vwait ::done_waiting
update_local_revnumbers
collect_filtered
@@ -1523,7 +1577,7 @@ proc install_pkgs {sel_opt {pk ""}} {
}
}
if {[llength $todo] == 0} {
- tk_messageBox -message "Nothing to do!" -type ok -icon info
+ tk_messageBox -message [__ "Nothing to do!"] -type ok -icon info
return
}
run_cmd_waiting "install --dry-run $todo"
@@ -1537,13 +1591,13 @@ proc install_pkgs {sel_opt {pk ""}} {
}
if {[llength $deps] > 0} {
set ans [any_message \
- "Also installing dependencies\n\n$deps.\n\nContinue?" "okcancel"]
+ [__ "Also installing dependencies\n\n$deps.\n\nContinue?"] "okcancel"]
if {$ans eq "cancel"} return
}
- run_cmd "install $todo" log_widget_cb
+ run_cmd "install $todo" 1
vwait ::done_waiting
if {[llength $pre_installed] > 0} {
- lappend ::err_log "Already installed: $pre_installed"
+ lappend ::err_log [__ "Already installed: %s" $pre_installed]
show_err_log
}
update_local_revnumbers
@@ -1570,7 +1624,7 @@ proc update_pkgs {sel_opt {pk ""}} {
}
}
if {[llength $todo] == 0} {
- tk_messageBox -message "Nothing to do!" -type ok -icon info
+ tk_messageBox -message [__ "Nothing to do!"] -type ok -icon info
return
}
run_cmd_waiting "update --dry-run $todo"
@@ -1583,11 +1637,11 @@ proc update_pkgs {sel_opt {pk ""}} {
}
}
if {[llength $deps] > 0} {
- set ans [any_message "Also updating dependencies\n\n$deps?" \
+ set ans [any_message [__ "Also updating dependencies\n\n%s?" $deps] \
"yesnocancel"]
switch $ans {
"cancel" return
- "yes" {run_cmd "update $todo" log_widget_cb}
+ "yes" {run_cmd "update $todo"} 1
"no" {
set deps {}
run_cmd_waiting "update --dry-run --no-depends $todo"
@@ -1598,22 +1652,22 @@ proc update_pkgs {sel_opt {pk ""}} {
}
if {[llength $deps] > 0} {
set ans [any_message \
- "Updating hard dependencies $deps anyway. Continue?" \
+ [__ "Updating hard dependencies %s anyway. Continue?" $deps] \
"okcancel"]
if {$ans eq "cancel"} return
}
- run_cmd "update --no-depends $todo" log_widget_cb
+ run_cmd "update --no-depends $todo" 1
}
}
} else {
- run_cmd "update $todo" log_widget_cb
+ run_cmd "update $todo" 1
}
vwait ::done_waiting
if {[llength $not_inst] > 0} {
- lappend ::err_log "Skipped because not installed: $not_inst"
+ lappend ::err_log [__ "Skipped because not installed: %s" $not_inst]
}
if {[llength $uptodate] > 0} {
- lappend ::err_log "Skipped because already up to date: $uptodate"
+ lappend ::err_log [__ "Skipped because already up to date: %s" $uptodate]
}
if {[llength $not_inst] > 0 || [llength $uptodate] > 0} {
show_err_log
@@ -1644,15 +1698,15 @@ proc remove_pkgs {sel_opt {pk ""}} {
}
}
if {[llength $todo] == 0} {
- tk_messageBox -message "Nothing to do!" -type ok -icon info
+ tk_messageBox -message [__ "Nothing to do!"] -type ok -icon info
return
}
if {[llength $deps] > 0} {
- set ans [any_message "Also remove dependencies\n\n$deps?" \
+ set ans [any_message [__ "Also remove dependencies\n\n%s?" $deps] \
"yesnocancel"]
switch $ans {
"cancel" return
- "yes" {run_cmd "remove $todo" log_widget_cb}
+ "yes" {run_cmd "remove $todo" 1}
"no" {
set deps {}
run_cmd_waiting "remove --dry-run --no-depends $todo"
@@ -1663,15 +1717,15 @@ proc remove_pkgs {sel_opt {pk ""}} {
}
if {[llength $deps] > 0} {
set ans [any_message \
- "Removing hard dependencies $deps anyway. Continue?" \
+ [__ "Removing hard dependencies %s anyway. Continue?" $deps] \
"okcancel"]
if {$ans eq "cancel"} return
}
- run_cmd "remove --no-depends $todo" log_widget_cb
+ run_cmd "remove --no-depends $todo" 1
}
}
} else {
- run_cmd "remove $todo" log_widget_cb
+ run_cmd "remove $todo" 1
}
vwait ::done_waiting
if {[llength $not_inst] > 0} {
@@ -1694,7 +1748,7 @@ proc run_entry {} {
if {$cmd eq ""} return
do_debug $cmd
.ent.e delete 0 end
- run_cmd $cmd log_widget_cb
+ run_cmd $cmd 1
}
proc restart_self {} {
@@ -1711,8 +1765,8 @@ proc restart_self {} {
destroy .
} ; # restart_self
-proc toggle_marked {itm cl} {
- # toggle_marked is triggered by a mouse click only in column #1.
+proc toggle_marked_pkg {itm cl} {
+ # toggle_marked_pkg is triggered by a mouse click only in column #1.
# 'marked' should get updated in ::pkgs, ::filtered and in .pkglist.
if {$cl ne "#1"} return
@@ -1722,7 +1776,7 @@ proc toggle_marked {itm cl} {
set m [mark_sym $mrk]
dict set ::filtered $itm [lreplace [dict get $::filtered $itm] 0 0 $m]
.pkglist set $itm mk $m
-} ; # toggle_marked
+} ; # toggle_marked_pkg
proc mark_all {mrk} {
foreach nm [dict keys $::pkgs] {
@@ -1756,27 +1810,31 @@ proc do_package_popup_menu {x y X Y} {
set lr [dict get $::pkgs [.pkglist focus] "localrev"]
set rr [dict get $::pkgs [.pkglist focus] "remoterev"]
.pkg_popup delete 0 end
- .pkg_popup add command -label "Info" -command \
- {run_cmd "info [.pkglist focus]" log_widget_cb; \
- vwait ::done_waiting}
+
+ .pkg_popup add command -label [__ "Info"] -command {
+ run_cmd "info [.pkglist focus]" 1; vwait ::done_waiting
+ }
if {$::have_remote && ! $::need_update_tlmgr && $rr > 0 && $lr == 0} {
- .pkg_popup add command -label "Install" -command \
- {install_pkgs "focus"}
+ .pkg_popup add command -label [__ "Install"] -command {
+ install_pkgs "focus"
+ }
}
if {$::have_remote && ! $::need_update_tlmgr && $lr > 0 && $rr > $lr} {
- .pkg_popup add command -label "Update" -command \
- {update_pkgs "focus"}
+ .pkg_popup add command -label [__ "Update"] -command {
+ update_pkgs "focus"
+ }
}
if {$lr > 0} {
- .pkg_popup add command -label "Remove" -command \
- {remove_pkgs "focus"}
+ .pkg_popup add command -label [__ "Remove"] -command {
+ remove_pkgs "focus"
+ }
}
.pkg_popup post [expr {$X - 2}] [expr {$Y - 2}]
focus .pkg_popup
} ; # do_package_popup_menu
proc set_paper {p} {
- run_cmd "paper paper $p" log_widget_cb
+ run_cmd "paper paper $p" 1
}
##### running external commands #####
@@ -1788,11 +1846,11 @@ 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"
+ log_widget_finish
set ::done_waiting 1
} elseif {$len >= 0} {
lappend ::out_log $l
- log_widget_cb "line" $l
+ log_widget_add $l
}
}; # read_capt
@@ -1808,12 +1866,12 @@ proc run_external {cmd mess} {
}
chan configure $::capt -buffering line -blocking 0
chan event $::capt readable read_capt
- log_widget_cb "init"
+ log_widget_init
}
##### main window #####
-proc make_widgets {} {
+proc populate_main {} {
wm title . "$::progname $::procid"
@@ -1824,7 +1882,7 @@ proc make_widgets {} {
# the "File" cascade should ensure that the dummy menu
# occupies the same vertical space as the real menu.
menu .mn_empty
- .mn_empty add cascade -label "File" -menu .mn_empty.file -underline 0
+ .mn_empty add cascade -label [__ "File"] -menu .mn_empty.file -underline 0
if $::plain_unix {
.mn_empty configure -borderwidth 1
.mn_empty configure -background $::default_bg
@@ -1846,52 +1904,56 @@ proc make_widgets {} {
}
}
- .mn add cascade -label "File" -menu .mn.file -underline 0
+ .mn add cascade -label [__ "File"] -menu .mn.file -underline 0
menu .mn.file
- .mn.file add command -label "Load default repository" \
+ .mn.file add command -label [__ "Load default repository"] \
-command {get_packages_info_remote; collect_filtered}
- .mn.file add command -command {destroy .} -label "Exit" -underline 1
+ .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
+ # inx: keeping count to record indices 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
set ::inx_upd_tlmgr $inx
- .mn.pkg add command -label "Update tlmgr" -command update_tlmgr
+ .mn.pkg add command -label [__ "Update tlmgr"] -command update_tlmgr
incr inx
set ::inx_upd_all $inx
- .mn.pkg add command -label "Update all" -command update_all
+ .mn.pkg add command -label [__ "Update all"] -command update_all
incr inx
- .mn.pkg add command -label "Install marked" \
+ .mn.pkg add command -label [__ "Install marked"] \
-command {install_pkgs "marked"}
incr inx
- .mn.pkg add command -label "Update marked" \
+ .mn.pkg add command -label [__ "Update marked"] \
-command {update_pkgs "marked"}
incr inx
- .mn.pkg add command -label "Remove marked" \
+ .mn.pkg add command -label [__ "Remove marked"] \
-command {remove_pkgs "marked"}
if $::do_restore {
- incr inx
- .mn.pkg add command -label "Restore from backup..." \
- -command restore_backups_dialog
+ incr inx
+ .mn.pkg add command -label [__ "Restore from backup..."] \
+ -command restore_backups_dialog
}
- .mn add cascade -label "Actions" -menu .mn.act -underline 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
+ .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
set inx 0
- .mn.opt add command -label "Change repository..." \
- -command repositories
+ .mn.opt add command -label [__ "Change main repository"] \
+ -command main_repository
incr inx
- .mn.opt add cascade -label "Paper" -menu .mn.opt.paper
+ .mn.opt add command -label [__ "Additional repositories"] \
+ -command more_repos
+ incr inx
+ .mn.opt add cascade -label [__ "Paper"] -menu .mn.opt.paper
menu .mn.opt.paper
foreach p [list a4 letter] {
.mn.opt.paper add command -label $p -command "set_paper $p"
@@ -1899,10 +1961,10 @@ proc make_widgets {} {
if {$::tcl_platform(platform) ne "windows"} {
incr inx
set ::inx_platforms $inx
- .mn.opt add command -label "Platforms..." -command platform_select
+ .mn.opt add command -label [__ "Platforms"] -command platforms_select
}
- .mn add cascade -label "Help" -menu .mn.help -underline 0
+ .mn add cascade -label [__ "Help"] -menu .mn.help -underline 0
menu .mn.help
.mn.help add command -command {tk_messageBox -message "Helpless"} \
-label "About"
@@ -1919,47 +1981,45 @@ proc make_widgets {} {
ttk::frame .topf
pack .topf -in .bg -side top -anchor w
- pgrid [ttk::label .topf.llrepo -text "Default repository" -anchor w] \
- -row 0 -column 0 -sticky w
- pgrid [ttk::label .topf.lrepo -textvariable ::repo] \
- -row 0 -column 1 -sticky w
- pgrid [ttk::label .topf.loaded -text "Not loaded"] \
+ pgrid [ttk::label .topf.llrepo -text [__ "Default repositories"] -anchor w] \
+ -row 0 -column 0 -sticky nw
+ pgrid [ttk::label .topf.lrepos -text ""] \
+ -row 0 -column 1 -sticky nw
+ pgrid [ttk::label .topf.loaded -text [__ "Not loaded"]] \
-row 1 -column 1 -sticky w
- ttk::label .topf.lluptodate -text "TL Manager up to date?" -anchor w
+ ttk::label .topf.lluptodate -text [__ "TL Manager up to date?"] -anchor w
pgrid .topf.lluptodate -row 2 -column 0 -sticky w
- ttk::label .topf.luptodate -text "Unknown" -anchor w
+ ttk::label .topf.luptodate -text [__ "Unknown"] -anchor w
pgrid .topf.luptodate -row 2 -column 1 -sticky w
- pgrid [ttk::label .topf.llcmd -anchor w -text "Last tlmgr command: "] \
+ pgrid [ttk::label .topf.llcmd -anchor w -text [__ "Last tlmgr command:"]] \
-row 3 -column 0 -sticky w
pgrid [ttk::label .topf.lcmd -anchor w -textvariable ::last_cmd] \
-row 3 -column 1 -sticky w
# command entry widget
- spacing .bg
ttk::frame .ent
- ppack [ttk::label .ent.l -text "Type command:"] -side left
+ ppack [ttk::label .ent.l -text [__ "Type command:"]] -side left
ppack [ttk::entry .ent.e -width 40] -side left -padx 3
- ppack [ttk::button .ent.b -text Go -command run_entry] -side left
+ ppack [ttk::button .ent.b -text [__ "Go"] -command run_entry] \
+ -side left
bind .ent.e <Return> run_entry
- pack .ent -in .bg -fill x -side top
-
- spacing .bg
+ pack .ent -pady 10 -in .bg -fill x -side top
# package list
- ttk::label .lpack -text "Package list" -font TkHeadingFont -anchor w
+ ttk::label .lpack -text [__ "Package list"] -font TkHeadingFont -anchor w
ppack .lpack -in .bg -side top -fill x
# controlling package list
ttk::frame .pkfilter
# filter on status: inst, all, upd
- ttk::label .pkfilter.lstat -font TkHeadingFont -text "Status"
- ttk::radiobutton .pkfilter.inst -text Installed -value inst \
+ ttk::label .pkfilter.lstat -font TkHeadingFont -text [__ "Status"]
+ ttk::radiobutton .pkfilter.inst -text [__ "Installed"] -value inst \
-variable ::stat_opt -command collect_filtered
- ttk::radiobutton .pkfilter.alls -text All -value all \
+ ttk::radiobutton .pkfilter.alls -text [__ "All"] -value all \
-variable ::stat_opt -command collect_filtered
- ttk::radiobutton .pkfilter.upd -text Updatable -value upd \
+ ttk::radiobutton .pkfilter.upd -text [__ "Updatable"] -value upd \
-variable ::stat_opt -command collect_filtered
grid .pkfilter.lstat -column 0 -row 0 -sticky w -padx {3 50}
pgrid .pkfilter.inst -column 0 -row 1 -sticky w
@@ -1967,12 +2027,12 @@ proc make_widgets {} {
pgrid .pkfilter.upd -column 0 -row 3 -sticky w
# filter on detail level: all, coll, schm
- ttk::label .pkfilter.ldtl -font TkHeadingFont -text "Detail >> Global"
- ttk::radiobutton .pkfilter.alld -text All -value all \
+ ttk::label .pkfilter.ldtl -font TkHeadingFont -text [__ "Detail >> Global"]
+ ttk::radiobutton .pkfilter.alld -text [__ All] -value all \
-variable ::dtl_opt -command collect_filtered
- ttk::radiobutton .pkfilter.coll -text "Collections and schemes" -value coll \
- -variable ::dtl_opt -command collect_filtered
- ttk::radiobutton .pkfilter.schm -text "Only schemes" -value schm \
+ ttk::radiobutton .pkfilter.coll -text [__ "Collections and schemes"] \
+ -value coll -variable ::dtl_opt -command collect_filtered
+ ttk::radiobutton .pkfilter.schm -text [__ "Only schemes"] -value schm \
-variable ::dtl_opt -command collect_filtered
pgrid .pkfilter.ldtl -column 1 -row 0 -sticky w
pgrid .pkfilter.alld -column 1 -row 1 -sticky w
@@ -1980,9 +2040,9 @@ proc make_widgets {} {
pgrid .pkfilter.schm -column 1 -row 3 -sticky w
# marks
- grid [ttk::button .mrk_all -text "Mark all" -command {mark_all 1}] \
+ grid [ttk::button .mrk_all -text [__ "Mark all"] -command {mark_all 1}] \
-in .pkfilter -column 2 -row 1 -sticky w -padx {50 3} -pady 3
- grid [ttk::button .mrk_none -text "Mark none" -command {mark_all 0}] \
+ grid [ttk::button .mrk_none -text [__ "Mark none"] -command {mark_all 0}] \
-in .pkfilter -column 2 -row 2 -sticky w -padx {50 3} -pady 3
pack .pkfilter -in .bg -side top -fill x
@@ -1990,11 +2050,10 @@ proc make_widgets {} {
# search interface
pack [ttk::frame .pksearch] -in .bg -side top -fill x
ppack [ttk::label .pksearch.l \
- -text "Search package names"] \
- -side left
+ -text [__ "Search package names"]] -side left
pack [ttk::entry .pksearch.e -width 30] -side left -padx {3 0} -pady 3
ppack [ttk::checkbutton .pksearch.d -variable ::search_desc \
- -text "Also search short descriptions"] -side left
+ -text [__ "Also search short descriptions"]] -side left
bind .pksearch.e <KeyRelease> display_packages_info
bind .pksearch.d <ButtonRelease> toggle_search_desc
@@ -2004,11 +2063,11 @@ proc make_widgets {} {
{mk name localrev remoterev shortdesc} \
-show headings -height 8 -selectmode extended \
-xscrollcommand {.pkhsb set} -yscrollcommand {.pkvsb set}
- foreach \
- col {mk name localrev remoterev shortdesc} \
- nm {"" Name "Local Rev. (ver.)" "Remote Rev. (ver.)" Description} {
- .pkglist heading $col -text $nm -anchor w
- }
+ .pkglist heading mk -text "" -anchor w
+ .pkglist heading name -text [__ "Name"] -anchor w
+ .pkglist heading localrev -text [__ "Local Rev. (ver.)"] -anchor w
+ .pkglist heading remoterev -text [__ "Remote Rev. (ver.)"] -anchor w
+ .pkglist heading shortdesc -text [__ "Description"] -anchor w
.pkglist column mk -width [expr {$::cw * 3}]
.pkglist column name -width [expr {$::cw * 25}]
.pkglist column localrev -width [expr {$::cw * 18}]
@@ -2024,11 +2083,11 @@ proc make_widgets {} {
grid rowconfigure .fpkg 0 -weight 1
# "#1" refers to the first column (with mark symbols)
- bind .pkglist <space> {toggle_marked [.pkglist focus] "#1"}
- bind .pkglist <Return> {toggle_marked [.pkglist focus] "#1"}
+ bind .pkglist <space> {toggle_marked_pkg [.pkglist focus] "#1"}
+ bind .pkglist <Return> {toggle_marked_pkg [.pkglist focus] "#1"}
# only toggle when column is "mk" i.e. #1
- bind .pkglist <ButtonRelease-1> {toggle_marked \
- [.pkglist identify item %x %y] [.pkglist identify column %x %y]}
+ bind .pkglist <ButtonRelease-1> {toggle_marked_pkg [
+ .pkglist identify item %x %y] [.pkglist identify column %x %y]}
menu .pkg_popup ; # entries added on-the-fly
bind .pkglist <<RightClick>> {do_package_popup_menu %x %y %X %Y}
@@ -2040,41 +2099,36 @@ proc make_widgets {} {
pack [ttk::frame .endbuttons] -in .bg -side bottom -fill x
ttk::label .busy -textvariable ::busy -font TkHeadingFont -anchor w
ppack .busy -in .endbuttons -side left
- ppack [ttk::button .q -text Quit -command {destroy .}] \
+ ppack [ttk::button .q -text [__ Quit] -command {destroy .}] \
-in .endbuttons -side right
- ppack [ttk::button .r -text "Restart self" -command restart_self] \
+ ppack [ttk::button .r -text [__ "Restart self"] -command restart_self] \
-in .endbuttons -side right
- ppack [ttk::button .t -text "Restart tlmgr" \
+ ppack [ttk::button .t -text [__ "Restart tlmgr"] \
-command {close_tlmgr; start_tlmgr}] \
-in .endbuttons -side right
- ttk::button .showlogs -text "Show logs" -command show_logs
+ ttk::button .showlogs -text [__ "Show logs"] -command show_logs
ppack .showlogs -in .endbuttons -side right
-} ; # make_widgets
+} ; # populate_main
##### initialize ######################################################
proc initialize {} {
# seed random numbers
expr {srand([clock seconds])}
- # prepend TL to process searchpath (not needed on windows)
+ # unix: make sure TL comes first on process searchpath
if {$::tcl_platform(platform) ne "windows"} {
- set texbin [file dirname [info script]]
+ set texbin [file dirname [file normalize [info script]]]
set savedir [pwd]
cd $texbin
set texbin [pwd]
cd $savedir
# prepend texbin to PATH, unless it is already the _first_
# path component
- if {$::tcl_platform(platform) eq "unix"} {
- set pathsep ":"
- } else {
- set pathsep ";"
- }
- set dirs [split $::env(PATH) $pathsep]
+ set dirs [split $::env(PATH) ":"]
if {[lindex $dirs 0] ne $texbin} {
- set ::env(PATH) "$texbin$pathsep$::env(PATH)"
+ set ::env(PATH) "${texbin}:$::env(PATH)"
}
- # now is a good time to ask tlmgr for the tl name of our platform
+ # now is a good time to ask tlmgr for the _TL_ name of our platform
set ::our_platform [exec tlmgr print-platform]
}
# directory for temp files
@@ -2118,16 +2172,18 @@ proc initialize {} {
set ::flid [open $fname w]
}
+ # in case we are going to do something with json:
# add json subdirectory to auto_path, but at low priority
# since the tcl/tk installation may already have a better implementation.
- # Use kpsewhich to find out own directory and bypass symlinks.
+ # Trust kpsewhich to find out own directory and bypass symlinks.
#set tlsdir [file dirname [exec kpsewhich -format texmfscripts tlshell.tcl]]
#lappend ::auto_path [file join $tlsdir "json"]
- make_widgets
+ populate_main
start_tlmgr
- get_repo
+ get_repos_from_tlmgr
+ .topf.lrepos configure -text [print_repos]
get_packages_info_local
collect_filtered ; # invokes display_packages_info
enable_menu_controls 1
diff --git a/Master/tlpkg/TeXLive/tltcl.tcl b/Master/tlpkg/TeXLive/tltcl.tcl
new file mode 100644
index 00000000000..0a00a65779a
--- /dev/null
+++ b/Master/tlpkg/TeXLive/tltcl.tcl
@@ -0,0 +1,434 @@
+#!/usr/bin/env wish
+
+# Copyright 2018 Siep Kroonenberg
+
+# This file is licensed under the GNU General Public License version 2
+# or any later version.
+
+# common declarations for tlshell.tcl and install-tl-gui.tcl
+
+set ::plain_unix 0
+if {$::tcl_platform(platform) eq "unix" && $::tcl_platform(os) ne "Darwin"} {
+ set ::plain_unix 1
+}
+
+# process ID of the perl program that will run in the background
+set ::perlpid 0
+
+set any_mirror "http://mirror.ctan.org/systems/texlive/tlnet"
+
+proc get_stacktrace {} {
+ set level [info level]
+ set s ""
+ for {set i 1} {$i < $level} {incr i} {
+ append s [format "Level %u: %s\n" $i [info level $i]]
+ }
+ return $s
+} ; # get_stacktrace
+
+# what exit procs do we need?
+# - plain error exit with messagebox and stacktrace
+# - plain messagebox exit
+# - showing log output, maybe with appended message,
+# use log toplevel for lengthy output
+# is closing the pipe $::inst guaranteed to kill perl? It should be
+
+proc err_exit {{mess ""}} {
+ if {$mess eq ""} {set mess "Error"}
+ append mess "\n" [get_stacktrace]
+ if $::plain_unix {
+ # plain_unix: avoid a RenderBadPicture error on quitting.
+ # 'send' changes the shutdown sequence,
+ # which avoids triggering the bug.
+ # 'tk appname <something>' restores 'send' and avoids the bug
+ bind . <Destroy> {
+ catch {tk appname appname}
+ }
+ }
+ tk_messageBox -icon error -message $mess
+ # kill perl process, just in case
+ if $::perlpid {
+ catch {
+ if {$::tcl_platform(platform) eq "unix"} {
+ exec -ignorestderr "kill" $::perlpid
+ } else {
+ exec -ignorestderr "taskkill" "/pid" $::perlpid
+ }
+ }
+ }
+ exit
+} ; # err_exit
+
+# localization support
+# tcl 8.5 observes LANG on Unix, but is overruled by LC_ALL.
+# for 8.5 or on Mac OS, locale setting from within tcl may not work.
+# so let the shell wrapper handle a language option by setting LANG
+# and unsetting LC_ALL.
+
+# $TEXMFCONFIG/tlmgr/config can have a setting for gui-lang.
+# replace with shell script / batchfile which is sourced?
+
+# for windows there is a bundled 8.6 in which locale can be set on-the-fly.
+# consult registry for default locale if LANG is not set.
+# The wrapper already does this, but here we do it again
+# in case e.g. company policy blocked reg.exe.
+
+# check the command-line for a lang parameter
+unset -nocomplain lang
+set i 0
+while {$i < $::argc} {
+ set p [lindex $::argv $i]
+ incr i
+ if {$p eq "-lang" || $p eq "--lang"} {
+ if {$i < $::argc} {
+ set lang [lindex $::argv $i]
+ break
+ }
+ } elseif {[string range $p 0 5] eq "-lang="} {
+ set lang [string range $p 6 end]
+ break
+ } elseif {[string range $p 0 6] eq "--lang="} {
+ set lang [string range $p 7 end]
+ break
+ }
+}
+unset i
+
+# first fallback: check config file if available
+if {! [info exists lang] || $lang eq ""} {
+ foreach tmf {"TEXMFCONFIG" "TEXMFSYSCONFIG"} {
+ if [catch {exec kpsewhich -var-value $tmf} d] {
+ break; # apparently there is not yet a TL installation
+ }
+ if [catch {open [file join $d "tlmgr" "config"] r} fid] continue
+ while 1 {
+ if [catch {chan gets $fid} l] break
+ if {[regexp {^gui-lang\s*=\s*(\S+)$} $l m lang]} {
+ chan close $fid
+ break
+ }
+ }
+ if {[info exists lang] && $lang ne ""} break
+ }
+}
+
+# second fallback: check environment for LC_ALL, LC_MESSAGES and LANG
+if {! [info exists lang] || $lang eq ""} {
+ foreach lng {"LC_ALL" "LC_MESSAGES" "LANG"} {
+ if {[info exists ::env($lng)] && $::env($lng) ne ""} {
+ set lang $::env($lng)
+ break
+ }
+ }
+}
+
+# third fallback, windows-only: check registry
+if {(! [info exists lang] || $lang eq "") && \
+ $::tcl_platform(platform) eq "windows"} {
+ if {! [catch {package require registry}]} {
+ set regpath [join {HKEY_LOCAL_MACHINE system currentcontrolset \
+ control nls language} "\\"]
+ if {! [catch {registry get $regpath "Installlanguage"} lcode]} {
+ set regpath [join {HKEY_CLASSES_ROOT mime database rfc1766} "\\"]
+ if {! [catch {registry get $regpath $lcode} lng]} {
+ set l [string first ";" $lng]
+ if {$l > 0} {
+ incr l -1
+ set lng [string range $lng 0 $l]
+ }
+ set lang $lng
+ #tk_messageBox -message "Language $lang in registry found"
+ }
+ }
+ }
+}
+
+# load the message catalog
+package require msgcat
+if {[info exists lang] && $lang ne ""} {
+ ::msgcat::mclocale $lang
+ #unset lang
+}
+::msgcat::mcload [file join $::instroot "tlpkg" "translations"]
+
+proc __ {s args} {return [::msgcat::mc $s {*}$args]}
+
+# string representation of booleans
+proc yes_no {b} {
+ if $b {
+ set ans [::msgcat::mc "Yes"]
+ } else {
+ set ans [::msgcat::mc "No"]
+ }
+ return $ans
+}
+
+if {$::tcl_platform(os) eq "Darwin"} {
+ # avoid warnings 'tar: Failed to set default locale'
+ set ::env(LC_ALL) "en_US.UTF-8"
+}
+
+### fonts ###
+
+# no bold text for messages; `userDefault' indicates priority
+option add *Dialog.msg.font TkDefaultFont userDefault
+
+# larger fonts: lfont and bold titlefont
+font create lfont {*}[font configure TkDefaultFont]
+font configure lfont -size [expr {round(1.2 * [font actual lfont -size])}]
+font create bfont {*}[font configure TkDefaultFont]
+font configure bfont -weight bold
+font create hfont {*}[font configure lfont]
+font configure hfont -weight bold
+font create titlefont {*}[font configure TkDefaultFont]
+font configure titlefont -weight bold \
+ -size [expr {round(1.5 * [font actual titlefont -size])}]
+
+## italicized items; not used
+#font create it_font {*}[font configure TkDefaultFont]
+#font configure it_font -slant italic
+
+# width of '0', as a very rough estimate of average character width
+# assume height == width*2
+set ::cw [font measure TkTextFont "0"]
+
+# default foreground color and disabled foreground color
+# may not be black in e.g. dark color schemes
+set blk [ttk::style lookup TButton -foreground]
+set gry [ttk::style lookup TButton -foreground disabled]
+
+# 'default' padding
+
+proc ppack {wdg args} { ; # pack command with padding
+ pack $wdg {*}$args -padx 3 -pady 3
+}
+
+proc pgrid {wdg args} { ; # grid command with padding
+ grid $wdg {*}$args -padx 3 -pady 3
+}
+
+# unicode symbols as fake checkboxes in ttk::treeview widgets
+
+proc mark_sym {mrk} {
+ if $mrk {
+ return "\u25A3" ; # 'white square containing black small square'
+ } else {
+ return "\u25A1" ; # 'white square'
+ }
+} ; # mark_sym
+
+# for help output
+set ::env(NOPERLDOC) 1
+
+##### dialog support #####
+
+# for example code, look at dialog.tcl, part of Tk itself
+
+# global variable for dialog return value, in case the outcome
+# must be handled by the caller rather than by the dialog itself
+
+set ::dialog_ans {}
+
+# start new toplevel with settings appropriate for a dialog
+proc create_dlg {wnd {p .}} {
+ catch {destroy $wnd} ; # no error if it does not exist
+ toplevel $wnd -class Dialog
+ wm withdraw $wnd
+ if [winfo viewable $p] {wm transient $wnd $p}
+ if $::plain_unix {wm attributes $wnd -type dialog}
+ wm protocol $wnd WM_DELETE_WINDOW {destroy $wnd}
+}
+
+# Place a dialog centered wrt its parent.
+# If its geometry is somehow not yet available,
+# its upperleft corner will be centered.
+
+proc place_dlg {wnd {p "."}} {
+ set g [wm geometry $p]
+ scan $g "%dx%d+%d+%d" pw ph px py
+ set hcenter [expr {$px + $pw / 2}]
+ set vcenter [expr {$py + $ph / 2}]
+ set g [wm geometry $wnd]
+ set wh [winfo reqheight $wnd]
+ set ww [winfo reqwidth $wnd]
+ set wx [expr {$hcenter - $ww / 2}]
+ if {$wx < 0} { set wx 0}
+ set wy [expr {$vcenter - $wh / 2}]
+ if {$wy < 0} { set wy 0}
+ wm geometry $wnd [format "+%d+%d" $wx $wy]
+ wm state $wnd normal
+ wm attributes $wnd -topmost
+ raise $wnd $p
+ tkwait visibility $wnd
+ focus $wnd
+ grab set $wnd
+} ; # place_dlg
+
+# place dialog answer in ::dialog_ans, raise parent, close dialog
+proc end_dlg {ans wnd} {
+ set ::dialog_ans $ans
+ set p [winfo parent $wnd]
+ if {$p eq ""} {set p "."}
+ raise $p
+ destroy $wnd
+} ; # end_dlg
+
+##### directories #####
+
+# slash flipping
+proc forward_slashify {s} {
+ regsub -all {\\} $s {/} r
+ return $r
+}
+proc native_slashify {s} {
+ if {$::tcl_platform(platform) eq "windows"} {
+ regsub -all {/} $s {\\} r
+ } else {
+ regsub -all {\\} $s {/} r
+ }
+ return $r
+}
+
+# unix: choose_dir replacing native directory browser
+
+if {$::tcl_platform(platform) eq "unix"} {
+
+ # Based on the tcl/tk widget demo.
+ # Also for MacOS, because we want to see /usr.
+ # For windows, the native browser widget is better.
+
+ ## Code to populate a single directory node
+ proc populateTree {tree node} {
+ if {[$tree set $node type] ne "directory"} {
+ set type [$tree set $node type]
+ return
+ }
+ $tree delete [$tree children $node]
+ foreach f [lsort [glob -nocomplain -directory $node *]] {
+ set type [file type $f]
+ if {$type eq "directory"} {
+ $tree insert $node end \
+ -id $f -text [file tail $f] -values [list $type]
+ # Need at least one child to make this node openable,
+ # will be deleted when actually populating this node
+ $tree insert $f 0 -text "dummy"
+ }
+ }
+ # Stop this code from rerunning on the current node
+ $tree set $node type processedDirectory
+ }
+
+ proc choose_dir {initdir {parent .}} {
+
+ create_dlg .browser $parent
+ wm title .browser [__ "Browse..."]
+
+ # wallpaper
+ pack [ttk::frame .browser.bg -padding 3] -fill both -expand 1
+ ## Create the tree and set it up
+ pack [ttk::frame .browser.fr0] -in .browser.bg -fill both -expand 1
+ set tree [ttk::treeview .browser.tree \
+ -columns {type} -displaycolumns {} -selectmode browse \
+ -yscroll ".browser.vsb set"]
+ .browser.tree column 0 -minwidth 500 -stretch 0
+ ttk::scrollbar .browser.vsb -orient vertical -command "$tree yview"
+ # hor. scrolling does not work, but toplevel and widget are resizable
+ $tree heading \#0 -text "/"
+ $tree insert {} end -id "/" -text "/" -values [list "directory"]
+
+ populateTree $tree "/"
+ bind $tree <<TreeviewOpen>> {
+ populateTree %W [%W focus]
+ }
+ bind $tree <ButtonRelease-1> {
+ .browser.tree heading \#0 -text [%W focus]
+ }
+
+ ## Arrange the tree and its scrollbar in the toplevel
+ # horizontal scrolling does not work.
+ # possible solution: very wide treeview in smaller paned window
+ # (may as well use pack in the absence of a horizontal scrollbar)
+ grid $tree .browser.vsb -sticky nsew -in .browser.fr0
+ grid columnconfigure .browser.fr0 0 -weight 1
+ grid rowconfigure .browser.fr0 0 -weight 1
+
+ # ok and cancel buttons
+ pack [ttk::frame .browser.fr1] -in .browser.bg -fill x -expand 1
+ ppack [ttk::button .browser.ok -text [__ "Ok"]] \
+ -in .browser.fr1 -side right
+ ppack [ttk::button .browser.cancel -text [__ "Cancel"]] \
+ -in .browser.fr1 -side right
+ .browser.ok configure -command {
+ set ::dialog_ans [.browser.tree focus]
+ destroy .browser
+ }
+ .browser.cancel configure -command {
+ set ::dialog_ans ""
+ destroy .browser
+ }
+ unset -nocomplain ::dialog_ans
+
+ # navigate tree to $initdir
+ set chosenDir {}
+ foreach d [file split [file normalize $initdir]] {
+ set nextdir [file join $chosenDir $d]
+ if [file isdirectory $nextdir] {
+ if {! [$tree exists $nextdir]} {
+ $tree insert $chosenDir end -id $nextdir \
+ -text $d -values [list "directory"]
+ }
+ populateTree $tree $nextdir
+ set chosenDir $nextdir
+ } else {
+ break
+ }
+ }
+ $tree see $chosenDir
+ $tree selection set [list $chosenDir]
+ $tree focus $chosenDir
+ $tree heading \#0 -text $chosenDir
+
+ place_dlg .browser $parent
+ tkwait window .browser
+ return $::dialog_ans
+ }; # choose_dir
+
+}; # if unix
+
+proc browse4dir {inidir {parent .}} {
+ if {$::tcl_platform(platform) eq "unix"} {
+ return [choose_dir $inidir $parent]
+ } else {
+ return [tk_chooseDirectory \
+ -initialdir $inidir -title [__ "Select or type"] -parent $parent]
+ }
+} ; # browse4dir
+
+# browse for a directory and store in entry- or label widget $w
+proc dirbrowser2widget {w} {
+ set wclass [winfo class $w]
+ if {$wclass eq "Entry" || $wclass eq "TEntry"} {
+ set is_entry 1
+ } elseif {$wclass eq "Label" || $wclass eq "TLabel"} {
+ set is_entry 0
+ } else {
+ err_exit "browse2widget invoked with unsupported widget class $wclass"
+ }
+ if $is_entry {
+ set retval [$w get]
+ } else {
+ set retval [$w cget -text]
+ }
+ set retval [browse4dir $retval [winfo parent $w]]
+ if {$retval eq ""} {
+ return 0
+ } else {
+ if {$wclass eq "Entry" || $wclass eq "TEntry"} {
+ $w delete 0 end
+ $w insert 0 $retval
+ } else {
+ $w configure -text $retval
+ }
+ return 1
+ }
+}
diff --git a/Master/tlpkg/bin/tl-update-messages b/Master/tlpkg/bin/tl-update-messages
index 879059eb0de..afe58ca4066 100755
--- a/Master/tlpkg/bin/tl-update-messages
+++ b/Master/tlpkg/bin/tl-update-messages
@@ -38,6 +38,7 @@ xgettext -o tlpkg/translations/messages.pot \
tlpkg/installer/install-menu-perltk.pl \
texmf-dist/scripts/texlive/tlmgrgui.pl \
tlpkg/installer/install-tl-gui.tcl \
+ tlpkg/TeXLive/tltcl.tcl \
texmf-dist/scripts/tlshell/tlshell.tcl \
$tmpfile
rm $tmpfile
diff --git a/Master/tlpkg/installer/install-tl-gui.tcl b/Master/tlpkg/installer/install-tl-gui.tcl
index daf1ccdf1bd..b69cd5fa617 100755
--- a/Master/tlpkg/installer/install-tl-gui.tcl
+++ b/Master/tlpkg/installer/install-tl-gui.tcl
@@ -5,7 +5,7 @@
# This file is licensed under the GNU General Public License version 2
# or any later version.
-# Tcl/Tk wrapper for TeX Live installer
+# Tcl/Tk frontend for TeX Live installer
# Installation can be divided into three stages:
#
@@ -35,102 +35,24 @@ package require Tk
# security: disable send
catch {rename send {}}
-# menus: disable tearoff feature
-option add *Menu.tearOff 0
-
-# no bold text for messages; `userDefault' indicates priority
-option add *Dialog.msg.font TkDefaultFont userDefault
-
-# larger fonts
-font create lfont {*}[font configure TkDefaultFont]
-font configure lfont -size [expr {round(1.2 * [font actual lfont -size])}]
-font create hfont {*}[font configure lfont]
-font configure hfont -weight bold
-font create titlefont {*}[font configure TkDefaultFont]
-font configure titlefont -weight bold \
- -size [expr {round(1.5 * [font actual titlefont -size])}]
-
-## italicized items; not used
-#font create it_font {*}[font configure TkDefaultFont]
-#font configure it_font -slant italic
-
-# string representation of booleans
-proc yes_no {b} {
- return [expr {$b ? [__"Yes"] : [__ "No"]}]
-}
-
-# default foreground color and disabled foreground color
-# may not be black in e.g. dark color schemes
-set blk [ttk::style lookup TButton -foreground]
-set gry [ttk::style lookup TButton -foreground disabled]
-
-### initialize some globals ###
-
-# perl installer process id
-set ::perlpid 0
-
-# global variable for dialogs
-set ::dialog_ans {}
-
-set ::plain_unix 0
-if {$::tcl_platform(platform) eq "unix" && $::tcl_platform(os) ne "Darwin"} {
- set ::plain_unix 1
-}
-
-# for help output
-set ::env(NOPERLDOC) 1
-
-set ::out_log {}; # list of strings
-
# this file should be in $::instroot/tlpkg/installer.
# at the next release, it may be better to start the installer, perl or tcl,
# from a shell wrapper, also on unix-like platforms
# this allows automatic inclusion of '--' parameter to separate
# tcl parameters from script parameters
+
set ::instroot [file normalize [info script]]
set ::instroot [file dirname [file dirname [file dirname $::instroot]]]
-# localization support
-# tcl 8.5 observes LC_ALL on linux, LANG on Mac OS.
-# so let the shell wrapper handle a language option.
-# for 8.5, locale setting from within tcl may not work.
-
-# exception: windows, for which there is a bundled 8.6.
-# consult registry for default locale if LANG is not set.
-# The wrapper already does this, but here we do it again
-# in case company policy blocked reg.exe.
+# declarations and procs shared with tlshell.tcl
+source [file join $::instroot "tlpkg" "TeXLive" "tltcl.tcl"]
-if {$::tcl_platform(platform) eq "windows"} {
- if {! [info exists ::env(LANG)] || $::env(LANG) eq ""} {
- if {! [catch {package require registry}]} {
- set regpath [join {HKEY_LOCAL_MACHINE system currentcontrolset
- control nls language} "\\"]
- if {! [catch {registry get $regpath "Installlanguage"} lcode]} {
- set regpath [join {HKEY_CLASSES_ROOT mime database rfc1766} "\\"]
- if {! [catch {registry get $regpath $lcode} lng]} {
- set l [string first ";" $lng]
- if {$l > 0} {
- incr l -1
- set lng [string range $lng 0 $l]
- }
- set ::env(LANG) $lng
- # tk_messageBox -message "Language $lng in registry found"
- }
- }
- }
- }
-}
+### initialize some globals ###
-# inside tcl, just load the message catalogs (all languages)
-package require msgcat
-namespace import msgcat::mc
-::msgcat::mcload [file join $::instroot "tlpkg" "translations"]
+# perl installer process id
+set ::perlpid 0
-if {$::tcl_platform(os) eq "Darwin"} {
- # avoid warnings 'tar: Failed to set default locale'
- set ::env(LC_ALL) "en_US.UTF-8"
-}
-proc __ {s args} {return [::msgcat::mc $s {*}$args]}
+set ::out_log {}; # list of strings
set ::perlbin "perl"
if {$::tcl_platform(platform) eq "windows"} {
@@ -139,6 +61,9 @@ if {$::tcl_platform(platform) eq "windows"} {
### procedures, mostly organized bottom-up ###
+# the procedures which provide the menu with the necessary backend data,
+# i.e. read_descs, read_vars and read_menu_data, are defined near the end.
+
set clock0 [clock milliseconds]
set profiling 0
proc show_time {s} {
@@ -147,15 +72,6 @@ proc show_time {s} {
}
}
-proc get_stacktrace {} {
- set level [info level]
- set s ""
- for {set i 1} {$i < $level} {incr i} {
- append s [format "Level %u: %s\n" $i [info level $i]]
- }
- return $s
-} ; # get_stacktrace
-
# for debugging frontend-backend communication:
# write to a logfile which is shared with the backend.
# both parties open, append and close every time.
@@ -174,31 +90,6 @@ proc dblog {s} {
close $db
}
-# dummy translation function
-#proc _ {fmt args} {return [format $fmt {*}$args]}
-
-# what exit procs do we need?
-# - plain error exit with messagebox and stacktrace
-# - plain messagebox exit
-# - showing log output, maybe with appended message,
-# use log toplevel for lengthy output
-# is closing the pipe $::inst guaranteed to kill perl? It should be
-
-proc err_exit {{mess ""}} {
- if {$mess eq ""} {set mess [__ "Error"]}
- append mess "\n" [get_stacktrace]
- tk_messageBox -icon error -message $mess
- # kill perl process, just in case
- if $::perlpid {
- if {$::tcl_platform(platform) eq "unix"} {
- exec -ignorestderr "kill" $::perlpid
- } else {
- exec -ignorestderr "taskkill" "/pid" $::perlpid
- }
- }
- exit
-} ; # err_exit
-
proc maybe_print_welcome {} {
# if the last non-empty line was "All done", then installation is completed.
# otherwise, it was help output or an interrupted installation.
@@ -290,72 +181,6 @@ proc read_line_cb {} {
}
}; # read_line_cb
-# general gui utilities
-
-# width of '0', as a rough estimate of average character width
-# assume height == width*2
-set ::cw [font measure TkTextFont "0"]
-
-# unicode symbols as fake checkboxes in ttk::treeview widgets
-proc mark_sym {mrk} {
- if $mrk {
- return "\u25A3" ; # 'white square containing black small square'
- } else {
- return "\u25A1" ; # 'white square'
- }
-} ; # mark_sym
-
-proc ppack {wdg args} { ; # pack command with padding
- pack $wdg {*}$args -padx 3 -pady 3
-}
-
-proc pgrid {wdg args} { ; # grid command with padding
- grid $wdg {*}$args -padx 3 -pady 3
-}
-
-# start new toplevel with settings appropriate for a dialog
-proc create_dlg {wnd {p .}} {
- catch {destroy $wnd} ; # no error if it does not exist
- toplevel $wnd -class Dialog
- wm withdraw $wnd
- if [winfo viewable $p] {wm transient $wnd $p}
- if $::plain_unix {wm attributes $wnd -type dialog}
- wm protocol $wnd WM_DELETE_WINDOW {destroy $wnd}
-}
-
-# Place a dialog centered wrt its parent.
-# If its geometry is somehow not yet available,
-# its upperleft corner will be centered.
-
-proc place_dlg {wnd {p "."}} {
- set g [wm geometry $p]
- scan $g "%dx%d+%d+%d" pw ph px py
- set hcenter [expr {$px + $pw / 2}]
- set vcenter [expr {$py + $ph / 2}]
- set g [wm geometry $wnd]
- set wh [winfo reqheight $wnd]
- set ww [winfo reqwidth $wnd]
- set wx [expr {$hcenter - $ww / 2}]
- if {$wx < 0} { set wx 0}
- set wy [expr {$vcenter - $wh / 2}]
- if {$wy < 0} { set wy 0}
- wm geometry $wnd [format "+%d+%d" $wx $wy]
- wm state $wnd normal
- wm attributes $wnd -topmost
- raise $wnd $p
- tkwait visibility $wnd
- focus $wnd
- grab set $wnd
-} ; # place_dlg
-
-# place dialog answer in ::dialog_ans, raise parent, close dialog
-proc end_dlg {ans wnd {p "."}} {
- set ::dialog_ans $ans
- raise $p
- wm withdraw $wnd
- destroy $wnd
-} ; # end_dlg
-
##############################################################
##### special-purpose uses of main window: splash, log #####
@@ -370,6 +195,7 @@ proc make_splash {} {
label .image -image tlimage -background white
pack .image -in .white
}
+
# wallpaper
pack [ttk::frame .bg -padding 3] -fill both -expand 1
@@ -442,165 +268,6 @@ proc log_exit {{mess ""}} {
#############################################################
-##### directories #####
-
-set sep [file separator]
-
-# slash flipping
-proc forward_slashify {s} {
- regsub -all {\\} $s {/} r
- return $r
-}
-proc native_slashify {s} {
- if {$::tcl_platform(platform) eq "windows"} {
- regsub -all {/} $s {\\} r
- } else {
- regsub -all {\\} $s {/} r
- }
- return $r
-}
-
-# unix: choose_dir replacing native directory browser
-
-if {$::tcl_platform(platform) ne "windows"} {
-
- # Based on the tcl/tk widget demo.
- # Also for MacOS, because we want to see /usr.
- # For windows, the native browser widget is better.
-
- ## Code to populate a single directory node
- proc populateTree {tree node} {
- if {[$tree set $node type] ne "directory"} {
- set type [$tree set $node type]
- return
- }
- $tree delete [$tree children $node]
- foreach f [lsort [glob -nocomplain -directory $node *]] {
- set type [file type $f]
- if {$type eq "directory"} {
- $tree insert $node end \
- -id $f -text [file tail $f] -values [list $type]
- # Need at least one child to make this node openable,
- # will be deleted when actually populating this node
- $tree insert $f 0 -text "dummy"
- }
- }
- # Stop this code from rerunning on the current node
- $tree set $node type processedDirectory
- }
-
- proc choose_dir {initdir {parent .}} {
-
- create_dlg .browser $parent
- wm title .browser [__ "Browse..."]
-
- # wallpaper
- pack [ttk::frame .browser.bg -padding 3] -fill both -expand 1
- ## Create the tree and set it up
- pack [ttk::frame .browser.fr0] -in .browser.bg -fill both -expand 1
- set tree [ttk::treeview .browser.tree \
- -columns {type} -displaycolumns {} -selectmode browse \
- -yscroll ".browser.vsb set"]
- .browser.tree column 0 -minwidth 500 -stretch 0
- ttk::scrollbar .browser.vsb -orient vertical -command "$tree yview"
- # hor. scrolling does not work, but toplevel and widget are resizable
- $tree heading \#0 -text "/"
- $tree insert {} end -id "/" -text "/" -values [list "directory"]
-
- populateTree $tree "/"
- bind $tree <<TreeviewOpen>> {
- populateTree %W [%W focus]
- }
- bind $tree <ButtonRelease-1> {
- .browser.tree heading \#0 -text [%W focus]
- }
-
- ## Arrange the tree and its scrollbar in the toplevel
- # horizontal scrolling does not work.
- # possible solution: very wide treeview in smaller paned window
- # (may as well use pack in the absence of a horizontal scrollbar)
- grid $tree .browser.vsb -sticky nsew -in .browser.fr0
- grid columnconfigure .browser.fr0 0 -weight 1
- grid rowconfigure .browser.fr0 0 -weight 1
-
- # ok and cancel buttons
- pack [ttk::frame .browser.fr1] -in .browser.bg -fill x -expand 1
- ppack [ttk::button .browser.ok -text [__ "Ok"]] \
- -in .browser.fr1 -side right
- ppack [ttk::button .browser.cancel -text [__ "Cancel"]] \
- -in .browser.fr1 -side right
- .browser.ok configure -command {
- set ::dialog_ans [.browser.tree focus]
- destroy .browser
- }
- .browser.cancel configure -command {
- set ::dialog_ans ""
- destroy .browser
- }
- unset -nocomplain ::dialog_ans
-
- # navigate tree to $initdir
- set chosenDir {}
- foreach d [file split [file normalize $initdir]] {
- set nextdir [file join $chosenDir $d]
- if [file isdirectory $nextdir] {
- if {! [$tree exists $nextdir]} {
- $tree insert $chosenDir end -id $nextdir \
- -text $d -values [list "directory"]
- }
- populateTree $tree $nextdir
- set chosenDir $nextdir
- } else {
- break
- }
- }
- $tree see $chosenDir
- $tree selection set [list $chosenDir]
- $tree focus $chosenDir
- $tree heading \#0 -text $chosenDir
-
- place_dlg .browser $parent
- tkwait window .browser
- return $::dialog_ans
- }; # choose_dir
-
-}; # if not windows
-
-
-# browse for a directory and store in entry- or label widget $w
-proc dirbrowser2widget {w} {
- set wclass [winfo class $w]
- if {$wclass eq "Entry" || $wclass eq "TEntry"} {
- set is_entry 1
- } elseif {$wclass eq "Label" || $wclass eq "TLabel"} {
- set is_entry 0
- } else {
- err_exit "browse2widget invoked with unsupported widget class $wclass"
- }
- if $is_entry {
- set retval [$w get]
- } else {
- set retval [$w cget -text]
- }
- if {$::tcl_platform(platform) eq "unix"} {
- set retval [choose_dir $retval [winfo parent $w]]
- } else {
- set retval [tk_chooseDirectory \
- -initialdir $retval -title [__ "Select or type"]]
- }
- if {$retval eq ""} {
- return 0
- } else {
- if {$wclass eq "Entry" || $wclass eq "TEntry"} {
- $w delete 0 end
- $w insert 0 $retval
- } else {
- $w configure -text $retval
- }
- return 1
- }
-}
-
##########################################################
##### installation root #####
@@ -678,7 +345,7 @@ proc toggle_rel {} {
update_full_path
} ; # toggle_rel
-proc canonical_local {} {
+proc commit_canonical_local {} {
if {[file tail $::vars(TEXDIR)] eq $::release_year} {
set l [file dirname $::vars(TEXDIR)]
} else {
@@ -694,7 +361,7 @@ proc commit_root {} {
set ::vars(TEXDIR) [forward_slashify [.tltd.path_l cget -text]]
set ::vars(TEXMFSYSVAR) "$::vars(TEXDIR)/texmf-var"
set ::vars(TEXMFSYSCONFIG) "$::vars(TEXDIR)/texmf-var"
- canonical_local
+ commit_canonical_local
if {$::vars(instopt_portable)} reset_personal_dirs
destroy .tltd
@@ -726,9 +393,11 @@ proc texdir_setup {} {
# path components, as labels
incr rw
pgrid [ttk::label .tltd.prefix_l] -in .tltd.fr1 -row $rw -column 0
- pgrid [ttk::label .tltd.sep0_l -text $::sep] -in .tltd.fr1 -row $rw -column 1
+ pgrid [ttk::label .tltd.sep0_l -text [file separator]] \
+ -in .tltd.fr1 -row $rw -column 1
pgrid [ttk::label .tltd.name_l] -in .tltd.fr1 -row $rw -column 2
- pgrid [ttk::label .tltd.sep1_l -text $::sep] -in .tltd.fr1 -row $rw -column 3
+ pgrid [ttk::label .tltd.sep1_l -text [file separator]] \
+ -in .tltd.fr1 -row $rw -column 3
pgrid [ttk::label .tltd.rel_l -width 6] \
-in .tltd.fr1 -row $rw -column 4
# corresponding buttons
@@ -792,7 +461,7 @@ proc texdir_setup {} {
if {$initdir eq "" || \
($::tcl_platform(platform) eq "windows" && \
[string index $initdir end] eq ":")} {
- append initdir $::sep
+ append initdir [file separator]
}
.tltd.prefix_l configure -text $initdir
update_full_path
@@ -836,22 +505,22 @@ proc edit_dir {d} {
# below, ensure that $v is evaluated while the interface is built:
# the variable won't be available to the button callback
# quoted string rather than curly braces
- ttk::button .td.ok -text [__ "Ok"] -command \
- "set ::vars($d) [forward_slashify [.td.e get]]; end_dlg 1 .td ."
+ ttk::button .td.ok -text [__ "Ok"] -command {end_dlg [.td.e get] .td}
ppack .td.ok -in .td.f -side right
- ttk::button .td.cancel -text [__ "Cancel"] -command {end_dlg 0 .td .}
+ ttk::button .td.cancel -text [__ "Cancel"] -command {end_dlg "" .td}
ppack .td.cancel -in .td.f -side right
place_dlg .td .
tkwait window .td
- #tk_messageBox -message $::dialog_ans
- #return $::dialog_ans
+ if {$::dialog_ans ne ""} {set ::vars($d) $::dialog_ans}
}
proc toggle_port {} {
set ::vars(instopt_portable) [expr {!$::vars(instopt_portable)}]
- .dirportvl configure -text [yes_no $::vars(instopt_portable)]
- canonical_local
+ set yn [yes_no $::vars(instopt_portable)]
+ .dirportvl configure -text $yn
+# .dirportvl configure -text [yes_no $::vars(instopt_portable)]
+ commit_canonical_local
if {$::vars(instopt_portable)} {
set ::vars(TEXMFHOME) $::vars(TEXMFLOCAL)
set ::vars(TEXMFVAR) $::vars(TEXMFSYSVAR)
@@ -879,6 +548,7 @@ proc toggle_port {} {
}
} else {
set ::vars(instopt_adjustpath) 0
+ .symspec state disabled
.pathb state disabled
.pathl configure -foreground $::gry
}
@@ -910,6 +580,7 @@ proc toggle_port {} {
} else {
# set ::vars(instopt_adjustpath) 0
# leave false, still depends on symlink paths
+ .symspec state !disabled
if [dis_enable_symlink_option] {
.pathb state !disabled
.pathl configure -foreground $::blk
@@ -926,7 +597,7 @@ proc show_stats {} {
# n. of additional platforms
if [winfo exists .binlm] {
if {$::vars(n_systems_selected) < 2} {
- .binlm configure -text "None"
+ .binlm configure -text [__ "None"]
} else {
.binlm configure -text [expr {$::vars(n_systems_selected) - 1}]
}
@@ -938,6 +609,9 @@ proc show_stats {} {
$::vars(n_collections_selected) \
$::vars(n_collections_available)]
}
+ if [winfo exists .schml] {
+ .schml configure -text [__ $::scheme_descs($::vars(selected_scheme))]
+ }
# diskspace: can use -textvariable here
# paper size
}; # show_stats
@@ -1016,14 +690,12 @@ proc select_binaries {} {
# ok, cancel buttons
pack [ttk::frame .tlbin.buts] -in .tlbin.bg -expand 1 -fill x
ttk::button .tlbin.ok -text [__ "Ok"] -command \
- {save_bin_selections; update_vars; end_dlg 1 .tlbin .}
+ {save_bin_selections; update_vars; end_dlg 1 .tlbin}
ppack .tlbin.ok -in .tlbin.buts -side right
- ttk::button .tlbin.cancel -text [__ "Cancel"] -command {end_dlg 0 .tlbin .}
+ ttk::button .tlbin.cancel -text [__ "Cancel"] -command {end_dlg 0 .tlbin}
ppack .tlbin.cancel -in .tlbin.buts -side right
place_dlg .tlbin .
- tkwait window .tlbin
- return $::dialog_ans
}; # select_binaries
#############################################################
@@ -1067,15 +739,13 @@ proc select_scheme {} {
}
update_vars
show_stats
- end_dlg 1 .tlschm .
+ end_dlg 1 .tlschm
}
ppack .tlschm.ok -in .tlschm.buts -side right
- ttk::button .tlschm.cancel -text [__ "Cancel"] -command {end_dlg 0 .tlschm .}
+ ttk::button .tlschm.cancel -text [__ "Cancel"] -command {end_dlg 0 .tlschm}
ppack .tlschm.cancel -in .tlschm.buts -side right
place_dlg .tlschm .
- tkwait window .tlschm
- return $::dialog_ans
}; # select_scheme
#############################################################
@@ -1109,11 +779,11 @@ proc save_coll_selections {} {
}; # save_coll_selections
proc select_collections {} {
- # 2017: more than 40 collections
- # The tcl installer acquires collections from the database file,
+ # 2018: more than 40 collections
+ # The tcl installer acquires collections from install-menu-extl.pl,
# but install-tl also has an array of collections.
- # Use treeview for checkbox column and collection descriptions
- # rather than names.
+ # Use treeview for checkbox column and display of
+ # collection descriptions rather than names.
# buttons: select all, select none, ok, cancel
# should some collections be excluded? Check install-menu-* code.
create_dlg .tlcoll .
@@ -1185,15 +855,13 @@ proc select_collections {} {
}
ppack .tlcoll.none -in .tlcoll.butf -side left
ttk::button .tlcoll.ok -text [__ "Ok"] -command \
- {save_coll_selections; end_dlg 1 .tlcoll .}
+ {save_coll_selections; end_dlg 1 .tlcoll}
ppack .tlcoll.ok -in .tlcoll.butf -side right
- ttk::button .tlcoll.cancel -text [__ "Cancel"] -command {end_dlg 0 .tlcoll .}
+ ttk::button .tlcoll.cancel -text [__ "Cancel"] -command {end_dlg 0 .tlcoll}
ppack .tlcoll.cancel -in .tlcoll.butf -side right
place_dlg .tlcoll .
wm resizable .tlcoll 0 0
- tkwait window .tlcoll
- return $::dialog_ans
}; # select_collections
##################################################
@@ -1326,15 +994,13 @@ if {$::tcl_platform(platform) ne "windows"} {
# ok, cancel
pack [ttk::frame .edsyms.fr1] -expand 1 -fill both
ppack [ttk::button .edsyms.ok -text [__ "Ok"] -command {
- commit_sym_entries; end_dlg 1 .edsyms .}] -in .edsyms.fr1 -side right
+ commit_sym_entries; end_dlg 1 .edsyms}] -in .edsyms.fr1 -side right
ppack [ttk::button .edsyms.cancel -text [__ "Cancel"] -command {
- end_dlg 0 .edsyms .}] -in .edsyms.fr1 -side right
+ end_dlg 0 .edsyms}] -in .edsyms.fr1 -side right
check_sym_entries
place_dlg .edsyms .
- tkwait window .edsyms
- return
}
}
@@ -1486,7 +1152,7 @@ proc run_menu {} {
incr rw
pgrid [ttk::label .schmll -text [__ "Scheme:"]] \
-in .selsf -row $rw -column 0 -sticky w
- pgrid [ttk::label .schml -textvariable ::vars(selected_scheme)] \
+ pgrid [ttk::label .schml -text ""] \
-in .selsf -row $rw -column 1 -sticky w
pgrid [ttk::button .schmb -text [__ "Change"] -command select_scheme] \
-in .selsf -row $rw -column 2 -sticky e
@@ -1511,7 +1177,7 @@ proc run_menu {} {
pgrid .size_req -in $curf -row $rw -column 1 -sticky w
########################################################
- # right: options
+ # right side: options
# 3 columns. Column 1 can be merged with either 0 or 2.
if $::advanced {
@@ -1907,7 +1573,7 @@ proc main_prog {} {
} else {
log_exit
}
-}
+}; # main_prog
file delete $::dblfile
diff --git a/Master/tlpkg/installer/install-tl-windows.cmd b/Master/tlpkg/installer/install-tl-windows.cmd
index b9ece1c5e87..ab1e22f8295 100644
--- a/Master/tlpkg/installer/install-tl-windows.cmd
+++ b/Master/tlpkg/installer/install-tl-windows.cmd
@@ -43,19 +43,11 @@ set tcl=yes
set args=
goto rebuildargs
-rem check for a gui- and lang arguments
-rem handle them here and do not pass them on to perl or tcl.
+rem check for a gui argument
+rem handle it here and do not pass it on to perl or tcl.
rem cmd.exe converts '=' to a space:
rem '-parameter=value' becomes '-parameter value': two arguments
-rem code block for language argument
-:dolang
-shift
-if "%0" == "" goto nomoreargs
-set LANG=%0
-set LC_ALL=
-goto rebuildargs
-
rem code block for gui argument
:dogui
if x%1 == x (
@@ -93,9 +85,6 @@ rem loop for argument scanning
shift
if x%0 == x goto nomoreargs
set p=%0
-if %p% == --lang goto dolang
-if %p% == -lang goto dolang
-
if %p% == -print-platform set tcl=no
if %p% == --print-platform set tcl=no
if %p% == -version set tcl=no
@@ -128,7 +117,6 @@ rem the LANG environment variable should set the tcl default language.
rem Since reg.exe may be disabled by e.g. company policy,
rem tcl will yet consult the registry if LANG is not set,
rem although under some circumstances this may cause a long delay.
-goto endreg
if %tcl% == no goto endreg
if not x%LANG% == x goto endreg
rem reg.exe runnable by user?
diff --git a/Master/tlpkg/installer/install-tl.sh b/Master/tlpkg/installer/install-tl.sh
index 47bb03304dd..5dc1b2da7bd 100755
--- a/Master/tlpkg/installer/install-tl.sh
+++ b/Master/tlpkg/installer/install-tl.sh
@@ -1,4 +1,4 @@
-#! /bin/sh
+#!/bin/sh
# default: tcl gui or not
if test `uname -s` = Darwin; then
@@ -9,13 +9,10 @@ fi
# are there reasons not to use the tcl gui?
notcl=no
-args=''
-
unset wait_for_gui
-unset wait_for_lang
unset gui_set
-# We need "$@ syntax because some paramters may contain spaces.
+# We need "$@" syntax because some parameters may contain spaces.
# In order to make use of this syntax we must pass along ALL parameters.
for p in "$@"; do
# TODO: sanitize $p; abort if necessary
@@ -23,26 +20,22 @@ for p in "$@"; do
-tcl | --tcl)
if test $gui_set; then echo Gui set more than once; exit 1; fi
gui_set=1
- if test $wait_for_lang; then echo Language code expected; exit 1; fi
unset wait_for_gui
tcl=yes
;;
-print-platform | --print-platform | -version | --version)
- if test $wait_for_lang; then echo Language code expected; exit 1; fi
unset wait_for_gui
notcl=yes
;;
-gui | --gui)
if test $gui_set; then echo Gui set more than once; exit 1; fi
gui_set=1
- if test $wait_for_lang; then echo Language code expected; exit 1; fi
tcl=yes
wait_for_gui=1
;;
--gui=* | -gui=*)
if test $gui_set; then echo Gui set more than once; exit 1; fi
gui_set=1
- if test $wait_for_lang; then echo Language code expected; exit 1; fi
if test $p = -gui=text -o $p = --gui=text; then
tcl=no
else
@@ -51,27 +44,9 @@ for p in "$@"; do
unset wait_for_gui
;;
-no-gui | --no-gui)
- if test $wait_for_lang; then echo Language code expected; exit 1; fi
unset wait_for_gui
notcl=yes
;;
- -lang | --lang)
- if test $wait_for_lang; then echo Language code expected; exit 1; fi
- unset wait_for_gui
- wait_for_lang=1
- ;;
- -lang=*)
- if test $wait_for_lang; then echo Language code expected; exit 1; fi
- unset wait_for_gui
- LANG=$p
- LANG=${LANG#-lang=}
- ;;
- --lang=*)
- if test $wait_for_lang; then echo Language code expected; exit 1; fi
- unset wait_for_gui
- LANG=$p
- LANG=${LANG#--lang=}
- ;;
*)
if test $wait_for_gui; then
if test $p = text; then
@@ -81,10 +56,6 @@ for p in "$@"; do
fi
unset wait_for_gui
fi
- if test $wait_for_lang; then
- LANG=$p
- unset wait_for_lang
- fi
;;
esac
done
@@ -92,21 +63,16 @@ if test $notcl = yes; then
tcl=no
fi
-export LANG
-LC_MESSAGES=$LANG
-export LC_MESSAGES
-unset LC_ALL
-
# silence perl locale warnings
PERL_BADLANG=0
export PERL_BADLANG
# We can safely pass all original parameters to perl:
# In install-tl[.pl], from_ext_gui will overrule the gui parameter.
-# The lang parameter will not come into play in either perl or tcl.
+# The lang parameter will be handled by tcl and not come into play in perl
if test "$tcl" = "yes"; then
- exec wish `dirname $0`/install-tl-gui.tcl -- "$@"
+ wish `dirname $0`/install-tl-gui.tcl -- "$@" &
else
- exec perl `dirname $0`/../../install-tl "$@"
+ perl `dirname $0`/../../install-tl "$@"
fi
diff --git a/Master/tlpkg/translations/nl.msg b/Master/tlpkg/translations/nl.msg
index 8ffc72e1481..dc45640c91f 100644
--- a/Master/tlpkg/translations/nl.msg
+++ b/Master/tlpkg/translations/nl.msg
@@ -1,5 +1,5 @@
-set ::msgcat::header "Project-Id-Version: TeX Live translation\nReport-Msgid-Bugs-To: tex-live@tug.org\nPOT-Creation-Date: 2018-09-28 02:23+0200\nPO-Revision-Date: 2018-08-24 12:59+0200\nLast-Translator: Siep Kroonenberg <siepo@cybercomm.nl>\nLanguage-Team: TL Translation Team <tex-live@tug.org>\nLanguage: nl\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nX-Poedit-SourceCharset: UTF-8\nX-Generator: Poedit 2.0.6\n"
-::msgcat::mcset nl "Installation process" "Installatie"
+set ::msgcat::header "Project-Id-Version: TeX Live translation\nReport-Msgid-Bugs-To: tex-live@tug.org\nPO-Revision-Date: 2018-10-19 20:30+0200\nLast-Translator: Siep Kroonenberg <siepo@cybercomm.nl>\nLanguage-Team: TL Translation Team <tex-live@tug.org>\nLanguage: nl\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nX-Poedit-SourceCharset: UTF-8\nX-Generator: Poedit 2.0.6\n"
+::msgcat::mcset nl "Installation process" "Installatie-proces"
::msgcat::mcset nl "Cancel" "Afbreken"
::msgcat::mcset nl "Scroll back to inspect warnings" "Schuif terug om waarschuwingen te inspekteren"
::msgcat::mcset nl "Finish" "Sluit af"
@@ -33,12 +33,12 @@ set ::msgcat::header "Project-Id-Version: TeX Live translation\nReport-Msgid-Bug
::msgcat::mcset nl "Could not load remote TeX Live Database:" "Kon de online TeX Live database niet laden:"
::msgcat::mcset nl "Please go back and select a different mirror." "Ga terug en kies een andere mirror."
::msgcat::mcset nl "The TeX Live versions of the local installation\nand the repository being accessed are not compatible:\n local: %s\nrepository: %s" "De TeX Live versies van de lokale installatie\nen van de gebruikte installatie-bron zijn niet compatibel:\n lokaal: %s\n installatie-bron:%s"
-::msgcat::mcset nl "Destination folder:" "Bestemmings-folder"
+::msgcat::mcset nl "Destination folder:" "Bestemmings-folder:"
::msgcat::mcset nl "Change" "Wijzig"
::msgcat::mcset nl "The destination folder will contain the installation.\nIt is strongly recommended to keep the year as the last component." "De bestemmings-folder zal TeX Live bevatten.\nHet wordt sterk aangeraden het jaar aan te houden als laatste component."
-::msgcat::mcset nl "disk space required:" "benodigde schijfruimte"
+::msgcat::mcset nl "disk space required:" "benodigde schijfruimte:"
::msgcat::mcset nl "(default not allowed or not writable - please change!)" "(default niet toegestaan of niet schrijfbaar - aub wijzigen!)"
-::msgcat::mcset nl "This screen allows you to configure some options" "Met dit scherm kunt u enkele opties instellen."
+::msgcat::mcset nl "This screen allows you to configure some options" "Met dit scherm kunt u enkele opties instellen"
::msgcat::mcset nl "We are ready to install TeX Live %s.\nThe following settings will be used.\nIf you want to change something please go back,\notherwise press the \"Install\" button." "We zijn gereed om TeX Live %s te installeren.\nDe volgende instellingen worden gebruikt.\nGa terug als u iets wilt wijzigen,\nzo niet, klik dan op de \"Installeren\" knop."
::msgcat::mcset nl "Yes" "Ja"
::msgcat::mcset nl "No" "Nee"
@@ -84,11 +84,11 @@ set ::msgcat::header "Project-Id-Version: TeX Live translation\nReport-Msgid-Bug
::msgcat::mcset nl "Right-click install-tl-advanced and select \"run as administrator\"\n if you want to install for all users." "Rechts-klik install-tl-advanced en selekteer \"Als administrator uitvoeren\"\nals u voor alle gebruikers wilt installeren."
::msgcat::mcset nl "Change variable value" "Nieuwe waarde"
::msgcat::mcset nl "Enter path for %s (use ~ for %s)" "Pad voor %s (gebruik ~ voor %s)"
-::msgcat::mcset nl "custom selection of collections" "Eigen selektie van collekties"
+::msgcat::mcset nl "custom selection of collections" "eigen selektie van collekties"
::msgcat::mcset nl "Select the collections to be installed" "Kies te installeren collecties"
::msgcat::mcset nl "Select All" "Kies alles"
::msgcat::mcset nl "Deselect All" "Kies niets"
-::msgcat::mcset nl "create symlinks in standard directories" "Maak symlinks naar standaard-folders"
+::msgcat::mcset nl "create symlinks in standard directories" "maak symlinks naar standaard-folders"
::msgcat::mcset nl "binaries to" "programma's naar"
::msgcat::mcset nl "manpages to" "manpages naar"
::msgcat::mcset nl "info to" "info naar"
@@ -103,10 +103,10 @@ set ::msgcat::header "Project-Id-Version: TeX Live translation\nReport-Msgid-Bug
::msgcat::mcset nl "This may take some time, please be patient ..." "Dit kan even duren; even geduld aub..."
::msgcat::mcset nl "... done loading" "... klaar met laden"
::msgcat::mcset nl "You don't have permissions to change the installation in any way;\nspecifically, the directory %s is not writable.\nPlease run this program as administrator, or contact your local admin.\n\nMost buttons will be disabled." "U heeft geen rechten om de installatie op enige manier te wijzigen;\nin het bijzonder heeft u geen schrijfrechten voor de %s folder.\nVoer dit programma uit als administrator of neem contact op\nmet systeembeheer.\n\nDe meeste knoppen zijn gedeactiveerd."
-::msgcat::mcset nl "Repository" "installatie-bron"
+::msgcat::mcset nl "Repository" "Installatie-bron"
::msgcat::mcset nl "Loaded:" "Geladen:"
-::msgcat::mcset nl "none" "Geen"
-::msgcat::mcset nl "Load default" "Laad standaard installatie-bron."
+::msgcat::mcset nl "none" "geen"
+::msgcat::mcset nl "Load default" "Laad standaard installatie-bron"
::msgcat::mcset nl "multiple repositories" "meerdere installatie-bronnen"
::msgcat::mcset nl "Default:" "Standaard:"
::msgcat::mcset nl "Display configuration" "Laat instellingen zien"
@@ -118,7 +118,7 @@ set ::msgcat::header "Project-Id-Version: TeX Live translation\nReport-Msgid-Bug
::msgcat::mcset nl "Category" "Categorie"
::msgcat::mcset nl "packages" "pakketten"
::msgcat::mcset nl "collections" "collecties"
-::msgcat::mcset nl "schemes" "Schema's"
+::msgcat::mcset nl "schemes" "schema's"
::msgcat::mcset nl "Match" "Match"
::msgcat::mcset nl "descriptions" "beschrijvingen"
::msgcat::mcset nl "filenames" "bestandsnamen"
@@ -140,7 +140,7 @@ set ::msgcat::header "Project-Id-Version: TeX Live translation\nReport-Msgid-Bug
::msgcat::mcset nl "Actions" "Akties"
::msgcat::mcset nl "Help" "Help"
::msgcat::mcset nl "Load default (from tlpdb) repository:" "Laad standaard (volgens tlpdb) installatie-bron:"
-::msgcat::mcset nl "Load cmd line repository:" "Laad cmd line installatie-bron."
+::msgcat::mcset nl "Load cmd line repository:" "Laad cmd line installatie-bron:"
::msgcat::mcset nl "Load standard net repository:" "Laad standaard online installatie-bron:"
::msgcat::mcset nl "Load other repository ..." "Laad andere bron ..."
::msgcat::mcset nl "General ..." "Algemeen ..."
@@ -165,7 +165,7 @@ set ::msgcat::header "Project-Id-Version: TeX Live translation\nReport-Msgid-Bug
::msgcat::mcset nl "Package:" "Pakket:"
::msgcat::mcset nl "Category:" "Categorie:"
::msgcat::mcset nl "Short description:" "Korte beschrijving:"
-::msgcat::mcset nl "Long description:" "Lange beschrijving;"
+::msgcat::mcset nl "Long description:" "Lange beschrijving:"
::msgcat::mcset nl "Installed:" "Ge\u00efnstalleerd:"
::msgcat::mcset nl "Local revision:" "Lokale revisie:"
::msgcat::mcset nl "Local Catalogue version:" "Versie lokale catalogus:"
@@ -173,8 +173,8 @@ set ::msgcat::header "Project-Id-Version: TeX Live translation\nReport-Msgid-Bug
::msgcat::mcset nl "Remote Catalogue version:" "Versie online catalogus:"
::msgcat::mcset nl "Keywords:" "Trefwoorden:"
::msgcat::mcset nl "Functionality:" "Funktionaliteit:"
-::msgcat::mcset nl "Primary characterization:" "Primaire omschrijving"
-::msgcat::mcset nl "Secondary characterization:" "Secundaire omschrijving"
+::msgcat::mcset nl "Primary characterization:" "Primaire omschrijving:"
+::msgcat::mcset nl "Secondary characterization:" "Secundaire omschrijving:"
::msgcat::mcset nl "Collection:" "Collectie:"
::msgcat::mcset nl "Warning: Catalogue versions might be lagging behind or be simply wrong." "Waarschuwing: Catalogus versies kunnen achterlopen of niet kloppen."
::msgcat::mcset nl "Depends:" "Hangt af van:"
@@ -187,7 +187,7 @@ set ::msgcat::header "Project-Id-Version: TeX Live translation\nReport-Msgid-Bug
::msgcat::mcset nl "Update the TeX Live Manager" "Werk TeX Live Manager bij"
::msgcat::mcset nl "Select platforms to support" "Keuze van te ondersteunen platforms"
::msgcat::mcset nl "Apply changes" "Voer de wijzigingen uit"
-::msgcat::mcset nl "General options" "Algemene opties:"
+::msgcat::mcset nl "General options" "Algemene opties"
::msgcat::mcset nl "Default package repository" "Standaard installatie-bron"
::msgcat::mcset nl "Create formats on installation" "Genereer formaten tijdens installatie"
::msgcat::mcset nl "Install macro/font sources" "Installeer bronbestanden voor macros/lettertypen"
@@ -197,18 +197,18 @@ set ::msgcat::header "Project-Id-Version: TeX Live translation\nReport-Msgid-Bug
::msgcat::mcset nl "Link destination for programs" "Doelfolder voor programma-symlinks"
::msgcat::mcset nl "Link destination for info docs" "Doelfolder voor symlinks info-bestanden"
::msgcat::mcset nl "Link destination for man pages" "Doelfolder voor symlinks man paginas"
-::msgcat::mcset nl "Create shortcuts on the desktop" "Maak snelkoppelingen op het bureaublad."
+::msgcat::mcset nl "Create shortcuts on the desktop" "Maak snelkoppelingen op het bureaublad"
::msgcat::mcset nl "Install for all users" "Installeer voor alle gebruikers"
-::msgcat::mcset nl "Load default repository:" "Laad standaard installatie-bron."
+::msgcat::mcset nl "Load default repository:" "Laad standaard installatie-bron:"
::msgcat::mcset nl "Paper options" "Papier instellingen"
::msgcat::mcset nl "Default paper for all" "Standaard papier-formaat voor alle"
::msgcat::mcset nl "a4" "a4"
::msgcat::mcset nl "Default paper for" "Standaard papier-formaat voor"
::msgcat::mcset nl "GUI Language" "GUI taal"
::msgcat::mcset nl "System default" "Systeem-instelling"
-::msgcat::mcset nl "Default language for GUI:" "Standaard-taal voor de GUI"
+::msgcat::mcset nl "Default language for GUI:" "Standaard-taal voor de GUI:"
::msgcat::mcset nl "Changes will take effect after restart" "Wijzigingen treden in werking na herstart"
-::msgcat::mcset nl "Choose directory" "Kies folder:"
+::msgcat::mcset nl "Choose directory" "Kies folder"
::msgcat::mcset nl "Edit default package repositories" "Wijzig de standaard installatie-bronnen voor pakketten"
::msgcat::mcset nl "Specify set of repositories to be used" "Kies de te gebruiken installatie-bronnen"
::msgcat::mcset nl "Delete" "Verwijder"
@@ -221,7 +221,7 @@ set ::msgcat::header "Project-Id-Version: TeX Live translation\nReport-Msgid-Bug
::msgcat::mcset nl "Select paper format for" "Selekteer papier-formaat voor"
::msgcat::mcset nl "keep arbitrarily many" "bewaar een onbeperkt aantal"
::msgcat::mcset nl "disable" "deactiveer"
-::msgcat::mcset nl "Loading of remote database failed." "Laden van online database mislukt"
+::msgcat::mcset nl "Loading of remote database failed." "Laden van online database mislukt."
::msgcat::mcset nl "Error message:" "Foutmelding:"
::msgcat::mcset nl "Installation" "Installatie"
::msgcat::mcset nl "Critical updates have been installed.\nProgram will terminate now.\nPlease restart if necessary." "Kern-onderdelen zijn bijgewerkt.\nHet programma zal nu afsluiten.\nHerstart indien nodig."
@@ -248,7 +248,6 @@ set ::msgcat::header "Project-Id-Version: TeX Live translation\nReport-Msgid-Bug
::msgcat::mcset nl "not verified" "niet geverifieerd"
::msgcat::mcset nl "Completed" "Klaar"
::msgcat::mcset nl "Running %s failed.\nPlease consult the log window for details." "%s is met een fout geeindigd.\nRaadpleeg het log venster voor details."
-::msgcat::mcset nl "Error" "Fout"
::msgcat::mcset nl "Welcome to TeX Live!" "Welkom bij TeX Live!"
::msgcat::mcset nl "See %s/index.html for links to documentation.\nThe TeX Live web site (http://tug.org/texlive/) contains any updates and corrections. TeX Live is a joint project of the TeX user groups around the world; please consider supporting it by joining the group best for you. The list of groups is available on the web at http://tug.org/usergroups.html." "Zie %s/index.html voor links naar documentatie.\nDe TeX Live web site (http://tug.org/texlive/) bevat\neventuele updates en correcties.\nTeX Live is een gezamenlijk projekt van TeX gebruikersgroepen wereldwijd;\noverweeg ondersteuning door lid te worden van zo'n groep.\nDe lijst van gebruikersgroepen staat op http://tug.org/usergroups.html."
::msgcat::mcset nl "Add %s/texmf-dist/doc/man to MANPATH.\nAdd %s/texmf-dist/doc/info to INFOPATH.\nMost importantly, add %s/bin/%s\nto your PATH for current and future sessions." "Voeg %s/texmf-dist/doc/man toe aan MANPATH.\nVoeg %s/texmf-dist/doc/info toe aan INFOPATH.\nEn bovenal, voeg %s/bin/%s\ntoe aan PATH voor huidige en toekomstige sessies."
@@ -256,16 +255,16 @@ set ::msgcat::header "Project-Id-Version: TeX Live translation\nReport-Msgid-Bug
::msgcat::mcset nl "Unexpected closed backend" "Achtergrond-proces onverwacht beeindigd"
::msgcat::mcset nl "TeX Live Installer" "TeX Live Installatie"
::msgcat::mcset nl "Loading..." "Laden..."
-::msgcat::mcset nl "Browse..." "Bladeren..."
-::msgcat::mcset nl "Select or type" "Kies of type"
::msgcat::mcset nl "Cannot be created or cannot be written to" "Kan niet worden aangemaakt of is niet schrijfbaar"
::msgcat::mcset nl "Directory name..." "Folder-naam..."
::msgcat::mcset nl "Change name (slashes not allowed)" "Wijzig naam (slashes niet toegestaan)"
::msgcat::mcset nl "No slashes allowed" "Slashes niet toegestaan"
::msgcat::mcset nl "TL release component highly recommended!\nAre you sure?" "TL jaar component sterk aanbevolen!\nWeet u het zeker?"
::msgcat::mcset nl "Installation root" "Hoofd TeX-folder"
+::msgcat::mcset nl "Browse..." "Bladeren..."
::msgcat::mcset nl "Toggle year" "Jaar component aan/uit"
::msgcat::mcset nl "Localized directory names will be replaced by their real names" "Aangepaste folder-namen worden vervangen door hun werkelijke namen"
+::msgcat::mcset nl "'~' equals %s, e.g. %s" "'~' betekent %s, bijvoorbeeld %s"
::msgcat::mcset nl "Cannot deselect own platform" "Eigen platform is altijd geselecteerd"
::msgcat::mcset nl "Binaries" "Binaries"
::msgcat::mcset nl "Schemes" "Schema's"
@@ -274,7 +273,7 @@ set ::msgcat::header "Project-Id-Version: TeX Live translation\nReport-Msgid-Bug
::msgcat::mcset nl "Other collections" "Andere collecties"
::msgcat::mcset nl "Warning. Not all configured directories are writable!" "Waarschuwing. Niet alle geconfigureerde folders zijn schrijfbaar!"
::msgcat::mcset nl "Symlinks" "Symlinks"
-::msgcat::mcset nl "browse..." "Bladeren..."
+::msgcat::mcset nl "browse..." "bladeren..."
::msgcat::mcset nl "Man pages" "Man pagina's"
::msgcat::mcset nl "Info pages" "Info pagina's"
::msgcat::mcset nl "TeX Live %s Installer" "TeX Live %s Installatie"
@@ -294,12 +293,104 @@ set ::msgcat::header "Project-Id-Version: TeX Live translation\nReport-Msgid-Bug
::msgcat::mcset nl "Desktop integration" "Bureaublad-integratie"
::msgcat::mcset nl "File associations" "Koppeling bestandsformaten"
::msgcat::mcset nl "Specify directories" "Specificeer folders"
+::msgcat::mcset nl "Select or type" "Kies of type"
+::msgcat::mcset nl "ok" "ok"
+::msgcat::mcset nl "yes" "ja"
+::msgcat::mcset nl "no" "nee"
+::msgcat::mcset nl "cancel" "afbreken"
+::msgcat::mcset nl "IDLE" "INACTIEF"
+::msgcat::mcset nl "BUSY" "BEZIG"
+::msgcat::mcset nl "Running" "Bezig"
+::msgcat::mcset nl "Idle" "Inactief"
+::msgcat::mcset nl "Needs updating" "Moet worden bijgewerkt"
+::msgcat::mcset nl "Up to date" "Up to date"
+::msgcat::mcset nl "Unknown" "Onbekend"
+::msgcat::mcset nl "A configured repository is unavailable." "Een ingestelde installatie-bron is niet beschikbaar."
+::msgcat::mcset nl "Output" "Uitvoer"
+::msgcat::mcset nl "Errors" "Fouten"
+::msgcat::mcset nl "%s not a repository" "%s is geen installatie-bron"
+::msgcat::mcset nl "Main Repository" "Primaire installatie-bron"
+::msgcat::mcset nl "Current:" "Huidig:"
+::msgcat::mcset nl "New" "Nieuw"
+::msgcat::mcset nl "Any CTAN mirror" "Willekeurige CTAN mirror"
+::msgcat::mcset nl "Specific mirror..." "Specifieke CTAN mirror..."
+::msgcat::mcset nl "Local directory..." "Lokale folder..."
+::msgcat::mcset nl "Save and Load" "Opslaan en laden"
+::msgcat::mcset nl "Abort" "Afbreken"
+::msgcat::mcset nl "Additional repositories" "Externe installatie-bronnen"
+::msgcat::mcset nl "Add tlcontrib" "Voeg tlcontrib toe"
+::msgcat::mcset nl "Packages which cannot be part of TeX Live" "Pakketten die geen onderdeel kunnen uitmaken van TeX Live"
+::msgcat::mcset nl "Tag (optional)" "Kenteken (indien gewenst)"
+::msgcat::mcset nl "Add" "Toevoegen"
+::msgcat::mcset nl "Cannot remove own platform %s" "Eigen platform %s is altijd geselecteerd"
+::msgcat::mcset nl "platform" "platform"
+::msgcat::mcset nl "Apply and close" "Toepassen en sluiten"
+::msgcat::mcset nl "Restore %s to revision %s?" "%s terugdraaien naar %s?"
+::msgcat::mcset nl "No backups configured" "Geen reserve-kopie\u00ebn geconfigureerd"
+::msgcat::mcset nl "No backup directory defined" "Geen folder voor reserve-kopie\u00ebn gedefinieerd"
+::msgcat::mcset nl "Backup directory %s does not exist" "Folder %s voor reserve-kopie\u00ebn bestaat niet"
+::msgcat::mcset nl "No packages in backup directory %s" "Geen pakketten in folder %s voor reserve-kopie\u00ebn"
+::msgcat::mcset nl "Restore from backup" "Herinstalleer vanaf reserve-kopie"
+::msgcat::mcset nl "Package" "Pakket"
+::msgcat::mcset nl "Revision" "Revisie"
+::msgcat::mcset nl "Restore all" "Herstel alle"
+::msgcat::mcset nl "Nothing to do!" "Niets te doen!"
+::msgcat::mcset nl "Update self first!" "Eerst zelf bijwerken!"
+::msgcat::mcset nl "Already installed: %s" "Al ge\u00efnstalleerd: %s"
+::msgcat::mcset nl "Also updating dependencies\n\n%s?" "Ook afhankelijkheden\n%s\nbijwerken?"
+::msgcat::mcset nl "Updating hard dependencies %s anyway. Continue?" "Harde afhankelijkheden %s worden in elk geval bijgewerkt. Doorgaan?"
+::msgcat::mcset nl "Skipped because not installed: %s" "Niet g\u00efnstalleerd: %s\novergeslagen"
+::msgcat::mcset nl "Skipped because already up to date: %s" "Overgeslagen: %s; al up to date"
+::msgcat::mcset nl "Also remove dependencies\n\n%s?" "Verwijder ook afhankelijkheden\n%s?"
+::msgcat::mcset nl "Removing hard dependencies %s anyway. Continue?" "Harde afhankelijkheden %s worden in elk geval verwijderd. Doorgaan?"
+::msgcat::mcset nl "Info" "Info"
+::msgcat::mcset nl "File" "Archief"
+::msgcat::mcset nl "Load default repository" "Laad standaard installatie-bron"
+::msgcat::mcset nl "Exit" "Einde"
+::msgcat::mcset nl "Packages" "Pakketten"
+::msgcat::mcset nl "Update tlmgr" "Werk tlmgr bij"
+::msgcat::mcset nl "Update all" "Alles bijwerken"
+::msgcat::mcset nl "Install marked" "Installeer selektie"
+::msgcat::mcset nl "Update marked" "Werk selektie bij"
+::msgcat::mcset nl "Remove marked" "Verwijder selektie"
+::msgcat::mcset nl "Restore from backup..." "Herinstalleer vanaf reserve-kopie..."
+::msgcat::mcset nl "Regenerate filename database" "Ververs database van bestandsnamen"
+::msgcat::mcset nl "Regenerating filename database..." "Bezig met verversen database..."
+::msgcat::mcset nl "Regenerate formats" "Ververs formaten"
+::msgcat::mcset nl "Rebuilding formats..." "Bezig formaten te verversen..."
+::msgcat::mcset nl "Regenerate fontmaps" "Ververs fontmaps"
+::msgcat::mcset nl "Rebuilding fontmap files..." "Bezig fontmaps te verversen.."
+::msgcat::mcset nl "Change main repository" "Wijzig primaire installatie-bron"
+::msgcat::mcset nl "Paper" "Papier"
+::msgcat::mcset nl "Default repositories" "Ingestelde installatie-bronnen"
+::msgcat::mcset nl "Not loaded" "Niet geladen"
+::msgcat::mcset nl "TL Manager up to date?" "TL Manager up to date?"
+::msgcat::mcset nl "Last tlmgr command:" "Laatste tlmgr opdracht:"
+::msgcat::mcset nl "Type command:" "Typ opdracht:"
+::msgcat::mcset nl "Go" "Uitvoeren"
+::msgcat::mcset nl "Package list" "Lijst van pakketten"
+::msgcat::mcset nl "Installed" "Ge\u00efnstalleerd"
+::msgcat::mcset nl "Updatable" "Nieuwe versie"
+::msgcat::mcset nl "Detail >> Global" "Detail >> Globaal"
+::msgcat::mcset nl "Collections and schemes" "Collecties en schemas"
+::msgcat::mcset nl "Only schemes" "Alleen schemas"
+::msgcat::mcset nl "Mark all" "Kies alles"
+::msgcat::mcset nl "Mark none" "Kies niets"
+::msgcat::mcset nl "Search package names" "Zoek op naam pakket"
+::msgcat::mcset nl "Also search short descriptions" "Zoek ook in korte beschrijvingen"
+::msgcat::mcset nl "Name" "Naam"
+::msgcat::mcset nl "Local Rev. (ver.)" "Lokale rev. (ver.)"
+::msgcat::mcset nl "Remote Rev. (ver.)" "Online rev. (ver.)"
+::msgcat::mcset nl "Description" "Beschrijving"
+::msgcat::mcset nl "Restart self" "Herstart zelf"
+::msgcat::mcset nl "Restart tlmgr" "Herstart tlmgr"
+::msgcat::mcset nl "Show logs" "Toon logs"
::msgcat::mcset nl "basic scheme (plain and latex)" "basis-schema (Plain en latex)"
::msgcat::mcset nl "ConTeXt scheme" "ConTeXt schema"
-::msgcat::mcset nl "full scheme (everything)" "Volledig schema (alles)"
+::msgcat::mcset nl "full scheme (everything)" "volledig schema (alles)"
::msgcat::mcset nl "GUST TeX Live scheme" "GUST TeX Live schema"
-::msgcat::mcset nl "infrastructure-only scheme (no TeX at all)" "Alleen infrastruktuur (helemaal geen TeX)"
-::msgcat::mcset nl "medium scheme (small + more packages and languages)" "Medium schema (klein + meer pakketten en taken)"
+::msgcat::mcset nl "infrastructure-only scheme (no TeX at all)" "alleen infrastruktuur (helemaal geen TeX)"
+::msgcat::mcset nl "medium scheme (small + more packages and languages)" "medium schema (klein + meer pakketten en taken)"
::msgcat::mcset nl "minimal scheme (plain only)" "minimum schema (alleen plain)"
::msgcat::mcset nl "small scheme (basic + xetex, metapost, a few languages)" "klein schema (basis + xetex, metapost, enkele talen)"
::msgcat::mcset nl "teTeX scheme (more than medium, but nowhere near full)" "teTeX schema (meer dan medium, maar lang niet alles)"
diff --git a/Master/tlpkg/translations/nl.po b/Master/tlpkg/translations/nl.po
index d3a5ff642e1..b41aefad267 100644
--- a/Master/tlpkg/translations/nl.po
+++ b/Master/tlpkg/translations/nl.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: TeX Live translation\n"
"Report-Msgid-Bugs-To: tex-live@tug.org\n"
-"POT-Creation-Date: 2018-09-28 02:23+0200\n"
-"PO-Revision-Date: 2018-08-24 12:59+0200\n"
+"POT-Creation-Date: 2018-10-19 20:15+0200\n"
+"PO-Revision-Date: 2018-10-19 20:30+0200\n"
"Last-Translator: Siep Kroonenberg <siepo@cybercomm.nl>\n"
"Language-Team: TL Translation Team <tex-live@tug.org>\n"
"Language: nl\n"
@@ -15,7 +15,7 @@ msgstr ""
#: tlpkg/installer/tracked-install.pl:27
msgid "Installation process"
-msgstr "Installatie"
+msgstr "Installatie-proces"
#: tlpkg/installer/tracked-install.pl:41
#: tlpkg/installer/install-menu-wizard.pl:383
@@ -40,15 +40,15 @@ msgstr "Installatie"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:2469
#: texmf-dist/scripts/texlive/tlmgrgui.pl:2506
#: texmf-dist/scripts/texlive/tlmgrgui.pl:2587
-#: tlpkg/installer/install-tl-gui.tcl:414
-#: tlpkg/installer/install-tl-gui.tcl:530
-#: tlpkg/installer/install-tl-gui.tcl:657
-#: tlpkg/installer/install-tl-gui.tcl:757
-#: tlpkg/installer/install-tl-gui.tcl:842
-#: tlpkg/installer/install-tl-gui.tcl:1021
-#: tlpkg/installer/install-tl-gui.tcl:1073
-#: tlpkg/installer/install-tl-gui.tcl:1190
-#: tlpkg/installer/install-tl-gui.tcl:1330
+#: tlpkg/installer/install-tl-gui.tcl:240
+#: tlpkg/installer/install-tl-gui.tcl:324
+#: tlpkg/installer/install-tl-gui.tcl:426
+#: tlpkg/installer/install-tl-gui.tcl:510
+#: tlpkg/installer/install-tl-gui.tcl:695
+#: tlpkg/installer/install-tl-gui.tcl:745
+#: tlpkg/installer/install-tl-gui.tcl:860
+#: tlpkg/installer/install-tl-gui.tcl:998 tlpkg/TeXLive/tltcl.tcl:359
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1199
msgid "Cancel"
msgstr "Afbreken"
@@ -62,7 +62,7 @@ msgstr "Sluit af"
#: tlpkg/installer/install-menu-wizard.pl:41
#: tlpkg/installer/install-menu-perltk.pl:445
-#: tlpkg/installer/install-tl-gui.tcl:1536
+#: tlpkg/installer/install-tl-gui.tcl:1202
msgid "Default paper size"
msgstr "Standaard papier-formaat"
@@ -105,7 +105,8 @@ msgstr "TeX Live %s Installatie"
#: tlpkg/installer/install-menu-perltk.pl:630
#: tlpkg/installer/install-menu-perltk.pl:676
#: texmf-dist/scripts/texlive/tlmgrgui.pl:544
-#: tlpkg/installer/install-tl-gui.tcl:1374
+#: tlpkg/installer/install-tl-gui.tcl:1040
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2102
msgid "Quit"
msgstr "Stoppen"
@@ -246,7 +247,7 @@ msgstr ""
#: tlpkg/installer/install-menu-wizard.pl:423
#: tlpkg/installer/install-menu-wizard.pl:587
msgid "Destination folder:"
-msgstr "Bestemmings-folder"
+msgstr "Bestemmings-folder:"
#: tlpkg/installer/install-menu-wizard.pl:425
#: tlpkg/installer/install-menu-perltk.pl:317
@@ -272,12 +273,12 @@ msgstr "Bestemmings-folder"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:2433
#: texmf-dist/scripts/texlive/tlmgrgui.pl:2438
#: texmf-dist/scripts/texlive/tlmgrgui.pl:2443
-#: tlpkg/installer/install-tl-gui.tcl:739
-#: tlpkg/installer/install-tl-gui.tcl:1418
-#: tlpkg/installer/install-tl-gui.tcl:1428
-#: tlpkg/installer/install-tl-gui.tcl:1437
-#: tlpkg/installer/install-tl-gui.tcl:1472
-#: tlpkg/installer/install-tl-gui.tcl:1491
+#: tlpkg/installer/install-tl-gui.tcl:408
+#: tlpkg/installer/install-tl-gui.tcl:1084
+#: tlpkg/installer/install-tl-gui.tcl:1094
+#: tlpkg/installer/install-tl-gui.tcl:1103
+#: tlpkg/installer/install-tl-gui.tcl:1138
+#: tlpkg/installer/install-tl-gui.tcl:1157
msgid "Change"
msgstr "Wijzig"
@@ -292,7 +293,7 @@ msgstr ""
#: tlpkg/installer/install-menu-wizard.pl:469
#: tlpkg/installer/install-menu-perltk.pl:1080
msgid "disk space required:"
-msgstr "benodigde schijfruimte"
+msgstr "benodigde schijfruimte:"
#: tlpkg/installer/install-menu-wizard.pl:489
#: tlpkg/installer/install-menu-perltk.pl:1091
@@ -301,7 +302,7 @@ msgstr "(default niet toegestaan of niet schrijfbaar - aub wijzigen!)"
#: tlpkg/installer/install-menu-wizard.pl:534
msgid "This screen allows you to configure some options"
-msgstr "Met dit scherm kunt u enkele opties instellen."
+msgstr "Met dit scherm kunt u enkele opties instellen"
#: tlpkg/installer/install-menu-wizard.pl:579
#, perl-format
@@ -344,32 +345,35 @@ msgstr "Ja"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:700
#: texmf-dist/scripts/texlive/tlmgrgui.pl:1109
#: texmf-dist/scripts/texlive/tlmgrgui.pl:1730
-#: tlpkg/installer/install-tl-gui.tcl:59
msgid "No"
msgstr "Nee"
#: tlpkg/installer/install-menu-wizard.pl:604
#: texmf-dist/scripts/texlive/tlmgrgui.pl:456
-#: tlpkg/installer/install-tl-gui.tcl:1372
+#: tlpkg/installer/install-tl-gui.tcl:1038
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1818
msgid "Install"
msgstr "Installeren"
#: tlpkg/installer/install-menu-perltk.pl:48
#: tlpkg/installer/install-menu-perltk.pl:1251
#: texmf-dist/scripts/texlive/tlmgrgui.pl:143
-#: tlpkg/installer/install-tl-gui.tcl:1604
+#: tlpkg/installer/install-tl-gui.tcl:600
+#: tlpkg/installer/install-tl-gui.tcl:1270
msgid "None"
msgstr "Geen"
#: tlpkg/installer/install-menu-perltk.pl:49
#: texmf-dist/scripts/texlive/tlmgrgui.pl:144
-#: tlpkg/installer/install-tl-gui.tcl:1604
+#: tlpkg/installer/install-tl-gui.tcl:1270
msgid "Only new"
msgstr "Alleen nieuw"
#: tlpkg/installer/install-menu-perltk.pl:50
#: texmf-dist/scripts/texlive/tlmgrgui.pl:145
-#: tlpkg/installer/install-tl-gui.tcl:1604
+#: tlpkg/installer/install-tl-gui.tcl:1270
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2020
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2031
msgid "All"
msgstr "Alle"
@@ -383,17 +387,17 @@ msgid "letter"
msgstr "letter"
#: tlpkg/installer/install-menu-perltk.pl:55
-#: tlpkg/installer/install-tl-gui.tcl:1592
+#: tlpkg/installer/install-tl-gui.tcl:1258
msgid "No shortcuts"
msgstr "Geen TeX Live menu"
#: tlpkg/installer/install-menu-perltk.pl:56
-#: tlpkg/installer/install-tl-gui.tcl:1592
+#: tlpkg/installer/install-tl-gui.tcl:1258
msgid "TeX Live menu"
msgstr "TeX Live menu"
#: tlpkg/installer/install-menu-perltk.pl:57
-#: tlpkg/installer/install-tl-gui.tcl:1592
+#: tlpkg/installer/install-tl-gui.tcl:1258
msgid "Launcher entry"
msgstr "Launcher item"
@@ -414,7 +418,7 @@ msgstr "Laad"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:2270
#: texmf-dist/scripts/texlive/tlmgrgui.pl:2332
#: texmf-dist/scripts/texlive/tlmgrgui.pl:2669
-#: tlpkg/installer/install-tl-gui.tcl:668
+#: tlpkg/installer/install-tl-gui.tcl:335
msgid "Warning"
msgstr "Waarschuwing"
@@ -456,14 +460,14 @@ msgstr "Kies een andere mirror."
#: texmf-dist/scripts/texlive/tlmgrgui.pl:2466
#: texmf-dist/scripts/texlive/tlmgrgui.pl:2504
#: texmf-dist/scripts/texlive/tlmgrgui.pl:2669
-#: tlpkg/installer/install-tl-gui.tcl:528
-#: tlpkg/installer/install-tl-gui.tcl:647
-#: tlpkg/installer/install-tl-gui.tcl:755
-#: tlpkg/installer/install-tl-gui.tcl:839
-#: tlpkg/installer/install-tl-gui.tcl:1018
-#: tlpkg/installer/install-tl-gui.tcl:1056
-#: tlpkg/installer/install-tl-gui.tcl:1187
-#: tlpkg/installer/install-tl-gui.tcl:1328
+#: tlpkg/installer/install-tl-gui.tcl:314
+#: tlpkg/installer/install-tl-gui.tcl:424
+#: tlpkg/installer/install-tl-gui.tcl:508
+#: tlpkg/installer/install-tl-gui.tcl:692
+#: tlpkg/installer/install-tl-gui.tcl:728
+#: tlpkg/installer/install-tl-gui.tcl:857
+#: tlpkg/installer/install-tl-gui.tcl:996 tlpkg/TeXLive/tltcl.tcl:357
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1198
msgid "Ok"
msgstr "Ok"
@@ -529,7 +533,7 @@ msgstr "Portable setup"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:1181
#: texmf-dist/scripts/texlive/tlmgrgui.pl:1231
#: texmf-dist/scripts/texlive/tlmgrgui.pl:1240
-#: tlpkg/installer/install-tl-gui.tcl:1445
+#: tlpkg/installer/install-tl-gui.tcl:1111
msgid "Toggle"
msgstr "Wijzig"
@@ -555,27 +559,28 @@ msgstr "TEXMFHOME (voor eigen macros etc.)"
#: tlpkg/installer/install-menu-perltk.pl:440
#: texmf-dist/scripts/texlive/tlmgrgui.pl:513
-#: tlpkg/installer/install-tl-gui.tcl:1527
+#: tlpkg/installer/install-tl-gui.tcl:1193
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1947
msgid "Options"
msgstr "Opties"
#: tlpkg/installer/install-menu-perltk.pl:458
-#: tlpkg/installer/install-tl-gui.tcl:1547
+#: tlpkg/installer/install-tl-gui.tcl:1213
msgid "Allow execution of restricted list of programs via \\write18"
msgstr "Sta uitvoering van een beperkte lijst programmas toe via \\write18"
#: tlpkg/installer/install-menu-perltk.pl:473
-#: tlpkg/installer/install-tl-gui.tcl:1554
+#: tlpkg/installer/install-tl-gui.tcl:1220
msgid "Create all format files"
msgstr "Genereer alle format bestanden"
#: tlpkg/installer/install-menu-perltk.pl:485
-#: tlpkg/installer/install-tl-gui.tcl:1562
+#: tlpkg/installer/install-tl-gui.tcl:1228
msgid "Install font/macro doc tree"
msgstr "Installeer font/macro doc folder"
#: tlpkg/installer/install-menu-perltk.pl:498
-#: tlpkg/installer/install-tl-gui.tcl:1572
+#: tlpkg/installer/install-tl-gui.tcl:1238
msgid "Install font/macro source tree"
msgstr "Installeer font/macro bron folder"
@@ -585,7 +590,7 @@ msgid "Create symlinks in system directories"
msgstr "Maak symlinks naar standaard-folders"
#: tlpkg/installer/install-menu-perltk.pl:585
-#: tlpkg/installer/install-tl-gui.tcl:1665
+#: tlpkg/installer/install-tl-gui.tcl:1331
msgid "After install, set CTAN as source for package updates"
msgstr "Kies na installatie CTAN als bron voor nieuwe versies van pakketten"
@@ -641,7 +646,7 @@ msgstr "Pad voor %s (gebruik ~ voor %s)"
#: tlpkg/installer/install-menu-perltk.pl:832
msgid "custom selection of collections"
-msgstr "Eigen selektie van collekties"
+msgstr "eigen selektie van collekties"
#: tlpkg/installer/install-menu-perltk.pl:869
msgid "Select the collections to be installed"
@@ -656,9 +661,9 @@ msgid "Deselect All"
msgstr "Kies niets"
#: tlpkg/installer/install-menu-perltk.pl:967
-#: tlpkg/installer/install-tl-gui.tcl:1645
+#: tlpkg/installer/install-tl-gui.tcl:1311
msgid "create symlinks in standard directories"
-msgstr "Maak symlinks naar standaard-folders"
+msgstr "maak symlinks naar standaard-folders"
#: tlpkg/installer/install-menu-perltk.pl:970
msgid "binaries to"
@@ -739,7 +744,7 @@ msgstr ""
#: texmf-dist/scripts/texlive/tlmgrgui.pl:293
msgid "Repository"
-msgstr "installatie-bron"
+msgstr "Installatie-bron"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:294
#: texmf-dist/scripts/texlive/tlmgrgui.pl:2616
@@ -748,11 +753,11 @@ msgstr "Geladen:"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:294
msgid "none"
-msgstr "Geen"
+msgstr "geen"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:297
msgid "Load default"
-msgstr "Laad standaard installatie-bron."
+msgstr "Laad standaard installatie-bron"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:305
#: texmf-dist/scripts/texlive/tlmgrgui.pl:528
@@ -760,6 +765,7 @@ msgstr "Laad standaard installatie-bron."
#: texmf-dist/scripts/texlive/tlmgrgui.pl:1283
#: texmf-dist/scripts/texlive/tlmgrgui.pl:1705
#: texmf-dist/scripts/texlive/tlmgrgui.pl:2612
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1030
msgid "multiple repositories"
msgstr "meerdere installatie-bronnen"
@@ -772,6 +778,7 @@ msgid "Display configuration"
msgstr "Laat instellingen zien"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:321
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2017
msgid "Status"
msgstr "Status"
@@ -806,7 +813,7 @@ msgstr "collecties"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:339
msgid "schemes"
-msgstr "Schema's"
+msgstr "schema's"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:342
msgid "Match"
@@ -833,12 +840,12 @@ msgid "not selected"
msgstr "niet gekozen"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:389
-#: tlpkg/installer/install-tl-gui.tcl:1172
+#: tlpkg/installer/install-tl-gui.tcl:842
msgid "Select all"
msgstr "Kies alles"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:391
-#: tlpkg/installer/install-tl-gui.tcl:1180
+#: tlpkg/installer/install-tl-gui.tcl:850
msgid "Select none"
msgstr "Kies niets"
@@ -871,11 +878,13 @@ msgid "Reinstall previously removed packages"
msgstr "Herinstalleer eerder verwijderde pakketten"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:451
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1823
msgid "Update"
msgstr "Werk bij"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:460
#: texmf-dist/scripts/texlive/tlmgrgui.pl:2014
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1828
msgid "Remove"
msgstr "Verwijder"
@@ -884,11 +893,13 @@ msgid "Backup"
msgstr "Maak reserve-kopie"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:515
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1938
msgid "Actions"
msgstr "Akties"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:519
#: texmf-dist/scripts/texlive/tlmgrgui.pl:2694
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1967
msgid "Help"
msgstr "Help"
@@ -898,7 +909,7 @@ msgstr "Laad standaard (volgens tlpdb) installatie-bron:"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:534
msgid "Load cmd line repository:"
-msgstr "Laad cmd line installatie-bron."
+msgstr "Laad cmd line installatie-bron:"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:537
msgid "Load standard net repository:"
@@ -1011,7 +1022,7 @@ msgstr "Korte beschrijving:"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:696
msgid "Long description:"
-msgstr "Lange beschrijving;"
+msgstr "Lange beschrijving:"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:699
msgid "Installed:"
@@ -1043,11 +1054,11 @@ msgstr "Funktionaliteit:"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:729
msgid "Primary characterization:"
-msgstr "Primaire omschrijving"
+msgstr "Primaire omschrijving:"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:734
msgid "Secondary characterization:"
-msgstr "Secundaire omschrijving"
+msgstr "Secundaire omschrijving:"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:745
msgid "Collection:"
@@ -1103,7 +1114,7 @@ msgstr "Voer de wijzigingen uit"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:1128
#: texmf-dist/scripts/texlive/tlmgrgui.pl:1137
msgid "General options"
-msgstr "Algemene opties:"
+msgstr "Algemene opties"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:1142
msgid "Default package repository"
@@ -1148,17 +1159,17 @@ msgstr "Doelfolder voor symlinks man paginas"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:1227
msgid "Create shortcuts on the desktop"
-msgstr "Maak snelkoppelingen op het bureaublad."
+msgstr "Maak snelkoppelingen op het bureaublad"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:1236
-#: tlpkg/installer/install-tl-gui.tcl:1617
+#: tlpkg/installer/install-tl-gui.tcl:1283
msgid "Install for all users"
msgstr "Installeer voor alle gebruikers"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:1283
#: texmf-dist/scripts/texlive/tlmgrgui.pl:1285
msgid "Load default repository:"
-msgstr "Laad standaard installatie-bron."
+msgstr "Laad standaard installatie-bron:"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:1342
#: texmf-dist/scripts/texlive/tlmgrgui.pl:1351
@@ -1190,7 +1201,7 @@ msgstr "Systeem-instelling"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:1419
msgid "Default language for GUI:"
-msgstr "Standaard-taal voor de GUI"
+msgstr "Standaard-taal voor de GUI:"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:1434
#: texmf-dist/scripts/texlive/tlmgrgui.pl:1463
@@ -1199,7 +1210,7 @@ msgstr "Wijzigingen treden in werking na herstart"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:1508
msgid "Choose directory"
-msgstr "Kies folder:"
+msgstr "Kies folder"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:1574
msgid "Edit default package repositories"
@@ -1210,6 +1221,7 @@ msgid "Specify set of repositories to be used"
msgstr "Kies de te gebruiken installatie-bronnen"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:1593
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1177
msgid "Delete"
msgstr "Verwijder"
@@ -1255,7 +1267,7 @@ msgstr "deactiveer"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:1890
msgid "Loading of remote database failed."
-msgstr "Laden van online database mislukt"
+msgstr "Laden van online database mislukt."
#: texmf-dist/scripts/texlive/tlmgrgui.pl:1891
msgid "Error message:"
@@ -1329,7 +1341,10 @@ msgid "Restore all packages to latest version"
msgstr "Herstel alle pakketten naar de laatste versie"
#: texmf-dist/scripts/texlive/tlmgrgui.pl:2417
-#: tlpkg/installer/install-tl-gui.tcl:411
+#: tlpkg/installer/install-tl-gui.tcl:237
+#: texmf-dist/scripts/tlshell/tlshell.tcl:796
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1326
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1510
msgid "Close"
msgstr "Afsluiten"
@@ -1398,15 +1413,11 @@ msgstr ""
"%s is met een fout geeindigd.\n"
"Raadpleeg het log venster voor details."
-#: tlpkg/installer/install-tl-gui.tcl:188
-msgid "Error"
-msgstr "Fout"
-
-#: tlpkg/installer/install-tl-gui.tcl:235 tlpkg/translations/shortdesc.pl:2519
+#: tlpkg/installer/install-tl-gui.tcl:126 tlpkg/translations/shortdesc.pl:2519
msgid "Welcome to TeX Live!"
msgstr "Welkom bij TeX Live!"
-#: tlpkg/installer/install-tl-gui.tcl:238 tlpkg/translations/shortdesc.pl:2522
+#: tlpkg/installer/install-tl-gui.tcl:129 tlpkg/translations/shortdesc.pl:2522
#, tcl-format, perl-format
msgid ""
"See %s/index.html for links to documentation.\n"
@@ -1422,7 +1433,7 @@ msgstr ""
"overweeg ondersteuning door lid te worden van zo'n groep.\n"
"De lijst van gebruikersgroepen staat op http://tug.org/usergroups.html."
-#: tlpkg/installer/install-tl-gui.tcl:242 tlpkg/translations/shortdesc.pl:2527
+#: tlpkg/installer/install-tl-gui.tcl:133 tlpkg/translations/shortdesc.pl:2527
#, tcl-format, perl-format
msgid ""
"Add %s/texmf-dist/doc/man to MANPATH.\n"
@@ -1435,49 +1446,40 @@ msgstr ""
"En bovenal, voeg %s/bin/%s\n"
"toe aan PATH voor huidige en toekomstige sessies."
-#: tlpkg/installer/install-tl-gui.tcl:254
+#: tlpkg/installer/install-tl-gui.tcl:145
msgid "Error while reading from Perl backend"
msgstr "Fout bij het lezen van het Perl achtergrond-proces"
-#: tlpkg/installer/install-tl-gui.tcl:266
+#: tlpkg/installer/install-tl-gui.tcl:157
msgid "Unexpected closed backend"
msgstr "Achtergrond-proces onverwacht beeindigd"
-#: tlpkg/installer/install-tl-gui.tcl:376
-#: tlpkg/installer/install-tl-gui.tcl:1846
+#: tlpkg/installer/install-tl-gui.tcl:202
+#: tlpkg/installer/install-tl-gui.tcl:1512
msgid "TeX Live Installer"
msgstr "TeX Live Installatie"
-#: tlpkg/installer/install-tl-gui.tcl:378
+#: tlpkg/installer/install-tl-gui.tcl:204
msgid "Loading..."
msgstr "Laden..."
-#: tlpkg/installer/install-tl-gui.tcl:495
-#: tlpkg/installer/install-tl-gui.tcl:736
-msgid "Browse..."
-msgstr "Bladeren..."
-
-#: tlpkg/installer/install-tl-gui.tcl:589
-msgid "Select or type"
-msgstr "Kies of type"
-
-#: tlpkg/installer/install-tl-gui.tcl:621
+#: tlpkg/installer/install-tl-gui.tcl:288
msgid "Cannot be created or cannot be written to"
msgstr "Kan niet worden aangemaakt of is niet schrijfbaar"
-#: tlpkg/installer/install-tl-gui.tcl:633
+#: tlpkg/installer/install-tl-gui.tcl:300
msgid "Directory name..."
msgstr "Folder-naam..."
-#: tlpkg/installer/install-tl-gui.tcl:640
+#: tlpkg/installer/install-tl-gui.tcl:307
msgid "Change name (slashes not allowed)"
msgstr "Wijzig naam (slashes niet toegestaan)"
-#: tlpkg/installer/install-tl-gui.tcl:649
+#: tlpkg/installer/install-tl-gui.tcl:316
msgid "No slashes allowed"
msgstr "Slashes niet toegestaan"
-#: tlpkg/installer/install-tl-gui.tcl:667
+#: tlpkg/installer/install-tl-gui.tcl:334
msgid ""
"TL release component highly recommended!\n"
"Are you sure?"
@@ -1485,92 +1487,96 @@ msgstr ""
"TL jaar component sterk aanbevolen!\n"
"Weet u het zeker?"
-#: tlpkg/installer/install-tl-gui.tcl:710
-#: tlpkg/installer/install-tl-gui.tcl:1402
-#: tlpkg/installer/install-tl-gui.tcl:1410
+#: tlpkg/installer/install-tl-gui.tcl:377
+#: tlpkg/installer/install-tl-gui.tcl:1068
+#: tlpkg/installer/install-tl-gui.tcl:1076
msgid "Installation root"
msgstr "Hoofd TeX-folder"
-#: tlpkg/installer/install-tl-gui.tcl:741
+#: tlpkg/installer/install-tl-gui.tcl:405 tlpkg/TeXLive/tltcl.tcl:324
+msgid "Browse..."
+msgstr "Bladeren..."
+
+#: tlpkg/installer/install-tl-gui.tcl:410
msgid "Toggle year"
msgstr "Jaar component aan/uit"
-#: tlpkg/installer/install-tl-gui.tcl:749
+#: tlpkg/installer/install-tl-gui.tcl:418
msgid "Localized directory names will be replaced by their real names"
msgstr "Aangepaste folder-namen worden vervangen door hun werkelijke namen"
-#: tlpkg/installer/install-tl-gui.tcl:826
+#: tlpkg/installer/install-tl-gui.tcl:495
#, tcl-format
msgid "'~' equals %s, e.g. %s"
-msgstr ""
+msgstr "'~' betekent %s, bijvoorbeeld %s"
-#: tlpkg/installer/install-tl-gui.tcl:952
+#: tlpkg/installer/install-tl-gui.tcl:626
msgid "Cannot deselect own platform"
msgstr "Eigen platform is altijd geselecteerd"
-#: tlpkg/installer/install-tl-gui.tcl:983
-#: tlpkg/installer/install-tl-gui.tcl:1317
+#: tlpkg/installer/install-tl-gui.tcl:657
+#: tlpkg/installer/install-tl-gui.tcl:985
msgid "Binaries"
msgstr "Binaries"
-#: tlpkg/installer/install-tl-gui.tcl:1035
+#: tlpkg/installer/install-tl-gui.tcl:707
msgid "Schemes"
msgstr "Schema's"
-#: tlpkg/installer/install-tl-gui.tcl:1120
+#: tlpkg/installer/install-tl-gui.tcl:790
msgid "Collections"
msgstr "Collecties"
-#: tlpkg/installer/install-tl-gui.tcl:1143
+#: tlpkg/installer/install-tl-gui.tcl:813
msgid "Languages"
msgstr "Talen"
-#: tlpkg/installer/install-tl-gui.tcl:1145
+#: tlpkg/installer/install-tl-gui.tcl:815
msgid "Other collections"
msgstr "Andere collecties"
-#: tlpkg/installer/install-tl-gui.tcl:1270
+#: tlpkg/installer/install-tl-gui.tcl:938
msgid "Warning. Not all configured directories are writable!"
msgstr "Waarschuwing. Niet alle geconfigureerde folders zijn schrijfbaar!"
-#: tlpkg/installer/install-tl-gui.tcl:1290
+#: tlpkg/installer/install-tl-gui.tcl:958
msgid "Symlinks"
msgstr "Symlinks"
-#: tlpkg/installer/install-tl-gui.tcl:1313
+#: tlpkg/installer/install-tl-gui.tcl:981
msgid "browse..."
-msgstr "Bladeren..."
+msgstr "bladeren..."
-#: tlpkg/installer/install-tl-gui.tcl:1318
+#: tlpkg/installer/install-tl-gui.tcl:986
msgid "Man pages"
msgstr "Man pagina's"
-#: tlpkg/installer/install-tl-gui.tcl:1319
+#: tlpkg/installer/install-tl-gui.tcl:987
msgid "Info pages"
msgstr "Info pagina's"
-#: tlpkg/installer/install-tl-gui.tcl:1362
+#: tlpkg/installer/install-tl-gui.tcl:1028
#, tcl-format
msgid "TeX Live %s Installer"
msgstr "TeX Live %s Installatie"
-#: tlpkg/installer/install-tl-gui.tcl:1378
+#: tlpkg/installer/install-tl-gui.tcl:1044
msgid "Advanced"
msgstr "Geavanceerd"
-#: tlpkg/installer/install-tl-gui.tcl:1405
+#: tlpkg/installer/install-tl-gui.tcl:1071
msgid "Directories"
msgstr "Folders"
-#: tlpkg/installer/install-tl-gui.tcl:1423
+#: tlpkg/installer/install-tl-gui.tcl:1089
msgid "Local additions"
msgstr "Lokale toevoegingen"
-#: tlpkg/installer/install-tl-gui.tcl:1432
+#: tlpkg/installer/install-tl-gui.tcl:1098
msgid "Per-user additions"
msgstr "Toevoegingen per gebruiker"
-#: tlpkg/installer/install-tl-gui.tcl:1442
+#: tlpkg/installer/install-tl-gui.tcl:1108
msgid ""
"Portable setup:\n"
"May reset TEXMFLOCAL\n"
@@ -1580,50 +1586,455 @@ msgstr ""
"Kan TEXMFLOCAL en\n"
"TEXMFHOME terugzetten"
-#: tlpkg/installer/install-tl-gui.tcl:1456
+#: tlpkg/installer/install-tl-gui.tcl:1122
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1289
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1964
msgid "Platforms"
msgstr "Platforms"
-#: tlpkg/installer/install-tl-gui.tcl:1469
+#: tlpkg/installer/install-tl-gui.tcl:1135
msgid "N. of additional platform(s):"
msgstr "Aantal extra platforms:"
-#: tlpkg/installer/install-tl-gui.tcl:1482
+#: tlpkg/installer/install-tl-gui.tcl:1148
msgid "Selections"
msgstr "Selekties"
-#: tlpkg/installer/install-tl-gui.tcl:1487
+#: tlpkg/installer/install-tl-gui.tcl:1153
msgid "Scheme:"
msgstr "Schema:"
-#: tlpkg/installer/install-tl-gui.tcl:1496
+#: tlpkg/installer/install-tl-gui.tcl:1162
msgid "N. of collections:"
msgstr "Aantal collecties:"
-#: tlpkg/installer/install-tl-gui.tcl:1499
+#: tlpkg/installer/install-tl-gui.tcl:1165
msgid "Customize"
msgstr "Aanpassen"
-#: tlpkg/installer/install-tl-gui.tcl:1508
+#: tlpkg/installer/install-tl-gui.tcl:1174
msgid "Disk space required (in MB):"
msgstr "Vereiste schijfruimte (in MB):"
-#: tlpkg/installer/install-tl-gui.tcl:1585
+#: tlpkg/installer/install-tl-gui.tcl:1251
msgid "Adjust searchpath"
msgstr "Zoekpad aanpassen"
-#: tlpkg/installer/install-tl-gui.tcl:1594
+#: tlpkg/installer/install-tl-gui.tcl:1260
msgid "Desktop integration"
msgstr "Bureaublad-integratie"
-#: tlpkg/installer/install-tl-gui.tcl:1606
+#: tlpkg/installer/install-tl-gui.tcl:1272
msgid "File associations"
msgstr "Koppeling bestandsformaten"
-#: tlpkg/installer/install-tl-gui.tcl:1651
+#: tlpkg/installer/install-tl-gui.tcl:1317
msgid "Specify directories"
msgstr "Specificeer folders"
+#: tlpkg/TeXLive/tltcl.tcl:403
+msgid "Select or type"
+msgstr "Kies of type"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:131
+msgid "ok"
+msgstr "ok"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:135
+msgid "yes"
+msgstr "ja"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:137
+msgid "no"
+msgstr "nee"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:141
+msgid "cancel"
+msgstr "afbreken"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:202
+msgid "IDLE"
+msgstr "INACTIEF"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:205
+#: texmf-dist/scripts/tlshell/tlshell.tcl:281
+msgid "BUSY"
+msgstr "BEZIG"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:397
+#: texmf-dist/scripts/tlshell/tlshell.tcl:433
+msgid "Running"
+msgstr "Bezig"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:417
+msgid "Idle"
+msgstr "Inactief"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:528
+msgid "Needs updating"
+msgstr "Moet worden bijgewerkt"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:530
+msgid "Up to date"
+msgstr "Up to date"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:532
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1993
+msgid "Unknown"
+msgstr "Onbekend"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:676
+msgid "A configured repository is unavailable."
+msgstr "Een ingestelde installatie-bron is niet beschikbaar."
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:786
+msgid "Output"
+msgstr "Uitvoer"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:787
+msgid "Errors"
+msgstr "Fouten"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:921
+#, tcl-format
+msgid "%s not a repository"
+msgstr "%s is geen installatie-bron"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1061
+msgid "Main Repository"
+msgstr "Primaire installatie-bron"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1072
+msgid "Current:"
+msgstr "Huidig:"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1078
+msgid "New"
+msgstr "Nieuw"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1086
+msgid "Any CTAN mirror"
+msgstr "Willekeurige CTAN mirror"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1096
+msgid "Specific mirror..."
+msgstr "Specifieke CTAN mirror..."
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1116
+msgid "Local directory..."
+msgstr "Lokale folder..."
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1122
+msgid "Save and Load"
+msgstr "Opslaan en laden"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1128
+msgid "Abort"
+msgstr "Afbreken"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1138
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1143
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1953
+msgid "Additional repositories"
+msgstr "Externe installatie-bronnen"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1148
+msgid "Add tlcontrib"
+msgstr "Voeg tlcontrib toe"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1150
+msgid "Packages which cannot be part of TeX Live"
+msgstr "Pakketten die geen onderdeel kunnen uitmaken van TeX Live"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1158
+msgid "Tag (optional)"
+msgstr "Kenteken (indien gewenst)"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1179
+msgid "Add"
+msgstr "Toevoegen"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1220
+#, tcl-format
+msgid "Cannot remove own platform %s"
+msgstr "Eigen platform %s is altijd geselecteerd"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1305
+msgid "platform"
+msgstr "platform"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1323
+msgid "Apply and close"
+msgstr "Toepassen en sluiten"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1379
+#, tcl-format
+msgid "Restore %s to revision %s?"
+msgstr "%s terugdraaien naar %s?"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1402
+msgid "No backups configured"
+msgstr "Geen reserve-kopieën geconfigureerd"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1412
+msgid "No backup directory defined"
+msgstr "Geen folder voor reserve-kopieën gedefinieerd"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1417
+#, tcl-format
+msgid "Backup directory %s does not exist"
+msgstr "Folder %s voor reserve-kopieën bestaat niet"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1440
+#, tcl-format
+msgid "No packages in backup directory %s"
+msgstr "Geen pakketten in folder %s voor reserve-kopieën"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1450
+msgid "Restore from backup"
+msgstr "Herinstalleer vanaf reserve-kopie"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1466
+msgid "Package"
+msgstr "Pakket"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1467
+msgid "Revision"
+msgstr "Revisie"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1508
+msgid "Restore all"
+msgstr "Herstel alle"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1526
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1541
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1580
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1627
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1701
+msgid "Nothing to do!"
+msgstr "Niets te doen!"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1538
+msgid "Update self first!"
+msgstr "Eerst zelf bijwerken!"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1600
+#, tcl-format
+msgid "Already installed: %s"
+msgstr "Al geïnstalleerd: %s"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1640
+#, tcl-format
+msgid ""
+"Also updating dependencies\n"
+"\n"
+"%s?"
+msgstr ""
+"Ook afhankelijkheden\n"
+"%s\n"
+"bijwerken?"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1655
+#, tcl-format
+msgid "Updating hard dependencies %s anyway. Continue?"
+msgstr "Harde afhankelijkheden %s worden in elk geval bijgewerkt. Doorgaan?"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1667
+#, tcl-format
+msgid "Skipped because not installed: %s"
+msgstr ""
+"Niet gïnstalleerd: %s\n"
+"overgeslagen"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1670
+#, tcl-format
+msgid "Skipped because already up to date: %s"
+msgstr "Overgeslagen: %s; al up to date"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1705
+#, tcl-format
+msgid ""
+"Also remove dependencies\n"
+"\n"
+"%s?"
+msgstr ""
+"Verwijder ook afhankelijkheden\n"
+"%s?"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1720
+#, tcl-format
+msgid "Removing hard dependencies %s anyway. Continue?"
+msgstr "Harde afhankelijkheden %s worden in elk geval verwijderd. Doorgaan?"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1814
+msgid "Info"
+msgstr "Info"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1885
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1907
+msgid "File"
+msgstr "Archief"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1909
+msgid "Load default repository"
+msgstr "Laad standaard installatie-bron"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1911
+msgid "Exit"
+msgstr "Einde"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1915
+msgid "Packages"
+msgstr "Pakketten"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1919
+msgid "Update tlmgr"
+msgstr "Werk tlmgr bij"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1922
+msgid "Update all"
+msgstr "Alles bijwerken"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1924
+msgid "Install marked"
+msgstr "Installeer selektie"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1927
+msgid "Update marked"
+msgstr "Werk selektie bij"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1930
+msgid "Remove marked"
+msgstr "Verwijder selektie"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1934
+msgid "Restore from backup..."
+msgstr "Herinstalleer vanaf reserve-kopie..."
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1940
+msgid "Regenerate filename database"
+msgstr "Ververs database van bestandsnamen"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1941
+msgid "Regenerating filename database..."
+msgstr "Bezig met verversen database..."
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1942
+msgid "Regenerate formats"
+msgstr "Ververs formaten"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1943
+msgid "Rebuilding formats..."
+msgstr "Bezig formaten te verversen..."
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1944
+msgid "Regenerate fontmaps"
+msgstr "Ververs fontmaps"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1945
+msgid "Rebuilding fontmap files..."
+msgstr "Bezig fontmaps te verversen.."
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1950
+msgid "Change main repository"
+msgstr "Wijzig primaire installatie-bron"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1956
+msgid "Paper"
+msgstr "Papier"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1984
+msgid "Default repositories"
+msgstr "Ingestelde installatie-bronnen"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1988
+msgid "Not loaded"
+msgstr "Niet geladen"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1991
+msgid "TL Manager up to date?"
+msgstr "TL Manager up to date?"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:1996
+msgid "Last tlmgr command:"
+msgstr "Laatste tlmgr opdracht:"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2003
+msgid "Type command:"
+msgstr "Typ opdracht:"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2005
+msgid "Go"
+msgstr "Uitvoeren"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2011
+msgid "Package list"
+msgstr "Lijst van pakketten"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2018
+msgid "Installed"
+msgstr "Geïnstalleerd"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2022
+msgid "Updatable"
+msgstr "Nieuwe versie"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2030
+msgid "Detail >> Global"
+msgstr "Detail >> Globaal"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2033
+msgid "Collections and schemes"
+msgstr "Collecties en schemas"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2035
+msgid "Only schemes"
+msgstr "Alleen schemas"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2043
+msgid "Mark all"
+msgstr "Kies alles"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2045
+msgid "Mark none"
+msgstr "Kies niets"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2053
+msgid "Search package names"
+msgstr "Zoek op naam pakket"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2056
+msgid "Also search short descriptions"
+msgstr "Zoek ook in korte beschrijvingen"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2067
+msgid "Name"
+msgstr "Naam"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2068
+msgid "Local Rev. (ver.)"
+msgstr "Lokale rev. (ver.)"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2069
+msgid "Remote Rev. (ver.)"
+msgstr "Online rev. (ver.)"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2070
+msgid "Description"
+msgstr "Beschrijving"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2104
+msgid "Restart self"
+msgstr "Herstart zelf"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2106
+msgid "Restart tlmgr"
+msgstr "Herstart tlmgr"
+
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2109
+msgid "Show logs"
+msgstr "Toon logs"
+
#: tlpkg/translations/shortdesc.pl:1
msgid "basic scheme (plain and latex)"
msgstr "basis-schema (Plain en latex)"
@@ -1634,7 +2045,7 @@ msgstr "ConTeXt schema"
#: tlpkg/translations/shortdesc.pl:3
msgid "full scheme (everything)"
-msgstr "Volledig schema (alles)"
+msgstr "volledig schema (alles)"
#: tlpkg/translations/shortdesc.pl:4
msgid "GUST TeX Live scheme"
@@ -1642,11 +2053,11 @@ msgstr "GUST TeX Live schema"
#: tlpkg/translations/shortdesc.pl:5
msgid "infrastructure-only scheme (no TeX at all)"
-msgstr "Alleen infrastruktuur (helemaal geen TeX)"
+msgstr "alleen infrastruktuur (helemaal geen TeX)"
#: tlpkg/translations/shortdesc.pl:6
msgid "medium scheme (small + more packages and languages)"
-msgstr "Medium schema (klein + meer pakketten en taken)"
+msgstr "medium schema (klein + meer pakketten en taken)"
#: tlpkg/translations/shortdesc.pl:7
msgid "minimal scheme (plain only)"
@@ -1824,6 +2235,33 @@ msgstr "Ondersteunende programma's specifiek voor Windows"
msgid "XeTeX and packages"
msgstr "XeTeX en bijbehorende pakketten"
+#~ msgid "Multiple repositories:"
+#~ msgstr "Meerdere installatie-bronnen:"
+
+#~ msgid "Additional Repositories"
+#~ msgstr "Extra installatie-bronnen"
+
+#~ msgid "Third-party repositories"
+#~ msgstr "Externe installatie-bronnen"
+
+#~ msgid "Change main repository..."
+#~ msgstr "Wijzig primaire installatie-bron"
+
+#~ msgid "Platforms..."
+#~ msgstr "Platforms ..."
+
+#~ msgid "Error"
+#~ msgstr "Fout"
+
+#~ msgid "Repositories"
+#~ msgstr "Installatie-bronnen"
+
+#~ msgid "Change repository..."
+#~ msgstr "Verander standaard installatie-bron..."
+
+#~ msgid "Default repository"
+#~ msgstr "Standaard installatie-bron"
+
#~ msgid "'~' equals %s, e.g.%s"
#~ msgstr "'~' betekent %s, bijvoorbeeld %s"
@@ -2458,9 +2896,6 @@ msgstr "XeTeX en bijbehorende pakketten"
#~ msgid "Updating packages"
#~ msgstr "Pakketten bijwerken"
-#~ msgid "Update all"
-#~ msgstr "Alles bijwerken"
-
#~ msgid "Update selected"
#~ msgstr "Keuzen bijwerken"
@@ -2537,9 +2972,6 @@ msgstr "XeTeX en bijbehorende pakketten"
#~ msgid "Update LuaTeX font database"
#~ msgstr "Werk LuaTeX font database bij"
-#~ msgid "File"
-#~ msgstr "Archief"
-
#, fuzzy
#~ msgid "%s collections out of %s (disk space required: %s MB)"
#~ msgstr "%s collecties van %s (disk space required: %s MB)"