aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--Makefile1
-rw-r--r--config.def.h2
-rwxr-xr-xst-cpycmd36
3 files changed, 39 insertions, 0 deletions
diff --git a/Makefile b/Makefile
index af75c19..8f6b86c 100644
--- a/Makefile
+++ b/Makefile
@@ -37,6 +37,7 @@ dist: clean
install: st
mkdir -p $(DESTDIR)$(PREFIX)/bin
cp -f st $(DESTDIR)$(PREFIX)/bin
+ cp -f st-cpycmd $(DESTDIR)$(PREFIX)/bin
cp -f st-cpyout $(DESTDIR)$(PREFIX)/bin
cp -f st-links $(DESTDIR)$(PREFIX)/bin
chmod 755 $(DESTDIR)$(PREFIX)/bin/st
diff --git a/config.def.h b/config.def.h
index c41e29b..740e041 100644
--- a/config.def.h
+++ b/config.def.h
@@ -188,6 +188,7 @@ static MouseShortcut mshortcuts[] = {
static char *linkviewcmd[] = { "/usr/bin/zsh", "-ic",
"linkview $(tmp=$(xurls | uniq | sed 's/\\[[0-9].*\\]//'); IFS=; [ ! -z $tmp ] && echo $tmp | dmenu -i -l 20 | tr -d '\n' | cat) --dmenu",
"externalpipe", NULL };
+static char *cpycmdcmd[] = { "/bin/sh", "-c", "/usr/local/bin/st-cpycmd", "externalpipe", NULL };
static char *cpyoutcmd[] = { "/bin/sh", "-c", "/usr/local/bin/st-cpyout", "externalpipe", NULL };
static char *cpyoutnopcmd[] = { "/bin/sh", "-c", "/usr/local/bin/st-cpyout noprompt", "externalpipe", NULL };
@@ -219,6 +220,7 @@ static Shortcut shortcuts[] = {
{ TERMMOD, XK_I, externalpipe, {.v = linkviewcmd } },
{ TERMMOD, XK_P, externalpipe, {.v = cpyoutcmd} },
{ TERMMOD, XK_O, externalpipe, {.v = cpyoutnopcmd} },
+ { TERMMOD, XK_L, externalpipe, {.v = cpycmdcmd} },
};
/*
diff --git a/st-cpycmd b/st-cpycmd
new file mode 100755
index 0000000..aff6b2a
--- /dev/null
+++ b/st-cpycmd
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+# Using external pipe with st, give a dmenu prompt of recent commands,
+# allowing the user to copy the command lines inputed
+# xclip required for this script.
+# By joe, adapted from st-cpyout by Jaywalker and Luke
+
+# mem=$(sed 's/^ $//g' | sed 's/\x0//g')
+mem=$(cat /tmp/out)
+ps1=$(printf "%s" "$mem" |
+ tail -n1 |
+ sed -E 's/([%,#,>,$]).*/\1/')
+chosen=$(printf "%s" "$mem" |
+ grep -F "$ps1" |
+ sed '$ d' |
+ tac |
+ dmenu -i -l 10 -m 0)
+if [ -n "$chosen" ]; then
+ cmd=$(printf "%s" "$chosen" | sed "s/^$ps1 //")
+ printf "%s" "$cmd" | xclip -selection clipboard
+ herbe " clipped : $(printf "%.10s..." "$cmd")" &
+fi
+return
+# if [ "$1" = "noprompt" ]; then
+# printf "%s" "$mem" |
+# gawk "/^$chosen$/{p=1;print;next} p&&/$eps1/{p=0};p" |
+# tac |
+# sed '$ d' |
+# tac |
+# perl -p -e 'chomp if eof' |
+# xclip -selection clipboard
+# else
+# printf "%s" "$mem" |
+# gawk "/^$chosen$/{p=1;print;next} p&&/$eps1/{p=0};p" |
+# xclip -selection clipboard
+# fi