Cwm /

Configure

cwm is a very powerful window manager that is part of the base system for OpenBSD.

One strength is its ability to entirely emulate the mouse with keybindings. These keybindings are entirely programmable.

In ~/.cwmrc:

bind-key CS-h pointer-move-left
bind-key CS-j pointer-move-down
bind-key CS-k pointer-move-up
bind-key CS-l pointer-move-right
bind-key CMS-h pointer-move-left-big
bind-key CMS-j pointer-move-down-big
bind-key CMS-k pointer-move-up-big
bind-key CMS-l pointer-move-right-big

C is control, M is meta (alt), and S is shift. This emulates the mouse movements to follow familiar vi keybindings.

Then, place this inside ~/.xsession:

/usr/X11R6/bin/xterm &
/usr/X11R6/bin/cwm

xenodm will now start an xterm and cwm upon successful login.

It may be convenient to place any terminals that need to be opened by default in a file like ~/cwm.sh:

/usr/X11R6/bin/xterm -e 'sh -c \"sleep 1 && tmux new-session -A -s 0\"' &
/usr/X11R6/bin/xterm -e "sh -c \"sleep 1 && ssh -D 54321 -t breadofgod.org \\\"tmux a -t 0; sh -l\\\"\"" &

To use keyboard keys to emulate a 3 button mouse in OpenBSD (on X11), first enable mousekeys:

$ doas pkg_add xkbset

Open xev and press keys you intend to use as mouse keys: might make lots of spam in terminal.

$ xev -event keyboard

My key codes are 75, 76, and 95 (F9, F10, and F11):

xkbset m # enables mousekeys
xmodmap -e "keycode 75 = Pointer_Button1"
xmodmap -e "keycode 76 = Pointer_Button2"
xmodmap -e "keycode 95 = Pointer_Button3"