Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm
Precedence: bulk
X-No-Archive: yes
List-Id: Zsh Workers List <zsh-workers.zsh.org>
List-Post: <mailto:zsh-workers@zsh.org>
List-Help: <mailto:zsh-workers-help@zsh.org>
X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au
X-Spam-Level: 
X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham
	autolearn_force=no version=3.4.1
X-PDA-ORIGIN: gallois.livando.com
Message-ID: <1455013866.1685.10.camel@gladbachcity.de>
Subject: Re: Segfault when displaying completion lists
From: Christian Heinrich <christian@gladbachcity.de>
To: zsh-workers@zsh.org
Date: Tue, 09 Feb 2016 11:31:06 +0100
In-Reply-To: <160208220038.ZM29149@torch.brasslantern.com>
References: <1454972312.10740.8.camel@gladbachcity.de>
	  <56B92722.7070004@gmx.com> <160208220038.ZM29149@torch.brasslantern.com>
Content-Type: multipart/signed; micalg="pgp-sha512";
	protocol="application/pgp-signature"; boundary="=-F3azCs7iYDCJD3rhvxjg"
X-Mailer: Evolution 3.18.3-1 
Mime-Version: 1.0
X-Seq: zsh-workers 37930

--=-F3azCs7iYDCJD3rhvxjg
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Thanks guys, that was exactly the issue. I recompiled the code and it
works just as it should!

Christian

