diff options
| author | joe <rbo@gmx.us> | 2025-09-27 19:51:34 +0200 |
|---|---|---|
| committer | joe <rbo@gmx.us> | 2025-09-27 19:51:34 +0200 |
| commit | 14101eefa260ec23f09ac961a3bed6a32932b9c3 (patch) | |
| tree | eaee1618fb9cd17fd13bb1df5378b778d1a84d2f /st-cpyout | |
| parent | patch (diff) | |
| download | st-14101eefa260ec23f09ac961a3bed6a32932b9c3.tar.gz st-14101eefa260ec23f09ac961a3bed6a32932b9c3.tar.bz2 st-14101eefa260ec23f09ac961a3bed6a32932b9c3.tar.xz st-14101eefa260ec23f09ac961a3bed6a32932b9c3.tar.zst st-14101eefa260ec23f09ac961a3bed6a32932b9c3.zip | |
up
Diffstat (limited to 'st-cpyout')
| -rwxr-xr-x | st-cpyout | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/st-cpyout b/st-cpyout new file mode 100755 index 0000000..98aaa99 --- /dev/null +++ b/st-cpyout @@ -0,0 +1,34 @@ +#!/bin/sh + +# Using external pipe with st, give a dmenu prompt of recent commands, +# allowing the user to copy the output of one. +# xclip required for this script. +# By Jaywalker and Luke +# Adapted for FreeBSD by Joe +mem=$(cat) +mem=$(printf "%s" "$mem" | sed 's/\x0//g') +ps1=$(printf "%s" "$mem" | + tac | + tail -n1 | + sed 's/%.\+/%/') +chosen=$(printf "%s" "$mem" | + grep -F "$ps1" | + sed '$ d' | + tac | + dmenu -i -l 10 -m 0 | + sed 's/[^^]/[&]/g; s/\^/\\^/g') +eps1=$(echo "$ps1" | + sed 's/[^^]/[&]/g; s/\^/\\^/g') +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 |
