/usr/share/zsh/functions/Zle/send-invisible is in zsh-common 5.3.1-4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | #autoload
# send-invisible reads a line from the terminal, displaying an
# asterisk for each character typed. It stores the line in the
# global variable INVISIBLE, and when finished reading, inserts
# the string ${INVISIBLE} into the original command buffer.
# If one argument is given, it is the prompt. The default is
# "Non-echoed text: "
# If two or three arguments are given, they form the prefix and
# suffix of the inserted INVISIBLE. Defaults are '${' and '}'
# but these can be replaced, for example with '"${' and '}"' to
# enclose the whole word in double quotes, or '${(z)' and '}' to
# split the value of $INVISIBLE like the shell parser.
# To use:
# autoload -Uz send-invisible
# zle -N send-invisible
# bindkey '^X ' send-invisible
# Or more elaborately:
# hidden-command() { send-invisible '% ' '${(z)' '}' }
# zle -N hidden-command
# bindkey '^X%' hidden-command
# Shamelessly cribbed from read-from-minibuffer.
emulate -L zsh
# Hide the value of INVISIBLE in any output of set and typeset
typeset -g -H INVISIBLE=
local pretext="$PREDISPLAY$LBUFFER$RBUFFER$POSTDISPLAY"$'\n'
# Can't directly make these locals because send-invisible is
# called as a widget, so these special variables are already
# local at the current level and wouldn't get restored
local save_lbuffer=$LBUFFER
local save_rbuffer=$RBUFFER
local save_predisplay=$PREDISPLAY
local save_postdisplay=$POSTDISPLAY
local -a save_region_highlight
save_region_highlight=("${region_highlight[@]}")
{
local lb rb opn=${2:-'${'} cls=${3:-'}'}
LBUFFER=
RBUFFER=
PREDISPLAY="$pretext${1:-Non-echoed text: }"
POSTDISPLAY=
region_highlight=("P${(m)#pretext} ${(m)#PREDISPLAY} bold")
while zle -R && zle .read-command
do
# There are probably more commands that should go into
# the first clause here to harmlessly beep, because ...
case $REPLY in
(send-invisible|run-help|undefined-key|where-is|which-command)
zle .beep;;
(push-*|send-break) INVISIBLE=;&
(accept-*) break;;
(*)
LBUFFER=$lb
RBUFFER=$rb
zle $REPLY # ... this could expose something
lb=$LBUFFER
rb=$RBUFFER
INVISIBLE=$BUFFER
LBUFFER=${(l:$#LBUFFER::*:):-}
RBUFFER=${(l:$#RBUFFER::*:):-}
;;
esac
done
} always {
LBUFFER=$save_lbuffer
RBUFFER=$save_rbuffer
PREDISPLAY=$save_predisplay
POSTDISPLAY=$save_postdisplay
region_highlight=("${save_region_highlight[@]}")
zle -R
# Now that the highlight has been restored with all the old
# text and cursor positioning, insert the new text.
LBUFFER+=${INVISIBLE:+${opn}INVISIBLE${cls}}
}
|