Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
[PATCH] allopt() and question
- X-seq: zsh-workers 38407
- From: Thilo Six <zsh@xxxxxxx>
- To: zsh-workers@xxxxxxx
- Subject: [PATCH] allopt() and question
- Date: Fri, 6 May 2016 02:17:32 +0200
- List-help: <mailto:zsh-workers-help@zsh.org>
- List-id: Zsh Workers List <zsh-workers.zsh.org>
- List-post: <mailto:zsh-workers@zsh.org>
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
Hello
1)
i looked at allopt() and while doing that i noticed that it would not give
correct results for some options. notable e.g. monitor and zle.
Here i get:
% builtin set -o
.
.
monitor on
.
.
zle on
but then:
% builtin set -o | command grep -E '(\<monitor\>|\<zle\>)'
monitor off
zle off
>From that I guess that Zsh resets some specific options when used in
pipes/command substitutions.
The attached allopt() works around that.
Additionally:
This version makes it possible to throw s.th. like '_H-uP' or 'NO__H-uP' at
allopt and does not hardcode length of options when printing.
KUDOS for that goes to pws: http://zsh.sourceforge.net/Guide/zshguide05.html
2)
While working on the above i noticed that 'builtin set -o' and '${options}' are
not equal. The later knows some more. See attached missing_options for a list.
This makes me wonder if that is intended.
Any comments are welcome.
kind regards,
Thilo
>From 24207db8f420e65ba4e98875ee97c398135bb9b2 Mon Sep 17 00:00:00 2001
From: Thilo Six <zsh@xxxxxxx>
Date: Fri, 6 May 2016 01:34:29 +0200
Subject: [PATCH] allopt()
* FIX: some options are reset inside pipes and command substition
e.g. monitor and zle
those were displayed with wrong state
* FIX: do not hardcode length for print out
thanks to pws: http://zsh.sourceforge.net/Guide/zshguide05.html
* MOD: make it possible to throw s.th. like '_H-uP' at allopt
---
Functions/Misc/allopt | 56 +++++++++++++++++++++++++++++++++++++--------------
1 file changed, 41 insertions(+), 15 deletions(-)
diff --git a/Functions/Misc/allopt b/Functions/Misc/allopt
index 0c521f3..3955b88 100644
--- a/Functions/Misc/allopt
+++ b/Functions/Misc/allopt
@@ -6,20 +6,46 @@
# via egrep.
#
# Written by Sweth Chandramouli with hacks by Bart Schaefer.
+# updated by Thilo Six
-listalloptions () {
- local OPT_NAME OPT_VALUE
- builtin set -o | while read OPT_NAME OPT_VALUE ; do
- if [[ ${OPT_NAME#no} != ${OPT_NAME} ]] ; then
- OPT_VALUE=${(L)${${OPT_VALUE:s/on/OFF}:s/off/on}}
- OPT_NAME=${OPT_NAME#no}
- fi
- echo "${(r:21:)OPT_NAME} ${OPT_VALUE}"
- done
-}
+# allopt() {
+ local OPT_NAME OPT_VALUE LENGTH i OUT
+ local -a OPT_NAMES_ALL
+ local -A OPT_ALL
+ OPT_NAMES_ALL=(${(o)${(k)options[@]}})
+
+ # http://zsh.sourceforge.net/Guide/zshguide05.html
+ LENGTH=$(( ${#${OPT_NAMES_ALL[(r)${(l.${#${(O@)OPT_NAMES_ALL//?/X}[1]}..?.)}]}} + 1 ))
+
+ ### XXX note:
+ # this needs to be done because otherwise
+ # the listing is inaccurat e.g. 'monitor' and 'zle' are always off
+ # the set builtin treats them special within a pipe. compare this:
+ # % builtin set -o
+ # with
+ # % builtin set -o | command grep -E '(\<monitor\>|\<zle\>)'
+ #
+ for i in ${OPT_NAMES_ALL} ; do
+ OPT_ALL+=($i ${options[$i]})
+ done
+
+ if [[ -n ${*} ]]; then
+ {
+ for i in ${OPT_NAMES_ALL} ; do echo "${i} ${OPT_ALL[$i]}" ; done | while read OPT_NAME OPT_VALUE ; do
+ if [[ ${OPT_NAME#no} != ${OPT_NAME} ]] ; then
+ OPT_VALUE=${(L)${${OPT_VALUE:s/on/OFF}:s/off/on}}
+ OPT_NAME=${OPT_NAME#no}
+ fi
+ echo "${(r:${LENGTH}:)OPT_NAME} ${OPT_VALUE}"
+ done } | egrep ${(j.|.)${${${(L)@}#no}//[-_]/}}
+ else
+ for i in ${OPT_NAMES_ALL} ; do echo "${i} ${OPT_ALL[$i]}" ; done | while read OPT_NAME OPT_VALUE ; do
+ if [[ ${OPT_NAME#no} != ${OPT_NAME} ]] ; then
+ OPT_VALUE=${(L)${${OPT_VALUE:s/on/OFF}:s/off/on}}
+ OPT_NAME=${OPT_NAME#no}
+ fi
+ echo "${(r:${LENGTH}:)OPT_NAME} ${OPT_VALUE}"
+ done
+ fi
+# }
-if [[ -n $@ ]]; then
- listalloptions | egrep "${(j.|.)@}"
-else
- listalloptions
-fi
--
2.8.1
--- set 2016-05-05 22:41:01.202092134 +0000
+++ allopt 2016-05-05 22:40:06.585093869 +0000
@@ -21,8 +21,9 @@
bashrematch
beep
bgnice
braceccl
+braceexpand
bsdecho
caseglob
casematch
cbases
@@ -43,8 +44,9 @@
cshjunkiequotes
cshnullcmd
cshnullglob
debugbeforecmd
+dotglob
dvorak
emacs
equals
errexit
@@ -63,14 +65,17 @@
globcomplete
globdots
globstarshort
globsubst
+hashall
hashcmds
hashdirs
hashexecutablesonly
hashlistall
histallowclobber
+histappend
histbeep
+histexpand
histexpiredupsfirst
histfcntllock
histfindnodups
histignorealldups
@@ -106,11 +111,13 @@
localloops
localoptions
localpatterns
localtraps
+log
login
longlistjobs
magicequalsubst
+mailwarn
mailwarning
markdirs
match
menucomplete
@@ -120,11 +127,13 @@
multios
nullglob
numericglobsort
octalzeroes
+onecmd
overstrike
pathdirs
pathscript
+physical
pipefail
posixaliases
posixargzero
posixbuiltins
@@ -140,8 +149,9 @@
promptcr
promptpercent
promptsp
promptsubst
+promptvars
pushdignoredups
pushdminus
pushdsilent
pushdtohome
@@ -163,10 +173,12 @@
shwordsplit
singlecommand
singlelinezle
sourcetrace
+stdin
sunkeyboardhack
tify
+trackall
transientrprompt
trapsasync
typesetsilent
unset
Messages sorted by:
Reverse Date,
Date,
Thread,
Author