Hey ! You use stumpwm, emacs or tmux and your screen (not the GNU screen) split in lot of parts ? There is a solution to improve that. ZOOMING !
Each of them work with a screen divided into panes/windows (the meaning of theses words change between the program), sometime you want want to have the one where your work in fullscreen. An option exists in each of them to get fullscreen temporarly on a window.
Emacs : (not native)
This is not native in emacs, you will need to install
from your favorite repository.
Add the thoses lines in your ~/.emacs :
(require 'zoom-window) (global-set-key (kbd "C-x C-z") 'zoom-window-zoom)
Type C-x C-z to zoom/unzoom your current frame
Toogle zoom (in or out)
Add this to your ~/.stumpwmrc
(define-key *root-map* (kbd "z") "fullscreen")
Using “prefix z” the current window will toggle fullscreen.
When I started port of the week articles I was planning to write an article every week but now I don’t have much ports too speak about.
Today is about x11/stumpwm ! I already wrote about this window manager but since this month, it’s now available in ports on -current and later in 6.1 release.
I want to talk about stumpwm, a window manager written in Common LISP. I think one must at least like emacs to like stumpwm. Stumpwm is a tiling window manager one which you create “panes” on the screen like windows on Emacs. A single pane takes 100% of the screen, then you can split it into 2 panes vertically or horizontally and resize it, and you can split again and again. There is no “automatic” tiling. By default, if you have ONE pane, you will only have ONE window displayed, this is a bit different that others tiling wm I had tried. Also, virtual desktops are named groups, nothing special here, you can create/delete groups and rename it. Finally, stumpwm is not minimalistic.
To install it, you need to get the sources of stumpwm, install a common lisp interpreter (sbcl, clisp, ecl etc…), install quicklisp (which is not in packages), install the quicklisp packages cl-ppcre and clx and then you can compile stumpwm, that will produce a huge binary which embedded a common lisp interpreter (that’s a way to share common lisp executables, the interpreter can create an executable from itself and include the files you want to execute). I would like to make a package for OpenBSD but packaging quicklisp and its packages seems too difficult for me at the moment.
Here is my config file in ~/.stumpwmrc.
Updated : 23th january 2018
(defun chomp(text) (subseq text 0 (- (length text) 1))) (defmacro cmd(command) `(progn `(:eval (chomp (stumpwm:run-shell-command ,,command t))))) (defun get-latence() (let ((now (get-universal-time))) (when (> (- now *latence-last-update* ) 30) (setf *latence-last-update* now) (when (probe-file "/tmp/latenceresult") (with-open-file (x "/tmp/latenceresult" :direction :input) (setf *latence* (read-line x)))))) *latence*) (defvar *latence-last-update* (get-universal-time)) (defvar *latence* "nil") (set-module-dir "~/dev/stumpwm-contrib/") (stumpwm:run-shell-command "setxkbmap fr") (stumpwm:run-shell-command "feh --bg-fill red_damask-wallpaper-1920x1080.jpg") (defvar color1 "#886666") (defvar color2 "#222222") (setf stumpwm:*mode-line-background-color* color2 stumpwm:*mode-line-foreground-color* color1 stumpwm:*mode-line-border-color* "#555555" stumpwm:*screen-mode-line-format* (list "%g | %v ^>^7 %B | " '(:eval (get-latence)) "ms %d ") stumpwm:*mode-line-border-width* 1 stumpwm:*mode-line-pad-x* 6 stumpwm:*mode-line-pad-y* 1 stumpwm:*mode-line-timeout* 5 stumpwm:*mouse-focus-policy* :click ;;stumpwm:*group-format* "%n·%t stumpwm:*group-format* "%n" stumpwm:*time-modeline-string* "%H:%M" stumpwm:*window-format* "^b^(:fg \"#7799AA\")<%25t>" stumpwm:*window-border-style* :tight stumpwm:*normal-border-width* 1 ) (stumpwm:set-focus-color "#7799CC") (stumpwm:grename "Alpha") (stumpwm:gnewbg "Beta") (stumpwm:gnewbg "Tau") (stumpwm:gnewbg "Pi") (stumpwm:gnewbg "Zeta") (stumpwm:gnewbg "Teta") (stumpwm:gnewbg "Phi") (stumpwm:gnewbg "Rho") (stumpwm:toggle-mode-line (stumpwm:current-screen) (stumpwm:current-head)) (set-prefix-key (kbd "M-a")) (define-key *root-map* (kbd "c") "exec urxvtc") (define-key *root-map* (kbd "RET") "move-window down") (define-key *root-map* (kbd "z") "fullscreen") (define-key *top-map* (kbd "M-&") "gselect 1") (define-key *top-map* (kbd "M-eacute") "gselect 2") (define-key *top-map* (kbd "M-\"") "gselect 3") (define-key *top-map* (kbd "M-quoteright") "gselect 4") (define-key *top-map* (kbd "M-(") "gselect 5") (define-key *top-map* (kbd "M--") "gselect 6") (define-key *top-map* (kbd "M-egrave") "gselect 7") (define-key *top-map* (kbd "M-underscore") "gselect 8") (define-key *top-map* (kbd "s-l") "exec slock") (define-key *top-map* (kbd "s-t") "exec urxvtc") (define-key *top-map* (kbd "M-S-RET") "exec urxvtc") (define-key *top-map* (kbd "M-C") "exec urxvtc") (define-key *top-map* (kbd "s-s") "exec /home/solene/dev/screen_up.sh") (define-key *top-map* (kbd "s-Left") "gprev") (define-key *top-map* (kbd "s-Right") "gnext") (define-key *top-map* (kbd "M-ISO_Left_Tab")"other") (define-key *top-map* (kbd "M-TAB") "fnext") (define-key *top-map* (kbd "M-twosuperior") "next-in-frame") (load-module "battery-portable") (load-module "stumptray")
I use a function to get latency from a script that is started every 20 seconds to display the network latency or nil if I don’t have internet access.
I use rxvt-unicode daemon (urxvtd) as a terminal emulator, so the terminal command is urxvtc (for client), it’s lighter and faster to load.
I also use a weird “alt+tab” combination :
- Alt+tab switch between panes
- Alt+² (the key above tab) circles windows in the current pane
- Alt+Shift+Tab switch to the previous windows selected