1
0
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:
Peter Stephenson 2006-10-19 08:40:58 +00:00
parent d3fe55f08b
commit 7d75ea056b
3 changed files with 47 additions and 8 deletions

@ -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

@ -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; ) {