Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
[rfc + bad patch] Allow to get the current cursor command from zle, for doing a nicer run-help.
- X-seq: zsh-workers 25810
- From: "Mikael Magnusson" <mikachu@xxxxxxxxx>
- To: zsh-workers <zsh-workers@xxxxxxxxxx>
- Subject: [rfc + bad patch] Allow to get the current cursor command from zle, for doing a nicer run-help.
- Date: Sun, 5 Oct 2008 15:40:17 +0200
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to :subject:mime-version:content-type:content-transfer-encoding :content-disposition; bh=qObgvFRQa43nQg3HnE/9jVszixHlzlVU0vqJWCcplq4=; b=hmFix0JIVv2iYqPkGB8oVmBms5yGR9mWxui7gGzkq2jq/G87vjmj5BBYO8k+onVLTE 6uMhi3GafrLIPv35aNTzX6pMhNNsE8LhwDyVd09+/R+yxB6IIVo6YFy0+fcXHIFK5afb 2c5/xV2CSxE6BW72ZUwIROUxthC4H0Bf6MmO8=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:mime-version:content-type :content-transfer-encoding:content-disposition; b=Dcy/dZOPwbEBlZWrq2BtyI8OId9NWYrFk90U26eAYmgyLOxnVLe60lj3wry4xvn4zj jjD0KMdID4KmJwZMpeLQqMma614/3LH/xUTzPTQ7uCx1LB051LxFeprv9+DqhOHRo8+2 LI/tRpQI5ZfFuIMRMez5FkUdI1FVYZ13bE/GE=
- Mailing-list: contact zsh-workers-help@xxxxxxxxxx; run by ezmlm
(the patch will be badly linebroken likely, but it's just for illustration).
Let's say you have the command line
git add -u; git commit - # hmm, was it -m or -M for message? *press alt-h*
Now, also assume you have the run-help-git stuff set up, but it will still
show you the manpage for git-add instead of git-commit. Since the run-help
widget does a push-line, we can't use $CURSOR to find out which is the actual
command, this is how i solved it.
function _runhelp() {
local lookup
if [[ "$CURSORCOMMAND" = git ]]; then
# tiny bug here, want CURSOR+1 so you get the right result when on the
# first letter, but then it breaks when at the end of the line which is
# the far more common case.
lookup=git-${${(z)BUFFER[(b:CURSOR:R)$CURSORCOMMAND,-1]}[2]}
else
lookup=$CURSORCOMMAND
fi
_runcmdhidden man $lookup
}
function _runcmdhidden() {
"$@" >& /dev/null < /dev/null &|
}
function man () { urxvt +sb +ip -e pinfo -m "$@" &|: }
(this can of course be made to do a push-line manually and open in man in
the same terminal as usual, but I like the new window.)
diff --git a/Src/Zle/zle_params.c b/Src/Zle/zle_params.c
index efa6286..ae5271a 100644
--- a/Src/Zle/zle_params.c
+++ b/Src/Zle/zle_params.c
@@ -48,6 +48,8 @@ static const struct gsu_scalar buffer_gsu =
{ get_buffer, set_buffer, zleunsetfn };
static const struct gsu_scalar context_gsu =
{ get_context, nullstrsetfn, zleunsetfn };
+static const struct gsu_scalar cursor_command_gsu =
+{ getcurcmd, nullstrsetfn, zleunsetfn };
static const struct gsu_scalar cutbuffer_gsu =
{ get_cutbuffer, set_cutbuffer, unset_cutbuffer };
static const struct gsu_scalar keymap_gsu =
@@ -106,6 +108,7 @@ static struct zleparam {
{ "BUFFER", PM_SCALAR, GSU(buffer_gsu), NULL },
{ "BUFFERLINES", PM_INTEGER | PM_READONLY, GSU(bufferlines_gsu),
NULL },
+ { "CURSORCOMMAND", PM_SCALAR | PM_READONLY,
GSU(cursor_command_gsu), NULL },
{ "CONTEXT", PM_SCALAR | PM_READONLY, GSU(context_gsu),
NULL },
{ "CURSOR", PM_INTEGER, GSU(cursor_gsu),
diff --git a/Src/Zle/zle_tricky.c b/Src/Zle/zle_tricky.c
index bc01524..6c57842 100644
--- a/Src/Zle/zle_tricky.c
+++ b/Src/Zle/zle_tricky.c
@@ -2757,7 +2757,7 @@ expandhistory(UNUSED(char **args))
static int cmdwb, cmdwe;
/**/
-static char *
+char *
getcurcmd(void)
{
int curlincmd;
--
Mikael Magnusson
Messages sorted by:
Reverse Date,
Date,
Thread,
Author