components/zsh/patches/fixes.patch
author Jingning Ji <jingning.ji@oracle.com>
Fri, 04 Nov 2016 16:24:42 -0700
changeset 7278 89aa34de7ca6
parent 5493 89a648642682
permissions -rw-r--r--
23131819 Upgrade xml-parser to 2.44
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5493
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     1
Pick up a couple of post-5.2 patches from the list (so no need to push
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     2
these upstream).
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     3
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     4
Fix a segfault in zsh (workers/37337).
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     5
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     6
diff --git a/Src/Zle/zle.h b/Src/Zle/zle.h
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     7
index 2d672de..e9b1428 100644
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     8
--- a/Src/Zle/zle.h
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     9
+++ b/Src/Zle/zle.h
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    10
@@ -213,6 +213,8 @@ struct widget {
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    11
 #define ZLE_KEEPSUFFIX	(1<<9)	/* DON'T remove added suffix */
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    12
 #define ZLE_NOTCOMMAND  (1<<10)	/* widget should not alter lastcmd */
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    13
 #define ZLE_ISCOMP      (1<<11)	/* usable for new style completion */
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    14
+#define WIDGET_INUSE    (1<<12) /* widget is in use */
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    15
+#define WIDGET_FREE     (1<<13) /* request to free when no longer in use */
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    16
 
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    17
 /* thingies */
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    18
 
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    19
diff --git a/Src/Zle/zle_main.c b/Src/Zle/zle_main.c
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    20
index 38427e8..1f0c07d 100644
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    21
--- a/Src/Zle/zle_main.c
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    22
+++ b/Src/Zle/zle_main.c
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    23
@@ -1344,6 +1344,8 @@ execzlefunc(Thingy func, char **args, int set_bindk)
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    24
 	    eofsent = 1;
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    25
 	    ret = 1;
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    26
 	} else {
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    27
+	    int inuse = wflags & WIDGET_INUSE;
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    28
+	    w->flags |= WIDGET_INUSE;
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    29
 	    if(!(wflags & ZLE_KEEPSUFFIX))
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    30
 		removesuffix();
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    31
 	    if(!(wflags & ZLE_MENUCMP)) {
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    32
@@ -1367,6 +1369,12 @@ execzlefunc(Thingy func, char **args, int set_bindk)
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    33
 		ret = w->u.fn(args);
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    34
 		unqueue_signals();
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    35
 	    }
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    36
+	    if (!inuse) {
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    37
+		if (w->flags & WIDGET_FREE)
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    38
+		    freewidget(w);
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    39
+		else
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    40
+		    w->flags &= ~WIDGET_INUSE;
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    41
+	    }
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    42
 	    if (!(wflags & ZLE_NOTCOMMAND))
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    43
 		lastcmd = wflags;
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    44
 	}
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    45
@@ -1387,6 +1395,8 @@ execzlefunc(Thingy func, char **args, int set_bindk)
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    46
 	    int osc = sfcontext, osi = movefd(0);
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    47
 	    int oxt = isset(XTRACE);
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    48
 	    LinkList largs = NULL;
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    49
+	    int inuse = w->flags & WIDGET_INUSE;
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    50
+	    w->flags |= WIDGET_INUSE;
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    51
 
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    52
 	    if (*args) {
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    53
 		largs = newlinklist();
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    54
@@ -1402,8 +1412,15 @@ execzlefunc(Thingy func, char **args, int set_bindk)
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    55
 	    opts[XTRACE] = oxt;
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    56
 	    sfcontext = osc;
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    57
 	    endparamscope();
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    58
-	    lastcmd = w->flags;
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    59
-	    w->flags = 0;
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    60
+	    lastcmd = w->flags & ~(WIDGET_INUSE|WIDGET_FREE);
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    61
+	    if (inuse) {
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    62
+		w->flags &= WIDGET_INUSE|WIDGET_FREE;
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    63
+	    } else {
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    64
+		if (w->flags & WIDGET_FREE)
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    65
+		    freewidget(w);
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    66
+		else
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    67
+		    w->flags = 0;
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    68
+	    }
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    69
 	    r = 1;
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    70
 	    redup(osi, 0);
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    71
 	}
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    72
diff --git a/Src/Zle/zle_thingy.c b/Src/Zle/zle_thingy.c
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    73
index 271fd8e..21495b6 100644
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    74
--- a/Src/Zle/zle_thingy.c
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    75
+++ b/Src/Zle/zle_thingy.c
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    76
@@ -253,9 +253,14 @@ unbindwidget(Thingy t, int override)
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    77
 /* Free a widget. */
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    78
 
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    79
 /**/
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    80
-static void
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    81
+void
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    82
 freewidget(Widget w)
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    83
 {
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    84
+    if (w->flags & WIDGET_INUSE) {
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    85
+	w->flags |= WIDGET_FREE;
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    86
+	return;
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    87
+    }
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    88
+
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    89
     if (w->flags & WIDGET_NCOMP) {
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    90
 	zsfree(w->u.comp.wid);
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    91
 	zsfree(w->u.comp.func);
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    92
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    93
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    94
Fix a bug with bindkey and unicode characters (users/21071).
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    95
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    96
diff --git a/Src/Zle/zle_keymap.c b/Src/Zle/zle_keymap.c
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    97
index 069580f..d6d116b 100644
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    98
--- a/Src/Zle/zle_keymap.c
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    99
+++ b/Src/Zle/zle_keymap.c
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   100
@@ -1503,7 +1503,7 @@ getkeymapcmd(Keymap km, Thingy *funcp, char **strp)
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   101
 		    f->widget->flags & ZLE_VIOPER);
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   102
 #ifdef MULTIBYTE_SUPPORT
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   103
 	    if ((f == Th(z_selfinsert) || f == Th(z_selfinsertunmeta)) &&
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   104
-		!lastchar_wide_valid) {
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   105
+		!lastchar_wide_valid && !ispfx) {
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   106
 		int len;
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   107
 		VARARR(char, mbc, MB_CUR_MAX);
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   108
 		ZLE_INT_T inchar = getrestchar(lastchar, mbc, &len);
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   109
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   110
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   111
_subscript - fix completion of associative array keys (workers/37788)
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   112
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   113
diff --git a/Completion/Zsh/Context/_subscript b/Completion/Zsh/Context/_subscript
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   114
index 0ccc0c4..679f129 100644
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   115
--- a/Completion/Zsh/Context/_subscript
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   116
+++ b/Completion/Zsh/Context/_subscript
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   117
@@ -81,8 +81,8 @@ elif compset -P '\('; then
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   118
 elif [[ ${(Pt)${compstate[parameter]}} = assoc* ]]; then
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   119
   local suf MATCH MBEGIN MEND
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   120
   local -a keys
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   121
-  keys=(${${(kP)compstate[parameter]}//(#m)[\$\\\[\]\(\)\[\{\}]/\\$MATCH})
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   122
-  keys=(${keys//#%(#m)[*@]/(e)$MATCH})
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   123
+  keys=("${(@)${(@k)${(P)compstate[parameter]}}//(#m)[\$\\\[\]\(\)\[\{\}]/\\$MATCH}")
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   124
+  keys=("${(@)keys//#%(#m)[*@]/(e)$MATCH}")
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   125
   [[ "$RBUFFER" != (|\\)\]* ]] && suf="$osuf"
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   126
 
89a648642682 22572444 zsh 5.2
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   127
   _wanted association-keys expl 'association key' \