mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-09-28 15:01:21 +02:00
22885: fix problems with multibyte tokenized strings
unposted: _todo.sh: more contexts
This commit is contained in:
parent
d3fe55f08b
commit
7d75ea056b
@ -1,3 +1,11 @@
|
||||
2006-10-19 Peter Stephenson <pws@csr.com>
|
||||
|
||||
* unposted: Completion/Unix/Command/_todo.sh: more places
|
||||
where we complete priorities and contexts.
|
||||
|
||||
* quoted in 22885: Src/utils.c: 22544 introduced problems
|
||||
with multibyte tokenized strings.
|
||||
|
||||
2006-10-17 Peter Stephenson <p.w.stephenson@ntlworld.com>
|
||||
|
||||
* unposted, c.f. 22833: rename Completion/Mandrake and
|
||||
|
@ -3,9 +3,12 @@
|
||||
# See http://todotxt.com for todo.sh.
|
||||
#
|
||||
# Featurettes:
|
||||
# - "replace" will complete the original text for editing.
|
||||
# - "replace" will complete the original text for editing
|
||||
# - completing priorities will cycle through A to Z (even without
|
||||
# menu completion).
|
||||
# menu completion)
|
||||
# - list and listall will complete p:<project> and @<where> from
|
||||
# values in existing entries
|
||||
# - will complete after p: and @ if typed in message text
|
||||
|
||||
setopt localoptions braceccl
|
||||
|
||||
@ -57,7 +60,11 @@ case $state in
|
||||
nextstate=pri
|
||||
;;
|
||||
(append|prepend)
|
||||
_message $txtmsg
|
||||
if [[ -prefix p: || -prefix @ ]]; then
|
||||
nextstate=proj
|
||||
else
|
||||
_message $txtmsg
|
||||
fi
|
||||
;;
|
||||
(replace)
|
||||
compadd -Q -- "${(qq)$(todo.sh list "^0*${words[CURRENT-1]} ")##<-> }"
|
||||
@ -67,14 +74,15 @@ case $state in
|
||||
;;
|
||||
|
||||
(add)
|
||||
_message $txtmsg
|
||||
if [[ -prefix p: || -prefix @ ]]; then
|
||||
nextstate=proj
|
||||
else
|
||||
_message $txtmsg
|
||||
fi
|
||||
;;
|
||||
|
||||
(list|listall)
|
||||
# This completes stuff beginning with p: (projects) or @ (contexts);
|
||||
# these are todo.sh conventions.
|
||||
_wanted search expl 'context or project' \
|
||||
compadd ${${=${${(M)${(f)"$(todo.sh list)"}##<-> *}##<-> }}:#^(p:*|@*)}
|
||||
nextstate=proj
|
||||
;;
|
||||
|
||||
(listpri)
|
||||
@ -103,4 +111,12 @@ case $nextstate in
|
||||
_wanted priority expl 'priority' compadd {A-Z}
|
||||
fi
|
||||
;;
|
||||
|
||||
(proj)
|
||||
# This completes stuff beginning with p: (projects) or @ (contexts);
|
||||
# these are todo.sh conventions.
|
||||
_wanted search expl 'context or project' \
|
||||
compadd ${${=${${(M)${(f)"$(todo.sh list)"}##<-> *}##<-> }}:#^(p:*|@*)}
|
||||
;;
|
||||
esac
|
||||
|
||||
|
15
Src/utils.c
15
Src/utils.c
@ -4003,6 +4003,21 @@ mb_metacharlenconv(const char *s, wint_t *wcp)
|
||||
*wcp = (wint_t)(*s == Meta ? s[1] ^ 32 : *s);
|
||||
return 1 + (*s == Meta);
|
||||
}
|
||||
/*
|
||||
* We have to handle tokens here, since we may be looking
|
||||
* through a tokenized input. Obviously this isn't
|
||||
* a valid multibyte character, so just return WEOF
|
||||
* and let the caller handle it as a single character.
|
||||
*
|
||||
* TODO: I've a sneaking suspicion we could do more here
|
||||
* to prevent the caller always needing to handle invalid
|
||||
* characters specially, but sometimes it may need to know.
|
||||
*/
|
||||
if (itok(*s)) {
|
||||
if (wcp)
|
||||
*wcp = EOF;
|
||||
return 1;
|
||||
}
|
||||
|
||||
ret = MB_INVALID;
|
||||
for (ptr = s; *ptr; ) {
|
||||
|
Loading…
Reference in New Issue
Block a user