From 17bcfa1eedf437330d5653fc87d96fe23a19dd9f Mon Sep 17 00:00:00 2001 From: Lord_Devi Date: Sun, 21 Jul 2024 22:53:02 -0400 Subject: [PATCH] Working on stump. --- .config/stumpwm/lisp/keymap.lisp | 402 ++++++++++++++++--------------- 1 file changed, 202 insertions(+), 200 deletions(-) diff --git a/.config/stumpwm/lisp/keymap.lisp b/.config/stumpwm/lisp/keymap.lisp index 6bcefab..785f55b 100644 --- a/.config/stumpwm/lisp/keymap.lisp +++ b/.config/stumpwm/lisp/keymap.lisp @@ -1,6 +1,7 @@ ;; vim: set ft=lisp : ;; -*-lisp-*- +;; Clear keymaps so we can re-build them ourselves. ;;(setf *root-map* (make-sparse-keymap)) ;;(setf *group-top-map* (make-sparse-keymap)) ;;(setf *group-root-map* (make-sparse-keymap)) @@ -9,220 +10,221 @@ ;;(setf *groups-map* (make-sparse-keymap)) ;;(setf *exchange-window-map* (make-sparse-keymap)) -(export '(*groups-map* - *group-top-maps* - *help-map* - *help-keys* - set-prefix-key)) +;;;;;;;;;; +;; Applications +;;;;;;;;;; +;; Terminals +(define-key *root-map* (kbd "c") "exec kitty") +(define-key *root-map* (kbd "C") "exec alacritty") -(defvar *escape-key* (kbd "C-t") - "The escape key. Any keymap that wants to hang off the escape key -should use this specific key struct instead of creating their own -C-t.") +;; Browser (Firefox +(define-key *root-map* (kbd "b") "exec firefox") +(define-key *root-map* (kbd "B") "colon1 exec firefox http://") -(defvar *help-keys* '("?" "C-h") - "The list of keys used to invoke the help command.") +;; Ssh somewhere +;;(define-key *root-map* (kbd "C-s") "colon1 exec kitty -e ssh ") -(defvar *escape-fake-key* (kbd "t") - "The binding that sends the fake escape key to the current window.") +;; Launch emacsclient if not already loaded. Otherwise, jump it and +;; raise it. +(define-key *root-map* (kbd "e") "decide-on-emacsclient") +;; Create a brand new emacsclient session if one is already running. +(define-key *root-map* (kbd "E") "emacsclient-launch") -(defvar *groups-map* nil - "The keymap that group related key bindings sit on. It is bound to @kbd{C-t g} by default.") +;;;;;;;;;; +;; Window & Frame Management +;;;;;;;;;; +;; Jump between windows in current frame. +(define-key *root-map* (kbd "C-t") "pull-hidden-other") +;; List windows in current frame. +(define-key *root-map* (kbd "\'") "frame-windowlist") +;; List windows. +(define-key *root-map* (kbd "\"") "windowlist") +;; Next window in current frame. +(define-key *root-map* (kbd "n") "pull-hidden-next") +;; Previous window in current frame. +(define-key *root-map* (kbd "p") "pull-hidden-previous") +;; Jump to frame using number overlay. +(define-key *root-map* (kbd "f") "fselect") +;; Jump to most recent urgent window. +(define-key *root-map* (kbd "C-u") "next-urgent") +;; Lay out all windows in a grid and present numbers on them for the +;; user to select which window he wants to bring into focus and zoom +;; in to. +(define-key *root-map* (kbd "RET") "expose") -(defvar *exchange-window-map* nil - "The keymap that exchange-window key bindings sit on. It is bound to @kbd{C-t x} by default.") +;; Select window by number. +;; TODO: Can I have these window numbers start at 1 instead of 0 +;; somehow? +(define-key *root-map* (kbd "1") "select-window-by-number 1") +(define-key *root-map* (kbd "2") "select-window-by-number 2") +(define-key *root-map* (kbd "3") "select-window-by-number 3") +(define-key *root-map* (kbd "4") "select-window-by-number 4") +(define-key *root-map* (kbd "5") "select-window-by-number 5") +(define-key *root-map* (kbd "6") "select-window-by-number 6") +(define-key *root-map* (kbd "7") "select-window-by-number 7") +(define-key *root-map* (kbd "8") "select-window-by-number 8") +(define-key *root-map* (kbd "9") "select-window-by-number 9") +(define-key *root-map* (kbd "0") "select-window-by-number 0") -(defvar *help-map* nil - "Help related bindings hang from this keymap") +;; Pull window by number. +(define-key *root-map* (kbd "1") "pull-window-by-number 1") +(define-key *root-map* (kbd "2") "pull-window-by-number 2") +(define-key *root-map* (kbd "3") "pull-window-by-number 3") +(define-key *root-map* (kbd "4") "pull-window-by-number 4") +(define-key *root-map* (kbd "5") "pull-window-by-number 5") +(define-key *root-map* (kbd "6") "pull-window-by-number 6") +(define-key *root-map* (kbd "7") "pull-window-by-number 7") +(define-key *root-map* (kbd "8") "pull-window-by-number 8") +(define-key *root-map* (kbd "9") "pull-window-by-number 9") +(define-key *root-map* (kbd "0") "pull-window-by-number 0") -(defvar *group-top-maps* '((tile-group *tile-group-top-map*) - (group *group-top-map*)) - "An alist of the top level maps for each group type. For a given -group, all maps whose type matches the given group are active. So for -a tile-group, both the group map and tile-group map are active. +;; Move window by direction. +(define-key *root-map* (kbd "M-l") "move-window right") +(define-key *root-map* (kbd "M-h") "move-window left") +(define-key *root-map* (kbd "M-k") "move-window up") +(define-key *root-map* (kbd "M-j") "move-window down") -Order is important. Each map is seached in the order they appear in -the list (inactive maps being skipped). In general the order should go -from most specific groups to most general groups.") +;; Navigate focus by direction. +(define-key *root-map* (kbd "l") "move-focus right") +(define-key *root-map* (kbd "h") "move-focus left") +(define-key *root-map* (kbd "k") "move-focus up") +(define-key *root-map* (kbd "M") "move-focus down") -(defvar *group-top-map* nil) -(defvar *group-root-map* nil - "Commands specific to a group context hang from this keymap. -It is available as part of the @dnf{prefix map}.") -(defvar *tile-group-top-map* nil) -(defvar *tile-group-root-map* nil - "Commands specific to a tile-group context hang from this keymap. -It is available as part of the @dnf{prefix map} when the active group -is a tile group.") +;; Vertical Split. +(define-key *root-map* (kbd "s") "vsplit") +;; Horizontal Split. +(define-key *root-map* (kbd "S") "hsplit") +;; Remove currently active frame from split. +(define-key *root-map* (kbd "R") "remove-split") +;; Resize frames. +(define-key *root-map* (kbd "r") "iresize") +;; Clear current frame of windows. +(define-key *root-map* (kbd "-") "fclear") -;; Do it this way so its easier to wipe the map and get a clean one. -(defmacro fill-keymap (map &rest bindings) - `(unless ,map - (setf ,map - (let ((m (make-sparse-keymap))) - ,@(loop for i = bindings then (cddr i) - while i - collect `(define-key m ,(first i) ,(second i))) - m)))) -(setf *help-map* (make-sparse-keymap)) +;; Place current window (apply placement rules to it.) +(define-key *root-map* (kbd "P") "place-current-window") +;; Place all windows (apply placement rules to it.) +(define-key *root-map* (kbd "W") "place-existing-windows") -(fill-keymap *top-map* - *escape-key* '*root-map*) +;;;;;;;;;; +;; Groups +;;;;;;;;;; +;; List all groups as well as their windows. +(define-key *root-map* (kbd "G") "vgroups") -(fill-keymap *root-map* - (kbd "!") "exec" - (kbd "C-g") "abort" - *escape-fake-key* "send-escape" - (kbd ";") "colon" - (kbd ":") "eval" - (kbd "v") "version" - (kbd "m") "lastmsg" - (kbd "G") "vgroups" - (kbd "g") '*groups-map* - (kbd "x") '*exchange-window-map* - (kbd "F1") "gselect 1" - (kbd "F2") "gselect 2" - (kbd "F3") "gselect 3" - (kbd "F4") "gselect 4" - (kbd "F5") "gselect 5" - (kbd "F6") "gselect 6" - (kbd "F7") "gselect 7" - (kbd "F8") "gselect 8" - (kbd "F9") "gselect 9" - (kbd "F10") "gselect 10" - (kbd "h") '*help-map*) +;; *GROUPS-MAP* +(define-key *root-map* (kbd "g") *GROUPS-MAP*) -(fill-keymap *group-top-map* - *escape-key* '*group-root-map*) +;; List groups. +(define-key *groups-map* (kbd "g") "groups") +;; New group. +(define-key *groups-map* (kbd "c") "gnew") +;; Next group. +(define-key *groups-map* (kbd "n") "gnext") +;; Previous group. +(define-key *groups-map* (kbd "p") "gprevious") +;; Move focus and current window to next group. +(define-key *groups-map* (kbd "N") "gnext-with-window") +;; Move focus and current window to previous group. +(define-key *groups-map* (kbd "P") "gprevious-with-window") +;; Move to last active group. +(define-key *groups-map* (kbd "o") "gother") +;; List groups. +(define-key *groups-map* (kbd "\"") "grouplist") +;; Move current window to specified group. +(define-key *groups-map* (kbd "m") "gmove") +;; Move marked windows to specified group. +(define-key *groups-map* (kbd "m") "gmove-marked") +;; Kill current group, moving all housed windows to the next group. +(define-key *groups-map* (kbd "k") "gkill") +;; Rename group. +(define-key *groups-map* (kbd "r") "grename") -(fill-keymap *group-root-map* - (kbd "C-u") "next-urgent" - (kbd "M-n") "next" - (kbd "M-p") "prev" - (kbd "o") "other" - (kbd "RET") "expose" - (kbd "C-RET") "expose" - (kbd "w") "windows" - (kbd "C-w") "windows" - (kbd "DEL") "repack-window-numbers" - (kbd "k") "delete" - (kbd "C-k") "delete" - (kbd "K") "kill" - (kbd "'") "select" - (kbd "\"") "windowlist" - (kbd "0") "select-window-by-number 0" - (kbd "1") "select-window-by-number 1" - (kbd "2") "select-window-by-number 2" - (kbd "3") "select-window-by-number 3" - (kbd "4") "select-window-by-number 4" - (kbd "5") "select-window-by-number 5" - (kbd "6") "select-window-by-number 6" - (kbd "7") "select-window-by-number 7" - (kbd "8") "select-window-by-number 8" - (kbd "9") "select-window-by-number 9" - (kbd "C-N") "number" - (kbd "#") "mark" - (kbd "F11") "fullscreen" - (kbd "A") "title" - (kbd "i") "info" - (kbd "I") "show-window-properties") +;; Jump to group by number using groups map. +(define-key *groups-map* (kbd "1") "gselect 1") +(define-key *groups-map* (kbd "2") "gselect 2") +(define-key *groups-map* (kbd "3") "gselect 3") +(define-key *groups-map* (kbd "4") "gselect 4") +(define-key *groups-map* (kbd "5") "gselect 5") +(define-key *groups-map* (kbd "6") "gselect 6") +(define-key *groups-map* (kbd "7") "gselect 7") +(define-key *groups-map* (kbd "8") "gselect 8") +(define-key *groups-map* (kbd "9") "gselect 9") +(define-key *groups-map* (kbd "0") "gselect 0") -(fill-keymap *tile-group-top-map* - *escape-key* '*tile-group-root-map*) +;; Jump to group by number using root map. +(define-key *root-map* (kbd "F1") "gselect 1") +(define-key *root-map* (kbd "F2") "gselect 2") +(define-key *root-map* (kbd "F3") "gselect 3") +(define-key *root-map* (kbd "F4") "gselect 4") +(define-key *root-map* (kbd "F5") "gselect 5") +(define-key *root-map* (kbd "F6") "gselect 6") +(define-key *root-map* (kbd "F7") "gselect 7") +(define-key *root-map* (kbd "F8") "gselect 8") +(define-key *root-map* (kbd "F9") "gselect 9") +(define-key *root-map* (kbd "F10") "gselect 10") -(fill-keymap *tile-group-root-map* - (kbd "n") "pull-hidden-next" - (kbd "C-n") "pull-hidden-next" - (kbd "C-M-n") "next-in-frame" - (kbd "SPC") "pull-hidden-next" - (kbd "C-SPC") "pull-hidden-next" - (kbd "p") "pull-hidden-previous" - (kbd "C-p") "pull-hidden-previous" - (kbd "C-M-p") "prev-in-frame" - (kbd "P") "place-current-window" - (kbd "W") "place-existing-windows" - *escape-key* "pull-hidden-other" - (kbd "M-t") "other-in-frame" - (kbd "C-0") "pull 0" - (kbd "C-1") "pull 1" - (kbd "C-2") "pull 2" - (kbd "C-3") "pull 3" - (kbd "C-4") "pull 4" - (kbd "C-5") "pull 5" - (kbd "C-6") "pull 6" - (kbd "C-7") "pull 7" - (kbd "C-8") "pull 8" - (kbd "C-9") "pull 9" - (kbd "R") "remove" - (kbd "s") "vsplit" - (kbd "S") "hsplit" - (kbd "r") "iresize" - (kbd "o") "fnext" - (kbd "TAB") "fnext" - (kbd "M-TAB") "fother" - (kbd "f") "fselect" - (kbd "F") "curframe" - (kbd "-") "fclear" - (kbd "Q") "only" - (kbd "X") "remove-split" - (kbd "q") "quit-confirm" - (kbd "Up") "move-focus up" - (kbd "Down") "move-focus down" - (kbd "Left") "move-focus left" - (kbd "Right") "move-focus right" - (kbd "M-Up") "move-window up" - (kbd "M-Down") "move-window down" - (kbd "M-Left") "move-window left" - (kbd "M-Right") "move-window right" - (kbd "+") "balance-frames" - (kbd "l") "redisplay" - (kbd "C-l") "redisplay") +;;;;;;;;;; +;; Window Exchanging +;;;;;;;;;; +(define-key *root-map* (kbd "x") *EXCHANGE-WINDOW-MAP*) +(define-key *exchange-window-map* (kbd "h") "exchange-direction left") +(define-key *exchange-window-map* (kbd "j") "exchange-direction down") +(define-key *exchange-window-map* (kbd "k") "exchange-direction up") +(define-key *exchange-window-map* (kbd "l") "exchange-direction right") -(fill-keymap *groups-map* - (kbd "g") "groups" - (kbd "c") "gnew" - (kbd "n") "gnext" - (kbd "C-n") "gnext" - (kbd "SPC") "gnext" - (kbd "C-SPC") "gnext" - (kbd "N") "gnext-with-window" - (kbd "p") "gprev" - (kbd "C-p") "gprev" - (kbd "P") "gprev-with-window" - (kbd "o") "gother" - (kbd "'") "gselect" - (kbd "\"") "grouplist" - (kbd "m") "gmove" - (kbd "M") "gmove-marked" - (kbd "k") "gkill" - (kbd "A") "grename" - (kbd "r") "grename" - (kbd "1") "gselect 1" - (kbd "2") "gselect 2" - (kbd "3") "gselect 3" - (kbd "4") "gselect 4" - (kbd "5") "gselect 5" - (kbd "6") "gselect 6" - (kbd "7") "gselect 7" - (kbd "8") "gselect 8" - (kbd "9") "gselect 9" - (kbd "0") "gselect 10") -(fill-keymap *exchange-window-map* - (kbd "Up") "exchange-direction up" - (kbd "Down") "exchange-direction down" - (kbd "Left") "exchange-direction left" - (kbd "Right") "exchange-direction right" - (kbd "p") "exchange-direction up" - (kbd "n") "exchange-direction down" - (kbd "b") "exchange-direction left" - (kbd "f") "exchange-direction right" - (kbd "k") "exchange-direction up" - (kbd "j") "exchange-direction down" - (kbd "h") "exchange-direction left" - (kbd "l") "exchange-direction right") -(fill-keymap *help-map* - (kbd "v") "describe-variable" - (kbd "f") "describe-function" - (kbd "k") "describe-key" - (kbd "c") "describe-command" - (kbd "w") "where-is") +;;;;;;;;;; +;; Help Map +;;;;;;;;;; +(define-key *root-map* (kbd "h") *HELP-MAP*) +(define-key *help-map* (kbd "v") "describe-variable") +(define-key *help-map* (kbd "f") "describe-function") +(define-key *help-map* (kbd "k") "describe-key") +(define-key *help-map* (kbd "c") "describe-command") +(define-key *help-map* (kbd "w") "where-is") + +;;;;;;;;;; +;; Utility +;;;;;;;;;; +;; Exec any shell command. +(define-key *root-map* (kbd "!") "exec") + +;; Abort. (define-key *root-map* (kbd "C-g") "abort") + +;; Send ESC. Needed for some apps on occassion. +(define-key *root-map* (kbd "t") "send-escape") + +;; Colon +(define-key *root-map* (kbd ";") "colon") + +;; Eval a lisp expression using the active stump repl. +(define-key *root-map* (kbd ":") "eval") + +;; Last message. View previous messages from stump. +(define-key *root-map* (kbd "m") "last-message") + +;; Quit with confirmation. +(define-key *root-map* (kbd "q") "quit-confirm") +;; Quit without confirmation. +(define-key *root-map* (kbd "Q") "quit") + +;; Delete window cleanly. +(define-key *root-map* (kbd "k") "delete-window") +;; Kill window entirely. +(define-key *root-map* (kbd "K") "kill-window") + +;; Go fullscreen with current window. +(define-key *root-map* (kbd "F11") "fullscreen") + +;; Set Window Title. +(define-key *root-map* (kbd "T") "title") +;; See Window Info. +(define-key *root-map* (kbd "i") "info") +;; See Window Properties. +(define-key *root-map* (kbd "I") "show-window-properties") +;; Mark window. +(define-key *root-map* (kbd ".") "mark") +;; Un-Mark window. +(define-key *root-map* (kbd ",") "clear-window-marks") +;; Pull marked windows. +(define-key *root-map* (kbd ">") "pull-marked")