mirror of
https://github.com/flokoe/bash-hackers-wiki.git
synced 2024-11-01 14:53:06 +01:00
33 lines
1.3 KiB
Plaintext
33 lines
1.3 KiB
Plaintext
|
====== X-Clipboard on Commandline ======
|
||
|
|
||
|
---- dataentry snipplet ----
|
||
|
snipplet_tags: clipboard, x11, xclip, readline
|
||
|
LastUpdate_dt: 2010-07-31
|
||
|
Contributors: Josh Triplett
|
||
|
type: snipplet
|
||
|
----
|
||
|
|
||
|
<code>
|
||
|
# Make Control-v paste, if in X and if xclip available - Josh Triplett
|
||
|
if [ -n "$DISPLAY" ] && [ -x /usr/bin/xclip ] ; then
|
||
|
# Work around a bash bug: \C-@ does not work in a key binding
|
||
|
bind '"\C-x\C-m": set-mark'
|
||
|
# The '#' characters ensure that kill commands have text to work on; if
|
||
|
# not, this binding would malfunction at the start or end of a line.
|
||
|
bind 'Control-v: "#\C-b\C-k#\C-x\C-?\"$(xclip -o -selection c)\"\e\C-e\C-x\C-m\C-a\C-y\C-?\C-e\C-y\ey\C-x\C-x\C-d"'
|
||
|
fi
|
||
|
</code>
|
||
|
|
||
|
The behaviour is a bit tricky to explain:
|
||
|
* kill text after the cursor
|
||
|
* since the kill command **wants** text, it blindly adds a fake text "#" here
|
||
|
* kill text before the cursor
|
||
|
* since the kill command **wants** text, it blindly adds a fake text "#" here, too
|
||
|
* write out ''"$(xclip -o -selection c)"''
|
||
|
* run Control-Meta-e (shell-expand-line) to expand the ''"$(xclip -o -selection c)"''
|
||
|
* yank the previously killed text back where it belongs
|
||
|
|
||
|
Of course you can use any other command, you're not limited to ''xclip'' here.
|
||
|
|
||
|
Note: C-@ as well as M-SPC both works and set the mark for me -- pgas
|