Working on stump.

This commit is contained in:
Lord_Devi 2024-07-21 22:53:02 -04:00
parent 1ac71f2d0b
commit 17bcfa1eed

View file

@ -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")