From 2f340c73111c2d73ce2c6440c42fce2d42a63748 Mon Sep 17 00:00:00 2001 From: joe Date: Wed, 8 Oct 2025 12:36:03 +0200 Subject: in progress --- Makefile | 1 + config.def.h | 2 ++ st-cpycmd | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+) create mode 100755 st-cpycmd 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 -- cgit v1.2.3