On Mon, 2016-02-08 at 22:00 -0800, Bart Schaefer wrote:
> On Feb 8,=C2=A0=C2=A06:39pm, Eric Cook wrote:
> }
> } This is a guess:
>=20
> Pretty good one.
>=20
> } If my guess is true, zsh should handle the menuselect keymap not
> } existing more elegantly.
>=20
> This is a bit brute-force, but perhaps the following?=C2=A0=C2=A0It has t=
he
> added
> side-effect that if you create your own keymap named "menuselect"
> and/or
> "listscroll" before loading zsh/complist, your bindings take
> precedence.
>=20
> diff --git a/Src/Zle/complist.c b/Src/Zle/complist.c
> index 06a07a4..937e1d1 100644
> --- a/Src/Zle/complist.c
> +++ b/Src/Zle/complist.c
> @@ -989,6 +989,7 @@ asklistscroll(int ml)
> =C2=A0
> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0fflush(shout);
> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0zsetterm();
> +=C2=A0=C2=A0=C2=A0=C2=A0menuselect_bindings();	/* sanity in case deleted=
 by user
> */
> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0selectlocalmap(lskeymap);
> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (!(cmd =3D getkeycmd()) || cmd =3D=3D Th=
(z_sendbreak))
> =C2=A0	ret =3D 1;
> @@ -2433,6 +2434,7 @@ domenuselect(Hookdef dummy, Chdata dat)
> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0unqueue_signals();
> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0mhasstat =3D (mstatus && *mstatus);
> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0fdat =3D dat;
> +=C2=A0=C2=A0=C2=A0=C2=A0menuselect_bindings();	/* sanity in case deleted=
 by user
> */
> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0selectlocalmap(mskeymap);
> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0noselect =3D 1;
> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0while ((menuacc &&
> @@ -3486,6 +3488,37 @@ enables_(Module m, int **enables)
> =C2=A0}
> =C2=A0
> =C2=A0/**/
> +static void
> +menuselect_bindings(void)
> +{
> +=C2=A0=C2=A0=C2=A0=C2=A0if (!(mskeymap =3D openkeymap("menuselect"))) {
> +	mskeymap =3D newkeymap(NULL, "menuselect");
> +	linkkeymap(mskeymap, "menuselect", 1);
> +	bindkey(mskeymap, "\t", refthingy(t_completeword), NULL);
> +	bindkey(mskeymap, "\n", refthingy(t_acceptline), NULL);
> +	bindkey(mskeymap, "\r", refthingy(t_acceptline), NULL);
> +	bindkey(mskeymap, "\33[A",=C2=A0=C2=A0refthingy(t_uplineorhistory),
> NULL);
> +	bindkey(mskeymap, "\33[B",=C2=A0=C2=A0refthingy(t_downlineorhistory),
> NULL);
> +	bindkey(mskeymap, "\33[C",=C2=A0=C2=A0refthingy(t_forwardchar), NULL);
> +	bindkey(mskeymap, "\33[D",=C2=A0=C2=A0refthingy(t_backwardchar),
> NULL);
> +	bindkey(mskeymap, "\33OA",=C2=A0=C2=A0refthingy(t_uplineorhistory),
> NULL);
> +	bindkey(mskeymap, "\33OB",=C2=A0=C2=A0refthingy(t_downlineorhistory),
> NULL);
> +	bindkey(mskeymap, "\33OC",=C2=A0=C2=A0refthingy(t_forwardchar), NULL);
> +	bindkey(mskeymap, "\33OD",=C2=A0=C2=A0refthingy(t_backwardchar),
> NULL);
> +=C2=A0=C2=A0=C2=A0=C2=A0}
> +=C2=A0=C2=A0=C2=A0=C2=A0if (!(lskeymap =3D openkeymap("listscroll"))) {
> +	lskeymap =3D newkeymap(NULL, "listscroll");
> +	linkkeymap(lskeymap, "listscroll", 1);
> +	bindkey(lskeymap, "\t", refthingy(t_completeword), NULL);
> +	bindkey(lskeymap, " ", refthingy(t_completeword), NULL);
> +	bindkey(lskeymap, "\n", refthingy(t_acceptline), NULL);
> +	bindkey(lskeymap, "\r", refthingy(t_acceptline), NULL);
> +	bindkey(lskeymap, "\33[B",=C2=A0=C2=A0refthingy(t_downlineorhistory),
> NULL);
> +	bindkey(lskeymap, "\33OB",=C2=A0=C2=A0refthingy(t_downlineorhistory),
> NULL);
> +=C2=A0=C2=A0=C2=A0=C2=A0}
> +}
> +
> +/**/
> =C2=A0int
> =C2=A0boot_(Module m)
> =C2=A0{
> @@ -3503,27 +3536,7 @@ boot_(Module m)
> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0}
> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0addhookfunc("comp_list_matches", (Hookfn) c=
omplistmatches);
> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0addhookfunc("menu_start", (Hookfn) domenuse=
lect);
> -=C2=A0=C2=A0=C2=A0=C2=A0mskeymap =3D newkeymap(NULL, "menuselect");
> -=C2=A0=C2=A0=C2=A0=C2=A0linkkeymap(mskeymap, "menuselect", 1);
> -=C2=A0=C2=A0=C2=A0=C2=A0bindkey(mskeymap, "\t", refthingy(t_completeword=
), NULL);
> -=C2=A0=C2=A0=C2=A0=C2=A0bindkey(mskeymap, "\n", refthingy(t_acceptline),=
 NULL);
> -=C2=A0=C2=A0=C2=A0=C2=A0bindkey(mskeymap, "\r", refthingy(t_acceptline),=
 NULL);
> -=C2=A0=C2=A0=C2=A0=C2=A0bindkey(mskeymap, "\33[A",=C2=A0=C2=A0refthingy(=
t_uplineorhistory), NULL);
> -=C2=A0=C2=A0=C2=A0=C2=A0bindkey(mskeymap, "\33[B",=C2=A0=C2=A0refthingy(=
t_downlineorhistory),
> NULL);
> -=C2=A0=C2=A0=C2=A0=C2=A0bindkey(mskeymap, "\33[C",=C2=A0=C2=A0refthingy(=
t_forwardchar), NULL);
> -=C2=A0=C2=A0=C2=A0=C2=A0bindkey(mskeymap, "\33[D",=C2=A0=C2=A0refthingy(=
t_backwardchar), NULL);
> -=C2=A0=C2=A0=C2=A0=C2=A0bindkey(mskeymap, "\33OA",=C2=A0=C2=A0refthingy(=
t_uplineorhistory), NULL);
> -=C2=A0=C2=A0=C2=A0=C2=A0bindkey(mskeymap, "\33OB",=C2=A0=C2=A0refthingy(=
t_downlineorhistory),
> NULL);
> -=C2=A0=C2=A0=C2=A0=C2=A0bindkey(mskeymap, "\33OC",=C2=A0=C2=A0refthingy(=
t_forwardchar), NULL);
> -=C2=A0=C2=A0=C2=A0=C2=A0bindkey(mskeymap, "\33OD",=C2=A0=C2=A0refthingy(=
t_backwardchar), NULL);
> -=C2=A0=C2=A0=C2=A0=C2=A0lskeymap =3D newkeymap(NULL, "listscroll");
> -=C2=A0=C2=A0=C2=A0=C2=A0linkkeymap(lskeymap, "listscroll", 1);
> -=C2=A0=C2=A0=C2=A0=C2=A0bindkey(lskeymap, "\t", refthingy(t_completeword=
), NULL);
> -=C2=A0=C2=A0=C2=A0=C2=A0bindkey(lskeymap, " ", refthingy(t_completeword)=
, NULL);
> -=C2=A0=C2=A0=C2=A0=C2=A0bindkey(lskeymap, "\n", refthingy(t_acceptline),=
 NULL);
> -=C2=A0=C2=A0=C2=A0=C2=A0bindkey(lskeymap, "\r", refthingy(t_acceptline),=
 NULL);
> -=C2=A0=C2=A0=C2=A0=C2=A0bindkey(lskeymap, "\33[B",=C2=A0=C2=A0refthingy(=
t_downlineorhistory),
> NULL);
> -=C2=A0=C2=A0=C2=A0=C2=A0bindkey(lskeymap, "\33OB",=C2=A0=C2=A0refthingy(=
t_downlineorhistory),
> NULL);
> +=C2=A0=C2=A0=C2=A0=C2=A0menuselect_bindings();
> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return 0;
> =C2=A0}
> =C2=A0
--=-F3azCs7iYDCJD3rhvxjg
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: This is a digitally signed message part
Content-Transfer-Encoding: 7bit

