mirror of
https://github.com/Matir/skel.git
synced 2026-05-26 05:29:09 -07:00
37 lines
1.1 KiB
Bash
Executable File
37 lines
1.1 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# smart-copy-paste
|
|
#
|
|
# This script provides context-aware copy and paste operations, mimicking
|
|
# macOS behavior (Alt+C/V) while correctly handling terminals that require
|
|
# the Shift key.
|
|
|
|
# Exit silently if xdotool is not installed.
|
|
if ! command -v xdotool > /dev/null; then
|
|
exit 1
|
|
fi
|
|
|
|
# Get the class name of the currently focused window.
|
|
# We need to get the window on focus, to avoid issues with transparent terminals.
|
|
class=$(xdotool getwindowclassname "$(xdotool getwindowfocus)")
|
|
|
|
# Semicolon-separated list of terminal class names.
|
|
terminals='Gnome-terminal;Xfce4-terminal;konsole;xterm;URxvt;Terminator;Alacritty;kitty;wezterm'
|
|
|
|
# Determine the keystroke based on the window type and the argument passed.
|
|
if echo "$terminals" | grep -q "$class"; then
|
|
# This is a terminal, so use Shift.
|
|
if [ "$1" = "copy" ]; then
|
|
xdotool key --clearmodifiers ctrl+shift+c
|
|
elif [ "$1" = "paste" ]; then
|
|
xdotool key --clearmodifiers ctrl+shift+v
|
|
fi
|
|
else
|
|
# This is a standard GUI app.
|
|
if [ "$1" = "copy" ]; then
|
|
xdotool key --clearmodifiers ctrl+c
|
|
elif [ "$1" = "paste" ]; then
|
|
xdotool key --clearmodifiers ctrl+v
|
|
fi
|
|
fi
|