KDE 6 Breaks this
So I finally put Kubuntu 25.10 on a Thinkpad that needed a reinstall. It comes with KDE 6,
and the custom keyboard shortcuts of old is gone. Moreover, mass adding shortcuts as with Bobbins,
which meant hundreds of them, just crashes the settings app. So I needed a different approach.
What I came up with is a simple app with Tkinter which displays a list of shortcuts which
one can press. I called it schmoop for the sake of giving it a silly name like schmerp.
Then, I bind e.g. A-C-M-l to the command schmoop A-C-M-l, which then finds ~/.schmoop/A-C-M-l.schmoop
which contains eybindings in a simple form:
x command args
y command args
and generally each keystroke then launches a script or application. Generally that places most
things two combos away, one to load schmoop, and the other to follow it. For other things,
there is the schmerp app I wrote a while back, which presents a simple text entry into
which you can use shorthands for commands.
Old Content
I often use the word bobbins and a random word for things, especially an 'everything else'.
What I do with KDE is to bind many combos using meta (which I try to reserve to window
management and app launching stuff, so that all combos without meta are passed to the
application and not intercepted by the desktop environment). These all then call a single
binary ~/bin/bobbins passing the keyboard shortcut, in A-C-M-S-x notation (Alt-Control-Meta-Shift-key)
as a command line argument. So Meta+Shift+0 calls bobbins M-S-0. I can then control what this
shortcut does by editing the script at ~/bin/bobbins. I then put environment variables
for bobbins in ~/.bobbins. I then assign A-C-M-delete to edit the bobbins script.
I've exported the group here (load them in the Custom Shortcuts panel in KDE Settings).
Note that after importing, you may need to disable and renable the group for the
mappings to take effect.
My bobbins file
Note that tkt is Tk Text Display and
mp is my MPD helper script
#!/bin/bash
# $HOME/.bobbins contains variables
# C-w gf to edit in new tab; C-w C-f to open in split
if [ -e "$HOME/.bobbins" ]; then . "$HOME/.bobbins"; fi
MP="${MP-1}" # default
# ~/.bobbins.log is the log file
# if you're wondering why I state the f'ing obvious,
# it's so I can position the cursor over ~/.bobbins.log
# in vim and use C-w gf to open it in a new tab
LOG=~/.bobbins.log
echo "[$(date +"%Y/%m/%d %H:%M:%S")] bobbins $@" >> $LOG
# REMEMBER the ;;
case "$1" in
M-S-0)
mp "$MP",p
;;
C-M-minus)
mp "$MP",v-4 >> $LOG
;;
C-M-=)
mp "$MP",v+4 >> $LOG
;;
A-C-M-delete)
gvim ~/bin/bobbins
;;
A-C-M-insert)
gvim ~/.bobbins
;;
*)
echo "Bobbins $1" | tkt
;;
esac