Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
06ca1cc
rewrite keymap system
mahmoodsh36 Jan 14, 2026
3793971
introduce keymap-activate and initialize transient.lisp
mahmoodsh36 Jan 14, 2026
c588bed
add simple popup
mahmoodsh36 Jan 14, 2026
c27b19c
make popup more informative
mahmoodsh36 Jan 18, 2026
78f4796
improve docstrings a little more
mahmoodsh36 Jan 18, 2026
155b527
slight refactor
mahmoodsh36 Jan 18, 2026
bdba683
make multi-choice prefix work
mahmoodsh36 Jan 20, 2026
ad9ce93
fix order of keymaps (hence fix priorities)
mahmoodsh36 Jan 23, 2026
43112dc
slight change
mahmoodsh36 Jan 23, 2026
ce57101
add find-prefix-by-id
mahmoodsh36 Jan 23, 2026
aad05cb
introduce :back, :cancel suffix values
mahmoodsh36 Jan 23, 2026
d42842a
rename package to lem/transient
mahmoodsh36 Jan 25, 2026
df5d8e4
rename package to lem/transient
mahmoodsh36 Jan 25, 2026
aa42f22
rename package to lem/transient and system to lem-transient
mahmoodsh36 Jan 25, 2026
ca27e2e
use "intern" with explicit package name
mahmoodsh36 Jan 27, 2026
9fe484f
introduce prefix-behavior, with-last-read-key-sequence, and handle ex…
mahmoodsh36 Jan 28, 2026
3d5d820
use :description instead of :name for keymaps
mahmoodsh36 Jan 28, 2026
674b205
introduce toggle infix, use prompt for multi-choice infix
mahmoodsh36 Jan 29, 2026
572be06
fix vim search
mahmoodsh36 Jan 30, 2026
60149a5
fix undefine-key (actually undefine-key-internal)
mahmoodsh36 Jan 30, 2026
f1c9db1
remvoe some redundant stuff
mahmoodsh36 Jan 30, 2026
6e39a90
properly parse keymap keywords in transient, change title styling
mahmoodsh36 Jan 30, 2026
ec7418e
small fix
mahmoodsh36 Feb 1, 2026
b671ff0
introduce "intermediate" prefixes
mahmoodsh36 Feb 3, 2026
12a4deb
introduce *transient-always-show*
mahmoodsh36 Feb 4, 2026
d5e0bfa
small refactor
mahmoodsh36 Feb 4, 2026
53793d9
introduce multi-value infix to demo
mahmoodsh36 Feb 4, 2026
25743b1
remove outdated comment
mahmoodsh36 Feb 5, 2026
a71be67
introduce variable-syncing (sync infix with var)
mahmoodsh36 Feb 5, 2026
971acca
add :extend keyword to make-keymap
mahmoodsh36 Feb 7, 2026
67ce381
add mode-transient-keymap, show extended keymap keys in transient
mahmoodsh36 Feb 7, 2026
bf24f9d
rename keymap-extend to keymap-base
mahmoodsh36 Feb 7, 2026
464ed61
export more symbols
mahmoodsh36 Feb 12, 2026
281dbbb
remove redundant keymap-find-keybind arg and rename it to keymap-find
mahmoodsh36 Feb 13, 2026
3c49131
remove "dynamic properties" and just rely on CLOS
mahmoodsh36 Feb 13, 2026
7172a02
small fixes
mahmoodsh36 Feb 14, 2026
c26b35e
make parse-transient eval values, so that quotes are needed
mahmoodsh36 Feb 17, 2026
69f7c4a
add bottomside-window and define transient-mode
mahmoodsh36 Feb 17, 2026
89c200b
add scrolling support
mahmoodsh36 Feb 18, 2026
81ae5da
fix horizontal scrolling
mahmoodsh36 Feb 18, 2026
729f2fe
set always-show to nil
mahmoodsh36 Feb 18, 2026
3585141
remove "dirty" redrawing technique
mahmoodsh36 Feb 18, 2026
794f923
separate child keymaps from prefixes
mahmoodsh36 Feb 19, 2026
9893fc8
handle editor-abort in suffix prompts
mahmoodsh36 Feb 23, 2026
61b20ec
add define-transient-key
mahmoodsh36 Feb 23, 2026
d0bdf76
indentation
mahmoodsh36 Feb 24, 2026
ce61951
add define-prefix, add post-command hook to update popup
mahmoodsh36 Mar 9, 2026
c316add
fix issue: self-insert was being invoked when it shouldnt have been
mahmoodsh36 Mar 9, 2026
f3d6401
show maps that have show-p set, regardless of mode
mahmoodsh36 Mar 12, 2026
06bdc4a
use defvar instead of defparameter to avoid issues on recomp
mahmoodsh36 Mar 17, 2026
dce4e71
fix handling of undef-hook
mahmoodsh36 Mar 20, 2026
95d0dae
set popup max-lines to 10 instead of 15 by default
mahmoodsh36 Mar 21, 2026
b595931
fix undef-hook/function-table edge case
mahmoodsh36 Mar 26, 2026
5eb74c7
fix popup behavior when switching buffers
mahmoodsh36 Mar 29, 2026
a237414
remove outdated comment
mahmoodsh36 Mar 29, 2026
7abc872
fix outdated argument name (:name to :description)
mahmoodsh36 Apr 2, 2026
9123268
rename define-transient-key, add macro for it.
mahmoodsh36 Apr 3, 2026
2f73fb3
add some documentation/examples
mahmoodsh36 Apr 9, 2026
a2cb07e
small change in docs, small fix
mahmoodsh36 Apr 10, 2026
797f6fa
reduce single-char namings of bindings/functions
mahmoodsh36 Apr 11, 2026
6526f3c
some docstrings
mahmoodsh36 Apr 12, 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
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)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Contractor: internal_symbol_rule

Contract: contract

AI check failed: "internal_symbol_rule"

Reason:
Added code contains direct references to internal (non-exported) symbols via package double-colon qualifiers (e.g. lem-core::other-keymaps), which violates the rule to use exported symbols from lem or lem-core and avoid internal symbol access.

(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)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Contractor: defpackage_rule

Contract: contract

AI check failed: "defpackage_rule"

Reason:
New files use IN-PACKAGE or other first forms instead of a top-level DEFPACKAGE or UIOP:DEFINE-PACKAGE as required.


(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
Loading