Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
f2cd7d6
rewrite keymap system
mahmoodsh36 Jan 14, 2026
f948379
introduce keymap-activate and initialize transient.lisp
mahmoodsh36 Jan 14, 2026
743dc26
add simple popup
mahmoodsh36 Jan 14, 2026
2618f7b
make popup more informative
mahmoodsh36 Jan 18, 2026
a36aa16
improve docstrings a little more
mahmoodsh36 Jan 18, 2026
8cb292f
slight refactor
mahmoodsh36 Jan 18, 2026
45c0fbc
make multi-choice prefix work
mahmoodsh36 Jan 20, 2026
cfd3d56
fix order of keymaps (hence fix priorities)
mahmoodsh36 Jan 23, 2026
9708273
slight change
mahmoodsh36 Jan 23, 2026
e1e057d
add find-prefix-by-id
mahmoodsh36 Jan 23, 2026
122e8a1
introduce :back, :cancel suffix values
mahmoodsh36 Jan 23, 2026
54290e8
rename package to lem/transient
mahmoodsh36 Jan 25, 2026
14bb2ac
rename package to lem/transient
mahmoodsh36 Jan 25, 2026
9671960
rename package to lem/transient and system to lem-transient
mahmoodsh36 Jan 25, 2026
b248c72
use "intern" with explicit package name
mahmoodsh36 Jan 27, 2026
9fd04a9
introduce prefix-behavior, with-last-read-key-sequence, and handle ex…
mahmoodsh36 Jan 28, 2026
8d2d140
use :description instead of :name for keymaps
mahmoodsh36 Jan 28, 2026
08d5ba0
introduce toggle infix, use prompt for multi-choice infix
mahmoodsh36 Jan 29, 2026
e942a15
fix vim search
mahmoodsh36 Jan 30, 2026
aeb925f
fix undefine-key (actually undefine-key-internal)
mahmoodsh36 Jan 30, 2026
221382d
remvoe some redundant stuff
mahmoodsh36 Jan 30, 2026
c6e422d
properly parse keymap keywords in transient, change title styling
mahmoodsh36 Jan 30, 2026
77f4cce
small fix
mahmoodsh36 Feb 1, 2026
7e80ec1
introduce "intermediate" prefixes
mahmoodsh36 Feb 3, 2026
fac64ab
introduce *transient-always-show*
mahmoodsh36 Feb 4, 2026
bad00c6
small refactor
mahmoodsh36 Feb 4, 2026
ae0a59c
introduce multi-value infix to demo
mahmoodsh36 Feb 4, 2026
6abebc2
remove outdated comment
mahmoodsh36 Feb 5, 2026
afa1580
introduce variable-syncing (sync infix with var)
mahmoodsh36 Feb 5, 2026
02c191d
add :extend keyword to make-keymap
mahmoodsh36 Feb 7, 2026
6dfc3b0
add mode-transient-keymap, show extended keymap keys in transient
mahmoodsh36 Feb 7, 2026
83d24a6
rename keymap-extend to keymap-base
mahmoodsh36 Feb 7, 2026
3ef5e52
export more symbols
mahmoodsh36 Feb 12, 2026
80ec65b
remove redundant keymap-find-keybind arg and rename it to keymap-find
mahmoodsh36 Feb 13, 2026
4efb86f
remove "dynamic properties" and just rely on CLOS
mahmoodsh36 Feb 13, 2026
ac0d53a
small fixes
mahmoodsh36 Feb 14, 2026
8617add
make parse-transient eval values, so that quotes are needed
mahmoodsh36 Feb 17, 2026
42cc83d
add bottomside-window and define transient-mode
mahmoodsh36 Feb 17, 2026
d397e8a
add scrolling support
mahmoodsh36 Feb 18, 2026
094c4e3
fix horizontal scrolling
mahmoodsh36 Feb 18, 2026
95deefe
set always-show to nil
mahmoodsh36 Feb 18, 2026
1a162a5
remove "dirty" redrawing technique
mahmoodsh36 Feb 18, 2026
5fa3c41
separate child keymaps from prefixes
mahmoodsh36 Feb 19, 2026
af0119f
handle editor-abort in suffix prompts
mahmoodsh36 Feb 23, 2026
f127b3f
add define-transient-key
mahmoodsh36 Feb 23, 2026
26deed7
indentation
mahmoodsh36 Feb 24, 2026
7f4dda2
add define-prefix, add post-command hook to update popup
mahmoodsh36 Mar 9, 2026
5eba564
fix issue: self-insert was being invoked when it shouldnt have been
mahmoodsh36 Mar 9, 2026
2451d87
show maps that have show-p set, regardless of mode
mahmoodsh36 Mar 12, 2026
4adce9f
use defvar instead of defparameter to avoid issues on recomp
mahmoodsh36 Mar 17, 2026
5997c07
fix handling of undef-hook
mahmoodsh36 Mar 20, 2026
485703e
set popup max-lines to 10 instead of 15 by default
mahmoodsh36 Mar 21, 2026
8d6a40b
fix undef-hook/function-table edge case
mahmoodsh36 Mar 26, 2026
420de32
fix popup behavior when switching buffers
mahmoodsh36 Mar 29, 2026
d125faf
remove outdated comment
mahmoodsh36 Mar 29, 2026
27caf7d
fix outdated argument name (:name to :description)
mahmoodsh36 Apr 2, 2026
3a93271
rename define-transient-key, add macro for it.
mahmoodsh36 Apr 3, 2026
812d3a3
add some documentation/examples
mahmoodsh36 Apr 9, 2026
428aa3f
small change in docs, small fix
mahmoodsh36 Apr 10, 2026
fbd7207
reduce single-char namings of bindings/functions
mahmoodsh36 Apr 11, 2026
ee24264
some docstrings
mahmoodsh36 Apr 12, 2026
805fb47
add organ-mode/cltpt as deps
mahmoodsh36 Dec 24, 2025
48d7aaa
update cltpt/organ-mode versions
mahmoodsh36 Feb 12, 2026
9935fd8
update cltpt/organ-mode versions
mahmoodsh36 Feb 17, 2026
30d1025
update cltpt/organ-mode versions
mahmoodsh36 Feb 25, 2026
c06ff5b
update organ-mode/cltpt versions
mahmoodsh36 Mar 5, 2026
7dac2fb
update organ-mode/cltpt versions
mahmoodsh36 Mar 9, 2026
a807aed
bump organ-mode/cltpt versions
mahmoodsh36 Mar 13, 2026
4783b99
bump organ-mode/cltpt versions
mahmoodsh36 Mar 16, 2026
c5d5d85
bump versions
mahmoodsh36 Apr 10, 2026
784bff2
update docs/default-keybindings.md
github-actions[bot] Apr 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 29 additions & 29 deletions docs/default-keybindings.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion extensions/bookmark/bookmark.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ Use (DESCRIBE (FIND-PACKAGE \"LEM-BOOKMARK\")) to find all available commands.")
If the file is a relative path, it is relative to LEM-HOME.")

(defvar *keymap*
(make-keymap :name "Bookmark keymap")
(make-keymap :description "Bookmark keymap")
"Keymap for bookmark related commands.")

(defvar *bookmark-table* (make-hash-table :test #'equal))
Expand Down
4 changes: 2 additions & 2 deletions extensions/copilot/copilot.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -238,15 +238,15 @@
(defvar *inline-completion-request* nil)
(defvar *completion-canceled* nil)

(defvar *copilot-completion-keymap* (make-keymap :name "Copilot Completion"))
(defvar *copilot-completion-keymap* (make-keymap :description "Copilot Completion"))

(define-key *copilot-completion-keymap* "Tab" 'copilot-accept-suggestion)
(define-key *copilot-completion-keymap* 'copilot-next-suggestion 'copilot-next-suggestion)
(define-key *copilot-completion-keymap* 'copilot-previous-suggestion 'copilot-previous-suggestion)

(defun find-copilot-completion-command (key)
(lookup-keybind key
:keymaps (append (lem-core::all-keymaps)
:keymaps (append (lem-core::other-keymaps)
(list *copilot-completion-keymap*))))

(defun search-preffix (str1 str2)
Expand Down
2 changes: 1 addition & 1 deletion extensions/lem-dashboard/lem-dashboard.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

(defvar *dashboard-buffer-name* "*dashboard*")
(defvar *dashboard-enable* t)
(defvar *dashboard-mode-keymap* (make-keymap :name '*dashboard-mode-keymap* :parent *global-keymap*))
(defvar *dashboard-mode-keymap* (make-keymap :description '*dashboard-mode-keymap*))
(defvar *dashboard-layout* nil
"List of dashboard-item instances; will be drawn in order.")

Expand Down
2 changes: 1 addition & 1 deletion extensions/living-canvas/living-canvas.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
"Current overlay used to highlight the selected function in source view.")

(defvar *living-canvas-keymap*
(lem:make-keymap :name '*living-canvas-keymap*))
(lem:make-keymap :description '*living-canvas-keymap*))

;;; Attributes

Expand Down
2 changes: 1 addition & 1 deletion extensions/skk-mode/skk-mode.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
;;; Keymap

(defvar *skk-mode-keymap*
(make-keymap :name '*skk-mode-keymap*)
(make-keymap :description '*skk-mode-keymap*)
"Keymap for SKK mode. Binds printable characters for Japanese input.")

;; Bind all lowercase letters to skk-self-insert
Expand Down
77 changes: 77 additions & 0 deletions extensions/transient/demo.lisp
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
(in-package :lem/transient)

(defvar *demo-language*
"lisp"
"a demo variable that stays in sync with an infix.")

(define-transient *demo-keymap*
:display-style :row
(:keymap
:display-style :column
:description "file operations"
(:key "o" :suffix 'demo-open :description "demo open")
(:key "s" :suffix 'demo-save :description "demo save (disabled)" :active-p nil)
(:key "w" :suffix 'demo-write :description "demo write")
(:key "x"
:suffix (:keymap
(:key "p" :suffix 'demo-pdf :description "pdf")
(:key "h" :suffix 'demo-html :description "html")
(:key "m" :suffix 'demo-md :description "markdown")
(:key "b" :behavior :back :description "back"))
:description "export format"))
(:keymap
:display-style :column
:description "edit operations"
(:key "c" :suffix 'demo-copy)
(:key "v" :suffix 'demo-paste)
(:key "u" :suffix 'demo-undo)
(:key "q" :behavior :cancel :description "quit"))
(:key "f"
:suffix (:keymap
(:key "g" :suffix 'demo-grep :description "grep")
(:key "f" :suffix 'demo-find :description "find")
(:key "r" :suffix 'demo-replace :description "replace"))
:description "search menu")
(:key "t"
:suffix (:keymap
:display-style :row
(:keymap
:description "languages"
(:key "l"
:type :choice
:id :mode
:choices-func (progn
;; something meaningless
(+ 1 1)
;; then return value
(list "lisp" "python" "js"))
:value "python"
:description "mode"))
(:keymap
:description "editor"
(:key "v"
:type :choice
:choices '("vim" "emacs")
:description "keys")))
:description "langs demo")
(:key "a"
:type :choice
:choices '("value1" "value2" "value3")
:description "multi-value infix")
(:key "s"
:type :choice
:id :synced-infix
:choices '("lisp" "python" "js")
:variable '*demo-language*
:description "variable-synced infix")
(:key "R" :suffix 'demo-run :description "run with mode")
(:key "T" :type 'toggle :value t :suffix 'demo-toggle :description "demo toggle")
(:key "e e" :type 'toggle :value t :suffix 'demo-toggle :description "another demo toggle")
(:key "e a" :type 'toggle :value t :suffix 'demo-toggle :description "and another demo toggle"))

(define-command demo-run () ()
(let ((mode-prefix (find-prefix-by-id *demo-keymap* :mode)))
(message "mode thing value: ~A" (prefix-value mode-prefix))
(message "synced var value: ~A" *demo-language*)))

(define-key *global-keymap* "C-c t" *demo-keymap*)
Loading