gitignore: Add `semantic.cache' and Global droppings.
[profile] / xinitrc
diff --git a/xinitrc b/xinitrc
index 588dac6..1de812b 100755 (executable)
--- a/xinitrc
+++ b/xinitrc
@@ -208,7 +208,7 @@ start-emacs () {
 start-xterms () {
 
   ## Initialize some parameters.
-  declare -i x="ecols * e_colwd + e_hextra"
+  declare -i x="ecols * e_colwd + e_hextra" xb=xbound
   declare -i n=0 pgx=0 l h y ht
   declare -i hstd="35 * t_lineht + t_vextra" hmin="25 * t_lineht + t_vextra"
 
@@ -216,9 +216,9 @@ start-xterms () {
   while :; do
 
     ## Start a new iteration.
-    if ((x + t_wd > xbound)); then
+    if ((x + t_wd > xb)); then
       if ((n >= 3)); then break; fi
-      x="pgx + XWIDTH" pgx="pgx + XWIDTH" xbound="xbound + XWIDTH"
+      x="pgx + XWIDTH" pgx="pgx + XWIDTH" xb="xb + XWIDTH"
     fi
 
     ## Make large xterms.
@@ -242,6 +242,15 @@ start-xterms () {
 }
 
 ###--------------------------------------------------------------------------
+### Requesters.
+
+req () {
+  declare title=$1 hist=$2; shift 2
+  cmd=$(xgetline -t "$title" -p "Command:" -Hl "$HOME/$hist") &&
+  exec "$@" "$cmd"
+}
+
+###--------------------------------------------------------------------------
 ### Final waiting.
 
 atom=XINIT_COMMAND$atomtag
@@ -258,6 +267,7 @@ xwait () {
        xmsg -I -t "xinitrc help" -d "xinitrc commands" - <<EOF &
 :help
 :emacs :xterms :window-manager :clients
+:ask-run :ask-command
 :init
 :terminal
 ! SHELL-COMMAND
@@ -277,6 +287,12 @@ EOF
        info "restarting xinitrc"
        exec "$0" wait nostart
        ;;
+      :ask-run)
+       req "Shell command" .cmd.hist xcatch -FMiscFixed6x13 -- sh -c&
+       ;;
+      :ask-command)
+       req "xinit command" .xinit.hist xatom set XINIT_COMMAND$atomtag&
+       ;;
       :*)
        xmsg -E -t "xinitrc error" "Unknown command \`$line'" &
        ;;