From: Thilo Six <zsh@xk2c.de>
To: zsh-workers@zsh.org
Subject: [PATCH] allopt() and question
Date: Fri, 6 May 2016 02:17:32 +0200 [thread overview]
Message-ID: <nggnqs$q8i$1@ger.gmane.org> (raw)
[-- Attachment #1: Type: text/plain, Size: 925 bytes --]
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
[-- Attachment #2: 0001-allopt-updated.patch --]
[-- Type: text/x-diff, Size: 2891 bytes --]
>From 24207db8f420e65ba4e98875ee97c398135bb9b2 Mon Sep 17 00:00:00 2001
From: Thilo Six <zsh@xk2c.de>
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
[-- Attachment #3: missing_options --]
[-- Type: text/plain, Size: 1223 bytes --]
--- 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
next reply other threads:[~2016-05-06 0:37 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-06 0:17 Thilo Six [this message]
2016-05-06 6:03 ` Sebastian Gniazdowski
2016-05-06 9:52 ` Thilo Six
2016-05-10 18:55 ` Thilo Six
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='nggnqs$q8i$1@ger.gmane.org' \
--to=zsh@xk2c.de \
--cc=zsh-workers@zsh.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).