Commit 22cf83b3 authored by Axel Beckert's avatar Axel Beckert

Merge tag 'zsh-5.1-test-1' into debian

parents 6c27cb3d eaea1dc2
2015-09-06 Peter Stephenson <p.w.stephenson@ntlworld.com>
* unposted: Config/versiom.mk, Etc/FAQ.yo, NEWS, README: make
5.1-test-1 with updates for 5.1.1.
2015-09-05 Daniel Shahaf <d.s@daniel.shahaf.name>
* unposted: Doc/Zsh/params.yo Doc/Zsh/zle.yo: Minor documentation
tweaks.
* 36410: Doc/Zsh/contrib.yo
Functions/VCS_Info/Backends/VCS_INFO_get_data_git: vcs_info git:
Present merge heads as patches
2015-09-04 Peter Stephenson <p.stephenson@samsung.com>
* 36421: Src/pattern.c: can't-get-the-staff fix for idiocy in
36415.
2015-09-04 Jun-ichi Takimoto <takimoto-j@kba.biglobe.ne.jp>
* 36417: Doc/Zsh/manual.yo: fix/update top level texinfo menu
2015-09-04 Peter Stephenson <p.stephenson@samsung.com>
* 36415: Src/pattern.c, Test/D07multibyte.ztst: remap bytes from
invalid multibyte characters to 0xDC00 + index which is invalid
in Unicode. Strictly this only works if whcar_t is
ISO-10646-compliant, however it ought to be at least as good as
the current fudge in any case.
2015-09-03 Peter Stephenson <p.stephenson@samsung.com>
* 36416: Src/Zle/zle_refresh.c, Src/Zle/zle_utils.c: If
keyboard interrupt during getzlequery(), don't propagate further,
just redraw the line. Also handle logical error that we
attempted to redraw the line partially if an error or interrupt
was propagated.
2015-09-03 Daniel Shahaf <d.s@daniel.shahaf.name>
* 36403: Src/hashtable.c Test/A02alias.ztst: type -w +=
suffix alias
2015-09-02 Barton E. Schaefer <schaefer@zsh.org>
* unposted: Test/A05execution.ztst: test for 36393
* 36393: Src/signals.c: process queued signals during dotrap()
2015-09-02 Peter Stephenson <p.w.stephenson@ntlworld.com>
* 36378: Src/exec.c: skip directories when looking for autoload
files.
2015-09-02 Peter Stephenson <p.stephenson@samsung.com>
* 36399: Src/text.c, Test/A04redirect.ztst: shell code with
multiple here documents wasn't shown properly.
2015-09-01 Mikael Magnusson <mikachu@gmail.com>
* 36380: Src/utils.c: Avoid gcc case syntax
* 36347: Src/params.c, Test/A06assign.ztst: Fix appending empty
array to associations
2015-09-01 Barton E. Schaefer <schaefer@zsh.org>
* 36376: Src/utils.c: handle signals during read1char() so it is
possible to interrupt correct/correctall prompts
2015-09-01 Peter Stephenson <p.stephenson@samsung.com>
* 36365: Src/Zle/zle_tricky.c: magic-space removed the rest of
the line if the lexer found something complicated.
* unposted: Config/version.mk: update version to 5.1-dev-0 to
avoid clash with 5.1 release.
2015-09-01 Daniel Shahaf <d.s@daniel.shahaf.name>
* 36353: Completion/Unix/Command/_git: _git: Unbreak after
previous.
2015-08-30 Mateusz Karbowy <mateusz.karbowy@gmail.com>
* 36328 + 36340: Completion/Unix/Command/_git: _git-cherry-pick:
Complete other branches only
2015-08-30 Axel Beckert <abe@deuxchevaux.org>
* 36338: Functions/Zle/*-magic: s/5.0.9/5.1/ in source comments
2015-08-30 Peter Stephenson <p.w.stephenson@ntlworld.com>
* unposted: Config/version.mk: Release version 5.1
......
......@@ -493,6 +493,8 @@ _git-checkout () {
(( $+functions[_git-cherry-pick] )) ||
_git-cherry-pick () {
local -a git_commit_opts
git_commit_opts=(--all --not HEAD --not)
_arguments \
'(- :)--quit[end revert or cherry-pick sequence]' \
'(- :)--continue[resume revert or cherry-pick sequence]' \
......@@ -509,7 +511,7 @@ _git-cherry-pick () {
'*'{-s,--strategy=}'[use given merge strategy]:merge strategy:__git_merge_strategies' \
'*'{-X,--strategy-option=}'[pass merge-strategy-specific option to merge strategy]' \
'(-e --edit -x -n --no-commit -s --signoff)--ff[fast forward, if possible]' \
': :__git_commit_ranges'
': : __git_commit_ranges -O expl:git_commit_opts'
}
(( $+functions[_git-citool] )) ||
......@@ -5556,20 +5558,31 @@ __git_remote_branch_names_noprefix () {
(( $+functions[__git_commit_objects_prefer_recent] )) ||
__git_commit_objects_prefer_recent () {
__git_recent_commits || __git_commit_objects
local -a argument_array_names
zparseopts -D -E O:=argument_array_names
__git_recent_commits $argument_array_names || __git_commit_objects
}
(( $+functions[__git_commits] )) ||
__git_commits () {
local -a argument_array_names
zparseopts -D -E O:=argument_array_names
# Turn (-O foo:bar) to (foo bar)
(( $#argument_array_names )) && argument_array_names=( "${(@s/:/)argument_array_names[2]}" )
set -- "${(@P)argument_array_names[1]}"
local commit_opts__argument_name=$argument_array_names[2]
# TODO: deal with things that __git_heads and __git_tags has in common (i.e.,
# if both exists, they need to be completed to heads/x and tags/x.
local -a sopts ropt
local -a sopts ropt expl
zparseopts -E -a sopts S: r:=ropt R: q
sopts+=( $ropt:q )
expl=( "$@" )
_alternative \
"heads::__git_heads $sopts" \
"commit-tags::__git_commit_tags $sopts" \
'commit-objects::__git_commit_objects_prefer_recent'
'commit-objects:: __git_commit_objects_prefer_recent -O expl:$commit_opts__argument_name'
}
(( $+functions[__git_heads] )) ||
......@@ -5624,29 +5637,44 @@ __git_commit_objects () {
(( $+functions[__git_recent_commits] )) ||
__git_recent_commits () {
local gitdir expl start
declare -a descr tags heads commits
declare -a descr tags heads commits argument_array_names commit_opts
local i j k ret
integer distance_from_head
local label
zparseopts -D -E O:=argument_array_names
# Turn (-O foo:bar) to (foo bar)
(( $#argument_array_names )) && argument_array_names=( "${(@s/:/)argument_array_names[2]}" )
(( $#argument_array_names > 1 )) && (( ${(P)+argument_array_names[2]} )) &&
commit_opts=( "${(@P)argument_array_names[2]}" )
# Careful: most %d will expand to the empty string. Quote properly!
# NOTE: we could use %D directly, but it's not available in git 1.9.1 at least.
commits=("${(f)"$(_call_program commits git --no-pager log -20 --format='%h%n%d%n%s\ \(%cr\)')"}")
commits=("${(f)"$(_call_program commits git --no-pager log $commit_opts -20 --format='%h%n%d%n%s\ \(%cr\)')"}")
__git_command_successful $pipestatus || return 1
for i j k in "$commits[@]" ; do
# Note: the after-the-colon part must be unique across the entire array;
# see workers/34768
if (( distance_from_head == 0 )); then
descr+=($i:"[HEAD] $k")
if (( $#commit_opts )); then
# $commit_opts is set, so the commits we receive might not be in order,
# or might not be ancestors of HEAD. However, we must make the
# description unique (due to workers/34768), which we do by including the
# hash. Git always prints enough hash digits to make the output unique.)
label="[$i]"
elif (( distance_from_head == 0 )); then
label="[HEAD] "
elif (( distance_from_head == 1 )); then
descr+=($i:"[HEAD^] $k")
label="[HEAD^] "
elif (( distance_from_head == 2 )); then
descr+=($i:"[HEAD^^] $k")
label="[HEAD^^] "
elif (( distance_from_head < 10 )); then
descr+=($i:"[HEAD~$distance_from_head] $k")
label="[HEAD~$distance_from_head] "
else
descr+=($i:"[HEAD~$distance_from_head] $k")
label="[HEAD~$distance_from_head]"
fi
# label is now 9 bytes, so the descriptions ($k) will be aligned.
descr+=($i:"${label} $k")
(( ++distance_from_head ))
j=${${j# \(}%\)} # strip leading ' (' and trailing ')'
......@@ -5713,13 +5741,23 @@ __git_commits2 () {
(( $+functions[__git_commit_ranges] )) ||
__git_commit_ranges () {
local -a argument_array_names
zparseopts -D -E O:=argument_array_names
# Turn (-O foo:bar) to (foo bar)
(( $#argument_array_names )) && argument_array_names=( "${(@s/:/)argument_array_names[2]}" )
set -- "${(@P)argument_array_names[1]}"
local commit_opts__argument_name=$argument_array_names[2]
local -a suf
local -a expl
if compset -P '*..(.|)'; then
__git_commits $*
expl=( $* )
else
compset -S '..*' || suf=( -S .. -r '.@~ ^:\t\n\-' )
__git_commits $* $suf
expl=( $* $suf )
fi
__git_commits -O expl:$commit_opts__argument_name
}
(( $+functions[__git_commit_ranges2] )) ||
......
......@@ -27,5 +27,5 @@
# This must also serve as a shell script, so do not add spaces around the
# `=' signs.
VERSION=5.1
VERSION_DATE='August 30, 2015'
VERSION=5.1-test-1
VERSION_DATE='September 6, 2015'
......@@ -1339,7 +1339,7 @@ tt(formats) and tt(actionformats) and will be available in the global
tt(backend_misc) array as tt(${backend_misc[bookmarks]}).
)
item(tt(gen-applied-string))(
Called in the tt(git) (with tt(stgit) or during rebase), and tt(hg)
Called in the tt(git) (with tt(stgit) or during rebase or merge), and tt(hg)
(with tt(mq)) backends and in tt(quilt) support when the tt(applied-string)
is generated; the tt(use-quilt) zstyle must be true for tt(quilt) (the tt(mq)
and tt(stgit) backends are active by default).
......
......@@ -61,8 +61,6 @@ menu(The Zsh Web Page)
menu(The Zsh Userguide)
menu(See Also)
Roadmap
Invocation
menu(Compatibility)
......@@ -107,12 +105,10 @@ menu(Single Letter Options)
Zsh Line Editor
menu(Movement)
menu(History Control)
menu(Modifying Text)
menu(Arguments)
menu(Completion)
menu(Miscellaneous)
menu(Keymaps)
menu(Zle Builtins)
menu(Zle Widgets)
menu(Character Highlighting)
Completion Widgets
......@@ -143,6 +139,14 @@ Zsh Modules
includefile(Zsh/manmodmenu.yo)
Calendar Function System
menu(Calendar File and Date Formats)
menu(Calendar System User Functions)
menu(Calendar Styles)
menu(Calendar Utility Functions)
menu(Calendar Bugs)
TCP Function System
menu(TCP Functions)
......@@ -159,8 +163,14 @@ menu(Miscellaneous Features)
User Contributions
menu(Utilities)
menu(Recent Directories)
menu(Version Control Information)
menu(Prompt Themes)
menu(ZLE Functions)
menu(Exception Handling)
menu(MIME Functions)
menu(Mathematical Functions)
menu(User Configuration Functions)
menu(Other Functions)
endmenu()
......
......@@ -60,7 +60,7 @@ When the integer attribute, tt(-i), or a floating point attribute, tt(-E)
or tt(-F), is set for var(name), the var(value) is subject to arithmetic
evaluation. Furthermore, by replacing `tt(=)' with `tt(+=)', a parameter
can be incremented or appended to. See noderef(Array Parameters) and
ifzman(em(Arithmetic Evaluation) LPAR()in zmanref(zshexpn)RPAR())\
ifzman(em(Arithmetic Evaluation) LPAR()in zmanref(zshmisc)RPAR())\
ifnzman(noderef(Arithmetic Evaluation))
for additional forms of assignment.
......
......@@ -34,7 +34,8 @@ The parameter tt(zle_highlight) is also used by the line editor; see
ifzman(em(Character Highlighting) below)\
ifnzman(noderef(Character Highlighting)). Highlighting
of special characters and the region between the cursor and the
mark (as set with tt(set-mark-command) in Emacs mode) is enabled
mark (as set with tt(set-mark-command) in Emacs mode, or by tt(visual-mode)
in Vi mode) is enabled
by default; consult this reference for more information. Irascible
conservatives will wish to know that all highlighting may be disabled by
the following setting:
......@@ -43,7 +44,7 @@ example(zle_highlight=(none))
In many places, references are made to the tt(numeric argument). This can
by default be entered in emacs mode by holding the alt key and typing
a number, or pressing escape before each number, and in vi command mode
a number, or pressing escape before each digit, and in vi command mode
by typing the number before entering a command. Generally the numeric
argument causes the next command entered to be repeated the specified
number of times, unless otherwise noted below. See also
......
......@@ -306,7 +306,7 @@ sect(On what machines will it run?)
sect(What's the latest version?)
Zsh 5.1 is the latest production version. For details of all the
Zsh 5.1/1 is the latest production version. For details of all the
changes, see the NEWS file in the source distribution.
A beta of the next version is sometimes available. Development of zsh is
......
......@@ -230,6 +230,23 @@ elif [[ -d "${gitdir}/rebase-apply" ]]; then
fi
git_patches_unapplied=($(seq $cur $(< "${patchdir}/last")))
VCS_INFO_git_handle_patches
elif [[ -f "${gitdir}/MERGE_HEAD" ]]; then
# This is 'git merge --no-commit'
local -a heads=( ${(@f)"$(<"${gitdir}/MERGE_HEAD")"} )
local subject;
IFS='' read -r subject < "${gitdir}/MERGE_MSG"
# $subject is the subject line of the would-be commit
# Maybe we can get the subject lines of MERGE_HEAD's commits cheaply?
local p
for p in $heads[@]; do
git_patches_applied+=("$p $subject")
done
unset p
# Not touching git_patches_unapplied
VCS_INFO_git_handle_patches
else
gitmisc=''
......
# Starting with zsh-5.0.9, ZLE began to recognize the "bracketed paste"
# Starting with zsh-5.1, ZLE began to recognize the "bracketed paste"
# capability of terminal emulators, that is, the sequences $'\e[200~' to
# start a paste and $'\e[201~' to indicate the end of the pasted text.
# Pastes are handled by the bracketed-paste widget and insert literally
......
......@@ -8,7 +8,7 @@
# autoload -Uz url-quote-magic
# zle -N self-insert url-quote-magic
# As of zsh-5.0.9, the following may also be necessary in order to apply
# As of zsh-5.1, the following may also be necessary in order to apply
# quoting to copy-pasted URLs:
# autload -Uz bracketed-paste-magic
# zle -N bracketed-paste bracketed-paste-magic
......
......@@ -4,6 +4,8 @@ CHANGES FROM PREVIOUS VERSIONS OF ZSH
Note also the list of incompatibilities in the README file.
There are no significant changes between 5.1 and 5.1.1.
Changes from 5.0.8 to 5.1
-------------------------
......
......@@ -5,11 +5,13 @@ THE Z SHELL (ZSH)
Version
-------
This is version 5.1 of the shell. This is a stable release. There are
This is version 5.1.1 of the shell. This is a stable release. There are
a few visible improvements since 5.0.8 as well as many bugfixes. Note
in particular the two changes highlighted under "Incompatibilites
between 5.0.8 and 5.1" below. See NEWS for more information.
There are only bug fixes between 5.1 and 5.1.1.
Installing Zsh
--------------
......
......@@ -2386,7 +2386,7 @@ domenuselect(Hookdef dummy, Chdata dat)
* to be metafied locally in a couple of places.
* It's horrifically difficult to work out where the line
* is metafied, so I've resorted to the following.
* Unfortunately we need to unmetatfy in zrefresh() when
* Unfortunately we need to unmetafy in zrefresh() when
* we want to display something. Maybe this function can
* be done better.
*/
......
......@@ -1761,7 +1761,8 @@ singlelineout:
inlist = 1;
listmatches();
inlist = 0;
zrefresh();
if (!errflag)
zrefresh();
}
if (showinglist == -1)
showinglist = nlnct;
......
......@@ -2812,6 +2812,8 @@ doexpandhist(void)
do {
ctxtlex();
} while (tok != ENDINPUT && tok != LEXERR);
if (tok == LEXERR)
lexstop = 0;
while (!lexstop)
hgetc();
/* We have to save errflags because it's reset in zcontext_restore. Since *
......
......@@ -1183,6 +1183,11 @@ getzlequery(void)
/* get a character from the tty and interpret it */
c = getfullchar(0);
/*
* We'll interpret an interruption here as only interrupting the
* query, not the line editor.
*/
errflag &= ~ERRFLAG_INT;
if (c == ZWC('\t'))
c = ZWC('y');
else if (ZC_icntrl(c) || c == ZLEEOF)
......
......@@ -5392,7 +5392,9 @@ getfpfunc(char *s, int *ksh, char **fname)
}
unmetafy(buf, NULL);
if (!access(buf, R_OK) && (fd = open(buf, O_RDONLY | O_NOCTTY)) != -1) {
if ((len = lseek(fd, 0, 2)) != -1) {
struct stat st;
if (!fstat(fd, &st) && S_ISREG(st.st_mode) &&
(len = lseek(fd, 0, 2)) != -1) {
d = (char *) zalloc(len + 1);
lseek(fd, 0, 0);
if ((rlen = read(fd, d, len)) >= 0) {
......
......@@ -1234,7 +1234,10 @@ printaliasnode(HashNode hn, int printflags)
}
if (printflags & PRINT_WHENCE_WORD) {
printf("%s: alias\n", a->node.nam);
if (a->node.flags & ALIAS_SUFFIX)
printf("%s: suffix alias\n", a->node.nam);
else
printf("%s: alias\n", a->node.nam);
return;
}
......
......@@ -3312,9 +3312,12 @@ arrhashsetfn(Param pm, char **val, int augment)
zerr("bad set of key/value pairs for associative array");
return;
}
if (alen)
if (!(augment && (ht = paramtab = pm->gsu.h->getfn(pm))))
ht = paramtab = newparamtable(17, pm->node.nam);
if (augment) {
ht = paramtab = pm->gsu.h->getfn(pm);
}
if (alen && (!augment || !paramtab)) {
ht = paramtab = newparamtable(17, pm->node.nam);
}
while (*aptr) {
/* The parameter name is ztrdup'd... */
v->pm = createparam(*aptr, PM_SCALAR|PM_UNSET);
......
......@@ -224,6 +224,22 @@ typedef zlong zrange_t;
typedef unsigned long zrange_t;
#endif
#ifdef MULTIBYTE_SUPPORT
/*
* Handle a byte that's not part of a valid character.
*
* This range in Unicode is recommended for purposes of this
* kind as it corresponds to invalid characters.
*
* Note that this strictly only works if wchar_t represents
* Unicode code points, which isn't necessarily true; however,
* converting an invalid character into an unknown format is
* a bit tricky...
*/
#define WCHAR_INVALID(ch) \
((wchar_t) (0xDC00 + STOUC(ch)))
#endif /* MULTIBYTE_SUPPORT */
/*
* Array of characters corresponding to zpc_chars enum, which it must match.
*/
......@@ -353,10 +369,10 @@ metacharinc(char **x)
return wc;
}
/* Error. Treat as single byte. */
/* Error. */
/* Reset the shift state for next time. */
memset(&shiftstate, 0, sizeof(shiftstate));
return (wchar_t) STOUC(*(*x)++);
return WCHAR_INVALID(*(*x)++);
}
#else
......@@ -1867,10 +1883,10 @@ charref(char *x, char *y)
ret = mbrtowc(&wc, x, y-x, &shiftstate);
if (ret == MB_INVALID || ret == MB_INCOMPLETE) {
/* Error. Treat as single byte. */
/* Error. */
/* Reset the shift state for next time. */
memset(&shiftstate, 0, sizeof(shiftstate));
return (wchar_t) STOUC(*x);
return WCHAR_INVALID(*x);
}
return wc;
......@@ -1922,7 +1938,7 @@ charrefinc(char **x, char *y, int *z)
*z = 1;
/* Reset the shift state for next time. */
memset(&shiftstate, 0, sizeof(shiftstate));
return (wchar_t) STOUC(*(*x)++);
return WCHAR_INVALID(*(*x)++);
}
/* Nulls here are normal characters */
......
......@@ -1348,6 +1348,7 @@ void
dotrap(int sig)
{
void *funcprog;
int q = queue_signal_level();
if (sigtrapped[sig] & ZSIG_FUNC) {
HashNode hn = gettrapnode(sig, 0);
......@@ -1370,5 +1371,9 @@ dotrap(int sig)
if ((sigtrapped[sig] & ZSIG_IGNORED) || !funcprog || errflag)
return;
dont_queue_signals();
dotrapargs(sig, sigtrapped+sig, funcprog);
restore_queue_signals(q);
}
......@@ -77,8 +77,8 @@ taddpending(char *str1, char *str2)
*/
if (tpending) {
int oldlen = strlen(tpending);
tpending = zrealloc(tpending, len + oldlen);
sprintf(tpending + oldlen, "%s%s", str1, str2);
tpending = zrealloc(tpending, len + oldlen + 1);
sprintf(tpending + oldlen, "\n%s%s", str1, str2);
} else {
tpending = (char *)zalloc(len);
sprintf(tpending, "%s%s", str1, str2);
......
......@@ -2538,11 +2538,16 @@ static int
read1char(int echo)
{
char c;
int q = queue_signal_level();
dont_queue_signals();
while (read(SHTTY, &c, 1) != 1) {
if (errno != EINTR || errflag || retflag || breaks || contflag)
if (errno != EINTR || errflag || retflag || breaks || contflag) {
restore_queue_signals(q);
return -1;
}
}
restore_queue_signals(q);
if (echo)
write_loop(SHTTY, &c, 1);
return STOUC(c);
......@@ -3083,7 +3088,8 @@ morefmt:
case '#':
case '_':
case '-':
case '0' ... '9':
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
goto morefmt;
strftimehandling:
default:
......
......@@ -91,5 +91,8 @@
0:unalias -a
alias -s foo=print
type bar.foo; type -w bar.foo
unalias -as
0:unalias -as
>foo is a suffix alias for print
>foo: suffix alias
......@@ -555,3 +555,34 @@
0:Assignment with exec used for redirection: POSIX_BUILTINS
>x=And this
?This should appear, too
fn-two-heres() {
# tabs below
cat <<-x <<-y
foo
x
bar
y
}
which -x2 fn-two-heres
fn-two-heres
eval "$(which -x2 fn-two-heres)"
fn-two-heres
print $functions[fn-two-heres]
0:Two here-documents in a line are shown correctly.
>fn-two-heres () {
> cat <<x <<y
>foo
>x
>bar
>y
>}
>foo
>bar
>foo
>bar
> cat <<x <<y
>foo
>x
>bar
>y
......@@ -288,3 +288,12 @@ F:anonymous function, and a descriptor leak when backgrounding a pipeline
>0
>0
>0
# Regression test for workers/36392
print -u $ZTST_fd 'This test takes 3 seconds and hangs the shell when it fails...'
callfromchld() { true && { print CHLD } }
TRAPCHLD() { callfromchld }
sleep 2 & sleep 3; print OK
0:Background job exit does not affect reaping foreground job
>CHLD
>OK
......@@ -249,6 +249,14 @@
>2
>3
typeset -A h
h=(a 1 b 2)
h+=()
print -l $h
0:add empty array to association
>1
>2
# tests of var[range]+=scalar
s=sting
......
......@@ -508,3 +508,20 @@
cd ..
}
0:cd with special characters
test_array=(
'[[ \xcc = \xcc ]]'
'[[ \xcc != \xcd ]]'
'[[ \xcc != \ucc ]]'
'[[ \ucc = \ucc ]]'
'[[ \ucc = [\ucc] ]]'
'[[ \xcc != [\ucc] ]]'
# Not clear how useful the following is...
'[[ \xcc = [\xcc] ]]'
)
for test in $test_array; do
if ! eval ${(g::)test} ; then
print -rl "Test $test failed" >&2
fi
done
0:Invalid characters in pattern matching
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment