StumpWM
Window manager.
⚓
In this section, I document only the StumpWM commands that I use interactively.
Green means built-in, orange means custom.
⚓
I've been using StumpWM day-in-day-out for years and I can't imagine living without it.
Despite this, my typical StumpWM usage patterns are very unsophisticated.
Despite that, StumpWM still greatly increases my productivity, or at least it greatly diminishes my frustration with life. This is no small feat!
⚓
Complex juggling of transient workspaces (what StumpWM calls "groups") isn't something that particularly appeals to me in life.
(I figure that if I created and deleted workspaces for specific tasks as I need them, in the general case I would either have to check their numbers before switching to them, or else assign them names so I can switch to them that way. But naming things is hard and I hate stupid names. So this approach seems just plain slow and prohibitively taxing on my precious cognitive resources... Though I haven't actually tried it, so what do I know.)
So I just have 4 permanent workspaces (imported from my pre-StumpWM days) that are set up in my .stumpwmrc
file:
- ① Normal ⚓
-
Despite the name I normally don't use this one, calling it "Misc" would be more accurate.
One particular recurring use for it is when I'm in the middle of something and the Ubuntu update thing (whatever it's called) pops up, the window doesn't even have time to render and I can immediately shoot it out of the way to this workspace with Ctrl-t g m 1, pretty much by muscle memory alone. (I know there's a feature to automatically assign particular types of windows to particular workspaces, but it could be easier to setup and anyway I don't really care.)
- ② Dev ⚓
-
Most of the real action happens in this workspace.
What's more, most everything happens in 3 windows:
-
For all programming and other text editing needs.
For all web browsing needs. (Except occasional firefox testing.)
-
Runs
screen
to accomodate an unlimited number of terminals in the one window, though I usually have no more than 3 or 4 at once.(I frequently find myself opening more terminal windows to do something quick and then forget to close them so I sometimes have up to 3 additional nonsense terminal windows open that I then have to close... Bad habits die hard.)
① Emacs ② Browser (Google Chrome) ③ Terminal (gnome-terminal) -
- ③ Games ⚓
-
For when I want to waste some time in one way or another.
I also use it if I want some background music.
(mplayer sound-file -loop 0
)And sometimes if I just want to do something trivial (but potentially involving more than one window) real quick.
- ④ Chat ⚓
-
For rare IRC-ing occasions.
I also sometimes use it for other purposes if the
Normal
workspace is cluttered up with other stuff.
⚓
⚓
- Ctrl-t G ⚓
-
vgroups
Example vgroups output.
(By default, shown on the top right of the screen.)Show all (non-hidden) workspace numbers and names,
along with all of their window numbers and titles.The selected workspace and selected window in each workspace are indicated with a star.
This shows so much information at once that I never use Ctrl-t w (
windows
).(Auto-hides at the next window manager command or after a timeout.
I almost always hide it immediately with Ctrl-t Ctrl-g.) - Ctrl-t g 1, Ctrl-t g 2, Ctrl-t g 3, Ctrl-t g 4 ⚓
- Super-1, Super-2, Super-3, Super-4
-
gselect 1
,gselect 2
,gselect 3
,gselect 4
.Switch to one of my 4 workspaces. If I already have both hands on the keyboard, I usually use the built-in bindings. Otherwise, I use my custom one-keystroke bindings.
- Ctrl-t Ctrl-t ⚓
-
other-in-frame
Display the current frame's most recently selected window.
This lets one quickly switch back and forth between two windows, which I tend to do way more than splitting the screen into multiple frames.
- Ctrl-t digit ⚓
-
select-window-by-number
Select the window with the corresponding digit in the current workspace, switching to the frame it's associated with in the process.
-
pull-hidden-next
,pull-hidden-previous
.Select the next or previous window in the current frame.
- Ctrl-t Ctrl-k ⚓
- Super-a
-
delete
Close current window normally.
- Ctrl-t Ctrl-K ⚓
-
kill
Close current window forcibly, killing the underlying application.
- Ctrl-t g m ⚓
-
gmove
Move the current window to another workspace.
Particularly useful if, for instance, a chat window pops up while I'm in the
Dev
workspace because someone messages me. Then I send it to theChat
workspace with Ctrl-t g m 4 RET.
⚓
- Ctrl-t e e (mnemonic: "Execute Emacs") ⚓
-
emacs
Start an emacs instance, or switch to it if there's already one.
(Switching to it as in going to the correct workspace and selecting its window, pulling it in the current frame first if necessary. I'm not sure what happens if there are multiple emacs windows (emacs frames), I almost always use only one.)
- Ctrl-t e b (mnemonic: "Execute Browser") ⚓
-
google-chrome
Make a new browser window, regardless of if there's already one or not.
- Ctrl-t e c (mnemonic: "Execute Console") ⚓
-
gnome-terminal
Start a terminal instance, or switch to it if there's already one.
(I almost always use a single terminal window, with
screen
. I sometimes open another terminal window to try something real quick and then immediately close it.) - Super-e ⚓
-
exec nautilus
Open file browser in home directory.
(Keybinding inspired by Windows' Win-E.)
⚓
- Ctrl-t t ⚓
-
send-escape
Send a Ctrl-t to the current application.
- Ctrl-t b ⚓
-
banish
Put the cursor out of the way at the bottom right corner of the screen.
- Ctrl-t x v ⚓
-
amixer-master
Change the global sound level. Asks for a percentage.
1
,2
,3
and4
are shortcuts for 25%, 50%, 75% and 100%, respectively.
Enter01
for 1%. (Sometimes useful with headphones, surprisingly.) - F32 (my physical Right Shift is mapped to F32) ⚓
-
open-parens
Send "(" and ")" to the current application, then "left" to put the cursor inside the parentheses.
Works with almost all applications, but not
gnome-terminal
, for some reason. - Ctrl-F32 ⚓
-
open-double-quotes
Send two double quotes to the current application, then "left" to put the cursor inside them.
Works with almost all applications, but not
gnome-terminal
, for some reason.
⚓
- Super-f ⚓
-
fullscreen
Make the current window fullscreen.
- Super-d (qwerty: Super-h) (mnemonic: "Horaire" ("schedule")) ⚓
- Super-y (qwerty: Super-t) (mnemonic: "Terrebonne" (my city))
-
exec google-chrome http://horairetele.canoe.com
exec google-chrome http://www.meteomedia.com/weather/caqc0750
TV schedule, weather. Think of them as "super bookmarks".
⚓
⚓
- Ctrl-t h w ⚓
-
where-is
Show what key sequence(s) will invoke the given command.
If the command is not bound to any key sequence, you can still invoke it by name with Ctrl-t ; (
colon
). - Ctrl-t h k ⚓
-
describe-key
Show what command, if any, is bound to the given key sequence.
- Ctrl-t h c ⚓
-
describe-command
Show a small description for a command.
- partial-key-sequence Ctrl-h ⚓
-
Lists all keybindings reachable from the partial-key-sequence.
For instance, Ctrl-t h Ctrl-h usefully lists all interactive help commands!
(I almost never use those anymore, but they're of particular importance to newbies or those actively trying to learn more keybindings and commands. Or people documenting their StumpWM status quo!)
There's also Ctrl-t h f (describe-function
) and Ctrl-t h v (describe-variable
) but I never use them.
⚓
StumpWM's ability to imitate emacs' windowing system is one of its most touted features, and yet I almost never use it. I usually have a single frame (and therefore a single window) visible in each workspace.
I think I'm simply not using enough windows at once to make it worthwhile, besides rare special cases where I do need to see 2 or more windows at the same time. Also, with my 2003 vintage hardware I only have one screen at 1024x768, which is a pretty small resolution these days (I guess? I'm so out of the loop for these things), at least in the desktop category.
- Ctrl-t s ⚓
-
vsplit
Equivalent to emacs' C-x 2 (
split-window-vertically
).Useful if I need to see 2 windows at the same time.
- Ctrl-t S ⚓
-
hsplit
Equivalent to emacs' C-x 3 (
split-window-horizontally
).Useful in very special situations where I want to do a side-by-side comparison.
- Ctrl-t Q ⚓
-
only
Equivalent to emacs' C-x 1 (
delete-other-windows
).Effectively returns the current workspace to the usual mode of operation, in my case.
- Ctrl-t o ⚓
-
fnext
Equivalent to emacs' C-x o (
other-window
). - Ctrl-t + ⚓
-
balance-frames
Equivalent to emacs' C-x + (
balance-windows
).I almost always invoke this right after splitting twice in the same orientation, to have a 1/3:1/3:1/3 split instead of 1/2:1/4:1/4.
- Ctrl-t r ⚓
-
iresize
Useful in very special situations where I need very specific frame sizes.
Use C-n and C-p to expand or shrink the frame vertically.
Use C-f and C-b to expand or shrink the frame horizontally.
Use RET to exit
iresize
mode.
⚓
- Ctrl-t x l ⚓
-
loadrc
Reload
.stumpwmrc
config file.Not quite like having a real REPL, but usually good enough for simple casual configuration editing and testing.
- Ctrl-t m ⚓
-
lastmsg
Display the last StumpWM message again, in case you missed it.
Use it multiple times in a row to display previous messages.
- Ctrl-t M ⚓
-
lastmsg-no-timeout
Display the last message StumpWM displayed again, "indefinitely" until another message comes up or until explicitly dismissed with Ctrl-t Ctrl-g. Sometimes useful for longer messages.
- Ctrl-t x p ⚓
-
list-window-properties
Display the X window properties of the current window. Potentially useful notably to know what arguments to give to
run-or-raise
or to use the feature allowing to assign particular application windows that pop up to particular workspaces, which I just do manually... - Ctrl-t x b (mnemonic: "Blank screen") ⚓
-
activate-screensaver
Activate the screensaver, lock the screen.
But usually I just let the screensaver auto-activate with its timeout... - Ctrl-t ; ⚓
-
colon
Invoke a StumpWM command by name. Similar to emacs' M-x (
execute-extended-command
).Allows one to invoke a command that doesn't (yet) have an assigned keybinding.
I use this when I need to invoke
gfloat-new
orrenumber
, which is almost never. - Ctrl-t : ⚓
-
eval
Make the underlying Common Lisp implementation evaluate an expression and print any values it returns. Similar to emacs' M-: (
eval-expression
).You can think of it as a one-shot REPL.
⚓
Here's my .stumpwmrc
file (see it on github). It's very raw and messy and undocumented, but it works for me...
Here's a further bunch of setup files for gnome
, I think these were possibly not even necessary... I don't remember exactly. I'd have to investigate.
There's a good chance that these files are broken in various ways.
- gnome-stumpwm.desktop (see it on github)
- gnome-stumpwm.session (see it on github)
- stumpwm.desktop (see it on github)
- install.sh (see it on github) (Just a trivial convenience script for putting the hopefully-correct files into the hopefully-correct places.)