From: "Mikael Magnusson" <mikachu@gmail.com>
To: zsh-workers <zsh-workers@sunsite.dk>
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 [thread overview]
Message-ID: <237967ef0810050640n7c536bafl9255e870f83d15f8@mail.gmail.com> (raw)
(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
next reply other threads:[~2008-10-05 13:41 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-05 13:40 Mikael Magnusson [this message]
2008-10-05 19:08 ` Bart Schaefer
2008-10-05 20:38 ` Mikael Magnusson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=237967ef0810050640n7c536bafl9255e870f83d15f8@mail.gmail.com \
--to=mikachu@gmail.com \
--cc=zsh-workers@sunsite.dk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).