-----BEGIN PGP SIGNATURE-----

iQIcBAABCgAGBQJWub/qAAoJEIvOFdNRb8w8D10P+wR6xpLg1EozlXom61ym5g6W
z7OH3pgTgkf1RSKu+Jt1IulYkhimFq6SkBh/Ff2Po0Rsd/ea3oUVvvykV90F9RDN
0URmPIFd12Rncm/Z5NTopifSVZxy+jsP3cmD1u9BUzdau3wTahAHqGlS0LZ7Bkj5
AcJdh/CbuWkCLhEqwrOY4IQSPKmY7pkmLDlrD3iBZzJTH+j0RZPQdpWKzeJ94i9Z
s97/sr6neKPjB+L2ICPH+9bfYGZBIdTrXsIYpaI3wzGFZJN2HVOIjwbGVb8qUXqZ
Bq+a6a/OeMw5S2qDACAElbuUYGfFoOhJ+315cjNRbWukovP5KKJCVgfDJiKD/EPp
83G50+sM6iT5O1W4t5kTJFYynjVP2ClTsLQH66QRZxpkWlJeju0u2sQFSBU/AH5D
aVW1L7oD/x4WYsFzIeCybBL7xPG0ba1rY6E0LZ8Jh0cryfbbc2gQaQQYJYhW+SNv
EaHIgvviUTPD1IW7K3wOhTX5wseYSp5Qp/JOsY0yoFw8Q5VRX7YkB+k0UgiC42WD
RyThueZPtcerEzwoUOzjBEkGng9h8Mhsk56wz4mbHWfoxC63EV13Js0D6CfTd3Dp
tQK3j9nK1OKTJCmHsTqHbWUT3yL7ddWZqbYFBI7zJisSkhMmUD5gQ+gsbOF6p8mA
7LDjAwrmMWeUOxN6g6cr
=9boL
-----END PGP SIGNATURE-----

--=-F3azCs7iYDCJD3rhvxjg--

