105 lines
3.0 KiB
Bash
Executable File
105 lines
3.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# ======================================================
|
|
# === installgtk.sh to enable cut/copy/paste keys ===
|
|
# === by Øystein Bech "DreymaR" Gadmar, 2014 ===
|
|
# ======================================================
|
|
|
|
# - Thanks to Kuglee on the Colemak forum for researching these bindings!
|
|
# - With my Extend mappings for instance, you can make the keyboard send XF86 multimedia keys
|
|
# - These are called XF86### where ### is for instance Cut/Copy/Paste (on Extend X/C/V)
|
|
# - Those key events are sent to the OS but not all of them do anything useful currently
|
|
# - The below script tells GTK to map the edit keys to actions so they work (in GTK apps at least)
|
|
|
|
|
|
HeadStr="DreymaR's GTK install script (by GadOE, 2014)"
|
|
DescStr=\
|
|
"Shell script to enable cut/copy/paste XF86 keys\n"\
|
|
" for GTK 2.0 and 3.0 config files in ~/ ."
|
|
|
|
#---------- init --------------------------------------
|
|
|
|
MyNAME=`basename $0`
|
|
#~ MyPATH=`dirname $0`
|
|
|
|
HelpStr="Usage: sh ${MyNAME} [no args]\n"\
|
|
"\n••• Please read this script's comments for more info on how it works •••\n"
|
|
|
|
gtkfile[2]='.gtkrc-2.0'
|
|
gtktext[2]='binding "gtk-xf86cut-copy-paste"
|
|
{
|
|
bind "XF86Cut" { "cut-clipboard" () }
|
|
bind "XF86Copy" { "copy-clipboard" () }
|
|
bind "XF86Paste" { "paste-clipboard" () }
|
|
}
|
|
|
|
class "*" binding "gtk-xf86cut-copy-paste"
|
|
'
|
|
|
|
gtkfile[3]='.config/gtk-3.0/gtk.css'
|
|
gtktext[3]='@binding-set gtk-xf86cut-copy-paste
|
|
{
|
|
bind "XF86Cut" { "cut-clipboard" () };
|
|
bind "XF86Copy" { "copy-clipboard" () };
|
|
bind "XF86Paste" { "paste-clipboard" () };
|
|
}
|
|
|
|
* {
|
|
gtk-key-bindings: gtk-xf86cut-copy-paste
|
|
}
|
|
'
|
|
|
|
#---------- subroutines -------------------------------
|
|
|
|
MyMsg()
|
|
{
|
|
printf "\n••• $1 •••\n\n"
|
|
}
|
|
|
|
PrintHelpAndExit()
|
|
{
|
|
MyMsg "${HeadStr}"
|
|
printf "${DescStr}\n"
|
|
printf "${HelpStr}\n"
|
|
exit $1
|
|
}
|
|
|
|
MyEcho()
|
|
{
|
|
printf "$1\n"
|
|
[ -z "$2" ] || printf "$1\n" >> "$2"
|
|
}
|
|
|
|
#---------- command line parser -----------------------
|
|
|
|
while getopts "h?" cmdarg; do
|
|
case $cmdarg in
|
|
h) PrintHelpAndExit 0 ;;
|
|
\?) PrintHelpAndExit 0 ;;
|
|
:) PrintHelpAndExit 1 ;;
|
|
esac
|
|
done
|
|
|
|
#---------- main --------------------------------------
|
|
|
|
MyMsg "$HeadStr"
|
|
#~ MyEcho "• Working from `pwd`"
|
|
|
|
# If not already there, add GTK cut/copy/paste key bindings to GTK 2.0 and 3.0 config files
|
|
for i in 2 3; do
|
|
#~ MyEcho "${i}.0: '$(grep "gtk-xf86cut-copy-paste" "$HOME/${gtkfile[$i]}")'"
|
|
#~ MyEcho "\n${gtkfile[$i]}\n'''${gtktext[$i]}'''"; continue
|
|
if [ "$(grep "gtk-xf86cut-copy-paste" "$HOME/${gtkfile[$i]}" 2> /dev/null)" == "" ]; then
|
|
echo "${gtktext[$i]}" >> "$HOME/${gtkfile[$i]}"
|
|
MyEcho "• GTK ${i}.0 Cut/Copy/Paste config generated"
|
|
else
|
|
MyEcho "• GTK ${i}.0 Cut/Copy/Paste config already present"
|
|
fi
|
|
done
|
|
|
|
MyMsg "${MyNAME} finished!"; exit 0
|
|
|
|
# (Originally, I copied over files in the current dir using `cat ./"${gtkfile[$i]}"`)
|
|
#~ [ "$(grep "gtk-xf86cut-copy-paste" "$HOME/config/gtk-3.0/gtk.css")" == "" ] && \
|
|
#~ cat ./gtk.css >> ~/.config/gtk-3.0/gtk.css || MyEcho "• GTK 3.0 config already present"
|