SDORFEHS(1)
π sdorfehs(1) π
β¨ NAME β¨
sdorfehs β a window manager that doesn't need a mouse, periodt. No cap, it's literally mouse-independent. π±οΈπ«
β¨ SYNOPSIS β¨
sdorfehs [-hv]
sdorfehs [-d dpy] [-s num] [-f file]
sdorfehs [-d dpy] [-s num] [-i] -c command [-c command ...]
β¨ DESCRIPTION β¨
Okay bestie, so sdorfehs is a window manager that keeps it light. No fat library dependencies, no fancy graphics, and absolutely no dependence on a mouse. It's giving minimal, it's giving efficient. π
The screen can be split into non-overlapping frames, and all windows stay maximized inside their frames. Like, they're literally kept maximized. π₯
All interaction with the window manager happens through keystrokes. sdorfehs has a prefix map to minimize key clobbering. So you won't accidentally trigger stuff. π
The options are as follows:
-c commandβ Sendsdorfehsa command. There must be asdorfehsinstance running as window manager for the given display/screen for this to work. Do not forget to quote the command if it contains spaces. For example:
sdorfehs -c "echo hello world"
-d displayβ Set the X display to use or send commands to.-f filenameβ Specify an alternate configuration file. If this is not given,sdorfehswill try$HOME/.config/sdorfehs/configand execute each command when starting up.-hβ Show summary of options.-iβ Execute commands given with-cin interactive mode. That means it will behave exactly as if called withC-a :like prompting for missing arguments and things like that.-s numberβ Only use the specified screen.
β¨ KEY BINDINGS β¨
To avoid conflicts with other programs, all default sdorfehs key bindings start with an escape key which, by default, is C-a (Control-a). Some important default key bindings:
C-a ?β Show key bindings.C-a aβ Send a Control-a to the current window.C-a cβ Start an X terminal.C-a nβ Switch to next window.C-a pβ Switch to previous window.C-a 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9β Switch to window number 0 | 1 | 2 | ...C-a kβ Close the current window.C-a Kβ XKill the current application.C-a s | Sβ Split the current frame into two vertical | horizontal ones.C-a Tab | Left | Up | Right | Downβ Switch to the next | left | top | right | bottom frame.C-a Qβ Make the current frame the only one.C-a :β Execute asdorfehscommand.C-a F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12β Switch to vscreen number 0 | 1 | 2 | ...
Further default key bindings can be found in parentheses after the commands in the next section.
β¨ COMMANDS AND DEFAULT ALIASES β¨
abort(C-a C-g) β Do nothing and that successfully. (Useful if you pressedC-ain error).addhook event commandβ Add a hook: runcommandwhenevereventis called. Possible events are:deletewindowβ Run after a window is withdrawn.keyβ Run whenever a top level key is pressed (by defaultC-a).newwindowβ Run after a new window is mapped.quitβ Run before exitingsdorfehs.restartβ Run before restartingsdorfehs.switchframeβ Run after a frame actually switched, but before the window in it is focused.switchscreenβ Run when the user switches to a different screen.switchvscreenβ Run when the user switches to a different virtual screen.switchwinβ Run after a new window is selected. (With dedication, it may already be inactive again, if it was put into another frame)
alias alias commandβ Addaliasas new way to callcommand.bind key commandβ alias for"definekey root key command".banish(C-a b) β Banish the rat cursor to the lower right corner of the screen.banishrelβ Banish the rat cursor to the lower right corner of the current window. If there isn't a window in the current frame, it banishes the rat cursor to the lower right corner of the frame.chdir [directory]β If the optional argument is given, change the current directory ofsdorfehstodirectory. If nothing is given, change it to the value of the environment variable"HOME".clrunmanagedβ Clears the unmanaged window list.cnextβ Likenextbut switch to the next window with another resource class than the current one. (That means the next window belonging to another type of application than the current one.)cprevβ Likeprevbut switch to the previous window with another resource class than the current one. (That means the previous window belonging to another type of application than the current one.)colon sdorfehs-command(C-a :) β Executesdorfehs-commandinteractively. (i.e. ask for possible missing arguments.)cotherβ Likeotherbut switch to the window of the current vscreen that was last accessed and has another resource class but is not currently visible.curframe(C-a F) β Show a bar marking the current frame.definekey keymap key commandβ Add a new key binding inkeymapforkeyto executecommand. Default keymaps aretopnormally only containingC-a, which reads a key fromroot, containing all the normal commands.
Note that you have to describe ":" by "colon", "!" by "exclam" and so on. If you cannot guess a name of a key, try either C-a key and look at the error message, or try :describekey root and pressing the key.
dedicate [0 | 1]β Consider the current frame dedicated/chaste (1) or promiscuous (0).
A dedicated frame will not accept new windows. When new windows are to be focused, they will be opened in a non-dedicated frame instead.
If no argument is given, toggle the current dedicateness. By default no windows are dedicated.
delete(C-a k) β Close the current window.delkmap keymapβ Deletes the keymap namedkeymap, that was generated withnewkmap. The keymapstop(or whatever was specified byset topkmap) androotcannot be deleted.describekey keymapβ Grab the next key. Similar toreadkey,describekeyshows only the command inkeymap, that would be executed byreadkey.echo textβ Showtextassdorfehsmessage.escape keyβ Update the default escape key tokey.
Strictly speaking it updates the readkey root command in the keymap top to key, the other binding in root to key, and meta binding in root to key without modifiers or C-key if key has no modifiers. (If set topkmap was called with an argument other than top that will be used instead of top.)
exchangedown(C-a C-Down) β Exchange the window in the current frame with the window in the frame below the current frame.exchangeleft(C-a C-Left) β Exchange the window in the current frame with the window in the frame left of the current frame.exchangeright(C-a C-Right) β Exchange the window in the current frame with the window in the frame right of the current frame.exchangeup(C-a C-Up) β Exchange the window in the current frame with the window in the frame above the current frame.exec shell-command(C-a !) β Spawn a shell executingshell-command.execa shell-commandβ Spawn a shell executingshell-command, without remembering the current frame, so that_NET_WM_PIDdeclaring programs will be placed into the frame active when they open a window instead of the frame active whensdorfehsgets this command.execf frame shell-commandβ Spawn a shell executingshell-command, showing_NET_WM_PIDsupporting programs in the givenframeinstead of the frame selected when this program is run.execv vscreen shell-commandβ Spawn a shell within a specific vscreenvscreen, executingshell-commandas in the'exec'command (i.e., using"sh -c"). This is not likely to work well with'winaddcurvscreen'set to1anywhere in the configuration file.execw shell-commandβ Spawn a shell executingshell-command, but wait for it to finish. This should behave the same asexecbut will wait for completion. Usetimeout(1)if it might hang, orsdorfehswill hang itself waiting for completion. Use the'exec'shell builtin as the first word in the command string to get similar behavior toexecaowing to the forked pid remaining stable and known tosdorfehs.fdump [screenno]β Output the defining data for all frames of the current screen, or for screen numberscreennoif this is specified.focus(C-a Tab) β Focus the next frame.focuslastβ Switch to the last selected focus.focusleft(C-a Left) β Switch to the frame to the left of the current one.focusdown(C-a Down) β Switch to the frame beneath the current one.focusright(C-a Right) β Switch to the frame to the right of the current one.focusprevβ Focus the previous frame.focusup(C-a Up) β Switch to the frame above the current one.frestore framesβ Replace the current frames with the ones specified inframesin the format as generated byfdump.fselect [frameno](C-a f) β If an argument is supplied, switch to a frame given by numberframeno.
If no argument is given, show a frame selector in each frame and wait for a key to be pressed. If the key matches an existing frame selector, this frame gets focused.
Frame selectors are by default the numbers starting with zero, but they can be changed by setting framesels.
getenv variableβ Output the value of the environment variablevariable.getselβ Paste the current X Selection into the current window.gravity [nw | w | sw | n | c | s | ne | e | se]β Change how in its frame the current window is aligned.help [keymap]β If the optional parameterkeymapis given, list all keybindings in thiskeymap, otherwise list all key bindings in keymaproot.
hsplit [l/p | [-]pixels] (C-a S)
Split the current frame into a left frame and a right frame. π No parameter? It just goes halvesies, easy.
- Give it two numbers separated by a
/and the math kicks in: the left one isltimes thepth part, and the right one is(p - l)times thepth part of the prior width. β¨ - Otherwise the right half ends up
pixelswide β or the left one does β depending on whether there's a-in front of the number or not. π€
inext
Like next, but it only switches to the next window with the same resource class as the one you're on. (Translation bestie: the next window belonging to the same application as the current one.) π―
info (C-a i)
Prints out the current width, height, window number and window name of the current window. π What "name" even means here is decided by set winname.
iprev
Like prev, but it switches to the previous window with the same resource class as the current one. (Again: the previous window belonging to the same application as the current one.) π«Ά
iother
Like other, but it switches to the window of the current vscreen that was last accessed and has the same resource class, and is not currently visible. π
kill (C-a K)
Close the X-connection of the X-client responsible for the current window. π It's giving "you're done here."
lastmsg (C-a m)
Reshow the last message. π
link key [keymap]
Do whatever key is bound to in the keymap keymap, if you supplied one. If you didn't, it does whatever key is bound to in the keymap root. πͺ’
listhook event
List all the commands specified with addhook that are set to be executed when the event event occurs. π
meta [key] (C-a t)
Send the escape key (the one that's normally C-a) to the current window. πΈ If you pass a key, that's what gets sent instead. Heads up though: some applications by default ignore the synthetic key that this command sends, because it's considered a security hole. xterm is one such application. π
newkmap keymap
Generate a brand new keymap named keymap. π You can then add new key-command mappings to it with definekey, and call it up with readkey.
next (C-a Return | C-a n | C-a space)
Switch to the next window in the current vscreen. β‘οΈ
nextscreen (C-a N)
Switch to the next screen. (If you have multiple physical ones.) π₯οΈ
number new [old]
Give the number new to the window with the number old β or to the current window if you don't give an old one. π’
only (C-a Q)
Remove all frames on the current screen except the current frame, and maximize that one to the size of the whole screen. π§Ό Just you and your one frame, main character energy.
other (C-a C-a)
Switch to the window of the current vscreen that was last accessed but is not currently visible. π»
prev (C-a p)
Switch to the previous window in the current vscreen. β¬ οΈ
prevscreen (C-a P)
Switch to the previous screen. (If you have multiple physical ones.) π₯οΈ
prompt [prompt]
sdorfehs will ask the user for input, showing prompt (or just a single colon if no argument is given), and output whatever the user typed. β¨οΈ Ngl, this command probably does not make much sense in interactive mode.
putsel x-selection
Replace the X selection with the text x-selection. βοΈ You can then paste it into the current window with getsel.
quit
Quit sdorfehs. π periodt.
ratinfo
Display the x y coordinates of the rat cursor relative to the screen. π
ratrelinfo
Display the x y coordinates of the rat cursor relative to the current window β or relative to the current frame if no window is focused. π
ratwarp x y
Move the rat cursor to the position (x, y). πβ¨
ratrelwarp deltax deltay
Move the rat cursor to (deltax, deltay), relative to the current position. π
ratclick [button]
Simulate a rat click with button (button 1 = left button if none is given). π±οΈ
rathold (up | down) [button]
Simulate pressing or releasing rat button button (again, 1 = left button if none is given). π±οΈ
readkey keymap
Grab the next key pressed, and execute the command associated to that key in keymap. πΉ To show it's waiting for a key, sdorfehs will change the rat cursor to a square if waitcursor is set. This command is maybe best described by how it's used in the default configuration: pressing C-a, which is the only key in the keymap top, runs the command "readkey root". The next key you press then executes the command in keymap root belonging to that key. πͺ
redisplay (C-a l)
Extend the current window to the whole size of its current frame and redisplay it. πΌοΈ (Useful for redisplaying normal windows, or for bringing transient windows to the full size of the frame, since only normal windows are maximized by sdorfehs.)
redo (C-a U)
Revert the last undo of frame changes. β©οΈβ‘οΈ
remhook event command
Remove the command command from the list of commands to be called when the event event is hit. ποΈ The command has to be specified, because an event can have multiple commands attached to it. Use "listhook hook" to get a list of all attached commands.
remove (C-a R)
Remove the current frame and extend some frames around it to fill the remaining gap. π«₯
resize [deltax deltay] (C-a r)
If deltax and deltay are supplied, resize the current frame by that much. (Like, move the bottom right corner by the given offsets, and then move this frame and resize adjacent frames so the frames fill the whole screen again.) π
If you're in interactive mode and supply no arguments, you resize the current frame interactively:
Returnβ finish resizing βC-g,Escapeβ abort resizing βC-n,Down,jβ grow vertically β¬οΈC-p,Up,kβ shrink vertically β¬οΈC-f,Right,lβ grow horizontally β‘οΈC-b,Left,hβ shrink horizontally β¬ οΈsβ shrink to size of current window π―
While resizing interactively, changes come in multiples of the number of pixels given by set resizeunit (by default 10). π
restart
Restart sdorfehs. π
sdump
Output the list of all screens. πΊ The screens are separated by commas. Each screen is shown as 6 values: its number, its x-coordinate, its y-coordinate, its width, its height, and whether it is currently selected (1 = true, 0 = false).
select (- | name | number) (C-a ')
- Give it a
numberβ switch to the window with numbernumber. π’ - Give it a
nameβ switch to the window in the current vscreen with thatname. π·οΈ - Give it
-β blank the current frame. π«§
set [variable [value]]
No argument at all? It outputs all sdorfehs variables and their values. π
One argument? It outputs the value of the sdorfehs variable variable. π Otherwise it sets variable to value. Which values are valid depends on the variable β check the VARIABLES section later in this document for the deets. π
setenv variable value
Set the environment variable variable to value. π (Environment variables get passed to all programs started from sdorfehs.)
sfdump
Output all frames, similar to fdump, but not limited to one screen β all screens at once, with the screen number after each frame. ποΈ
sfrestore frames
Replace the current frames with the ones specified in frames, in the format as generated by sfdump. β»οΈ
shrink
Shrink the current frame to the size of the current window within it. π€
split [split] (C-a s)
Alias for vsplit. βοΈ
source file
Read file and execute each line as a sdorfehs command. πβ¨
sselect screennumber
Switch to the screen screennumber. (If you have multiple physical ones.) π₯οΈ
smove [screen]
Move the current window to the current frame and vscreen on screen screen, and focus it. π
stick
Mark the current window as sticky in its current frame, which makes it unavailable to other frames when they're selecting an available window. π
swap dest-frame [src-frame] (C-a x)
Exchange the window in src-frame (or the current frame, if there's no second argument) with the window dest-frame β or, if there's no argument at all, ask interactively which frame to swap with. π
title newname (C-a A)
Overwrite the title of the current window with newname. βοΈ All following sdorfehs commands will only know the window under the new name.
unalias alias
Remove the alias alias. π«
unbind key
Alias for
undefinekey root key
undefinekey keymap key
Remove the binding for key from keymap. π§Ή
undo (C-a _, C-a u)
Un-do the last change to the frameset. (Like splitting, resizing, deleting, ...) βͺ The number of steps that can be undone is specified by the variable maxundos.
unmanage [name]
Add name to the list of unmanaged windows. π«πͺ That means windows with this name will not be managed, but will be allowed to choose their position themselves.
In non-interactive mode, calling it without arguments will print the list. π
The list can be cleared again by calling clrunmanaged.
unsetenv variable
Remove the variable variable from the list of environment variables. ππ«
unstick
No longer consider the current window as sticky in its current frame, making it available again to appear in other frames. πβ‘οΈπͺ
verbexec cmdline
Spawn a shell executing cmdline, after showing a message with the command. π¬
version (C-a v)
Output version and compile time information. π·οΈ
vmove [vscreen]
Move the current window to the current frame on vscreen vscreen, and switch to it. π Specify it by either name or number.
vnext
Switch to the next vscreen. β‘οΈ
vother
Switch to the last-accessed vscreen before the current one. π»
vprev
Switch to the previous vscreen. β¬ οΈ
vrename
Rename the current vscreen. βοΈ
vscreens
Output a list of all vscreens with their number. πΊ
vselect vscreen
Select the vscreen named vscreen. π―
vsplit [l/p | pixels-from-top | -pixels-from-bottom] (C-a s)
okay so vsplit splits the current frame into an upper frame and a lower frame. πͺ if you give it no parameter at all, it just splits in halves. if you give two numbers separated by a slash (β/β), the upper one is l times the pth part and the lower one (p - l) times the *p*th part of the prior height. otherwise the lower one is pixels from bottom wide or the upper one pixels from top high, depending whether there is a β-β in front of the number or not. π
windows [format] (C-a w)
in interactive mode, show the list of all windows in the current vscreen for the duration specified by the variable msgwait. if msgwait was zero, toggle between indefinitely showing and not showing. π
the messages are shown in columns or rows depending on the value of winliststyle in the format set by set winfmt. the following substitutions happen in format:
%aβ application name (resource name)%cβ resource class%fβ frame number%gβ gravity of the window%hβ height of the window%Hβ unit to resize the window vertically (height_inc)%iβ X Window ID%pβ process ID%lβ last access number%Mβ stringMaxsize, if it specifies a maximum size%nβ window number%sβ window status (β*β is active window, β+β would be chosen by other, β-β otherwise)%Sβ screen number%tβ window name (seeset winname),%Tβ the string βTransientβ, if it is a transient window%wβ width of the window%Wβ unit to resize the window horizontally (width_inc)%xβ xrandr screen number%%β litteral β%β
additionally there can be a positive decimal integer number between the percent sign and the format string to specify the length this value should be truncated to if longer. (for example: %20t) βοΈ
in non-interactive mode, output the list of windows in the current vscreen line by line. the format string can be overwritten by the optional parameter format.
β¨ VARIABLES β¨
sdorfehs variables can be shown and set with set. the following variables are supported:
barborder pixelsβ selects how thick the frame around sdorfehs's bar, prompt, and message windows is. default is1.barbordercolor colorβ the color of the bar, prompt, and message windows sdorfehs creates. default isblack.bargravity nw | w | sw | n | c | s | ne | e | seβ select the location where message and prompt bars appear. default isnw.barinpadding 0 | 1β if there is padding, determines whether the bar appears at the edge of the screen (1) or at the edge of the window area (0). default is1.barpadding x yβ set horizontal padding of sdorfehs windows to x and vertical padding to y. default is14 10.barsticky 0 | 1β when set to1, the bar remains on screen at all times and when messages or lists are not being shown, it displays the output of the current window information formatted withstickyfmt. default is1.bgcolor colorβ the background color of the windows sdorfehs creates. default isblack.border pixelsβ selects how thick the frame around windows is. default is1.bwcolor colorβ the border color of unfocused windows. default isblack.fgcolor colorβ the foreground color of the windows sdorfehs creates. default is#eeeee.font fontβ make sdorfehs use font font.framefmt formatβ choose the default format for the window label shown when selecting a different frame. default isFrame %f (%Wx%H).framemsgwait secondsβ the duration the βCurrent frameβ indicator is shown. if seconds is zero, wait until the next interactive command. if seconds is-1, don't show any message.framesels selectorsβ override the frame selectorsfselectuses. the first character is the selector for the first frame, the second character is the selector for the second frame and so on. using this variable, one can directly access more than 10 frames. default is an empty string, which is equivalent to"0123456789".fwcolor colorβ the border color of the focused window. default isblack.gap pixelsβ specify the number of pixels surrounding each frame, except for the outer edges which border the screen or its padding. default is20.historysize numberβ specify maximum number of values kept in input history. default is20.winaddcurvscreen 0 | 1β when set to (1), new windows will always start in whatever the current vscreen, ignoring vscreen of the origin process. default is0.ignoreresizehints 0 | 1β when set to (1), window resize hints will be ignored, forcing windows to be the exact sizes of their containing frame. default is0.inputwidth pixelsβ determine the width of the input window. default is200.maxsizegravity nw | w | sw | n | c | s | ne | e | seβ set the default gravity new self-maximized windows will get. possible values are the same as in thegravitycommand, which changes the gravity of an existing window: cardinal points or numbers 1 to 9. default isc.maxundos numberβ the maximal amount of step sdorfehs can undo with theundocommand. default is20.msgwait secondsβ the duration the message window is shown. if seconds is zero, wait infinitely. default is3.onlyborder 0 | 1β determine whether to show borders and gaps (1) or not (0) when there is only one frame on the screen. default is1.padding left top right bottomβ set how much space at the borders of the screen will not be used. default is20 20 20 20.resizefmt formatβ choose the default format for the window label shown when interactively resizing a window. default isResize frame (%Wx%H)which shows the window width and height divided by any PResizeInc hints, which for terminals will show the number of columns and lines.resizeunit pixelsβ set the amount of pixels interactive resize will add/subtract in each step. default is5.rudeness numberβ show or set what kind of windows are allowed to jostle into the foreground. number is a bitwise OR of the following values:1β Transient windows may raise.2β Normal windows may raise.4β New transient windows end up in the foreground.8β New normal windows end up in the foreground.16β Window raise from different vscreen will be permitted.
default is all allowed except vscreen switch, i.e. 15.
startupmessage 0 | 1β decide whether to show a greeting message at startup. the default is1.stickyfmt formatβ choose the default format for current window information shown in the bar when thebarstickysetting is enabled. default is%t.topkmap kmapβ make kmap the top keymap sdorfehs grabs directly. the default value istop.transgravity nw | w | sw | n | c | s | ne | e | seβ set the default gravity new transient windows will get. possible values are the same as in thegravitycommand, which changes the gravity of an existing window: cardinal points or numbers 1 to 9. default isc.vscreens numberβ set the number of virtual screens (vscreens). default is12.warp 0 | 1β decide if focusing a window moves the rat cursor to the place it had been last time this window was focused, or not. default is0(off).wingravity nw | w | sw | n | c | s | ne | e | seβ set the default gravity new normal windows will get. possible values are the same as in thegravitycommand, which changes the gravity of an existing window: cardinal points or numbers 1 to 9. default isnw.waitcursor 0 | 1β determine whether to change the rat cursor when waiting for a key (1) or not (0) seereadkeyanddescribekey. default is1.winfmt formatβ choose the default format for thewindowscommand. default is%n%s%t.winliststyle row | columnβ determines whether windows are shown in rows or in columns. default iscolumn.winname title | name | classβ choose what is considered the "name" of the window by sdorfehs:titleβ The title of the window.nameβ The resource name of the window.classβ The resource class i.e. the name of the application.
default is title.
π FILES π
~/.config/sdorfehs/configβ configuration file read at startup time, if present. π οΈ~/.config/sdorfehs/controlβ unix socket which accepts remote control commands sent bysdorfehs -c. π‘~/.config/sdorfehs/barβ FIFO/named pipe which accepts input to show on the sticky bar whenbarstickyis enabled. π
πͺ EXIT STATUS πͺ
the sdorfehs utility exits 0 on success, and >0 if an error occurs. β¨
π AUTHORS π
sdorfehs is maintained by joshua stein <jcs@jcs.org> and is derived from ratpoison which was originally written by Shawn Betts <sabetts@gmail.com>. π
and that's the whole page, bestie! this one comes from the Debian project, dated Aug 22, 2019, and the manual is titled SDORFEHS(1). go forth and split frames like the icon you are. π β¨π¦
π¦ where this page comes from
- fedora 43: sdorfehs 1.5-6.fc43 Β· GPL-2.0-or-later
- fedora 44: sdorfehs 1.5-7.fc44 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms