[StumpWM] Update some elisp, more natural keybind declaration

If characters such as `«` or `»` are used, they get replaced by their
complete name. See table `tbl-char-to-name`.
This commit is contained in:
Lucien Cartier-Tilet 2022-03-28 02:05:39 +02:00
parent 4a6fbf3264
commit d63da4af42
Signed by: phundrak
GPG Key ID: BD7789E705CB8DCA
1 changed files with 69 additions and 22 deletions

View File

@ -1253,6 +1253,34 @@ following characters:
So if you see any weird keybind involving these characters, this is
because of my layout.
Something a bit annoying though is Lisp doesnt know some characters
by their actual name, rather by another one that I find too long and
too bothersome to remember. So heres a list, if you see any of the
characters on the left column in my config, with some org-mode magic,
my actual config will use their name as specified in the right column.
Actually, you even saw some if not all in the previous table.
#+name: tbl-char-to-name
| Character | Name |
|-----------+------------------|
| ~«~ | ~guillemotleft~ |
| ~»~ | ~guillemotright~ |
#+name: char-to-name
#+header: :exports none :noweb yes :results verbatim
#+begin_src emacs-lisp :var table=tbl-char-to-name
(defun my/stumpwm-char-to-name (char)
(let* ((table (mapcar (lambda (entry)
(cons (replace-regexp-in-string "^~" "" (car entry))
(replace-regexp-in-string "^~" "" (cadr entry))))
table))
(table (mapcar (lambda (entry)
(cons (replace-regexp-in-string "~$" "" (car entry))
(replace-regexp-in-string "~$" "" (cdr entry))))
table)))
(or (cdr (assoc char table))
char)))
#+end_src
** Applications
:PROPERTIES:
:CUSTOM_ID: Keybinds-Applications-2t512k00w5j0
@ -1725,20 +1753,20 @@ Then, lets declare a keymap for our media controls.
#+name: media-management
#+caption: ~*my-media-keymap*~
| Keychord | Function |
|----------------+-----------------------------|
| ~.~ | ~media-interactive~ |
| ~guillemotleft~ | ~mpd-prev~ |
| ~guillemotright~ | ~mpd-next~ |
| ~a~ | ~'*my-mpd-add-map*~ |
| ~b~ | ~'*my-mpd-browse-map*~ |
| ~c~ | ~mpd-clear~ |
| ~m~ | ~mpc-interactive~ |
| ~p~ | ~mpd-toggle-pause~ |
| ~s~ | ~mpd-stop~ |
| ~u~ | ~mpd-update~ |
| ~N~ | ~term ncmpcpp -q~ |
| ~v~ | ~term ncmpcpp -qs visualizer~ |
| Keychord | Function |
|----------+-----------------------------|
| ~.~ | ~media-interactive~ |
| ~«~ | ~mpd-prev~ |
| ~»~ | ~mpd-next~ |
| ~a~ | ~'*my-mpd-add-map*~ |
| ~b~ | ~'*my-mpd-browse-map*~ |
| ~c~ | ~mpd-clear~ |
| ~m~ | ~mpc-interactive~ |
| ~p~ | ~mpd-toggle-pause~ |
| ~s~ | ~mpd-stop~ |
| ~u~ | ~mpd-update~ |
| ~N~ | ~term ncmpcpp -q~ |
| ~v~ | ~term ncmpcpp -qs visualizer~ |
Lets translate this table in CommonLisp:
#+begin_src lisp
@ -1826,12 +1854,15 @@ games and the bépo layout most of the time. Ill use the command
:END:
#+name: keybinds-gen
#+begin_src emacs-lisp :var map="m" keybinds=frames-float
#+header: :wrap "src lisp :exports none" :exports none :noweb yes
#+begin_src emacs-lisp :var map="m" keybinds=media-management :var table=tbl-char-to-name
<<char-to-name>>
(mapconcat (lambda (keybind)
(format "%s" (let ((key (let ((s (car keybind)))
(substring-no-properties s 1 (1- (length s)))))
(function (let ((s (cadr keybind)))
(substring-no-properties s 1 (1- (length s))))))
(format "%s" (let* ((key (let ((s (car keybind)))
(substring-no-properties s 1 (1- (length s)))))
(function (let ((s (cadr keybind)))
(substring-no-properties s 1 (1- (length s)))))
(key (my/stumpwm-char-to-name key)))
`(define-key ,map
(kbd ,(format "\"%s\"" key))
,(if (string-prefix-p "'" function t)
@ -1841,6 +1872,22 @@ games and the bépo layout most of the time. Ill use the command
"\n")
#+end_src
#+RESULTS[a20994f97465549466dd676b4b452593194e0495]: keybinds-gen
#+begin_src lisp :exports none
(define-key m (kbd ".") "media-interactive")
(define-key m (kbd "guillemotleft") "mpd-prev")
(define-key m (kbd "guillemotright") "mpd-next")
(define-key m (kbd "a") '*my-mpd-add-map*)
(define-key m (kbd "b") '*my-mpd-browse-map*)
(define-key m (kbd "c") "mpd-clear")
(define-key m (kbd "m") "mpc-interactive")
(define-key m (kbd "p") "mpd-toggle-pause")
(define-key m (kbd "s") "mpd-stop")
(define-key m (kbd "u") "mpd-update")
(define-key m (kbd "N") "term ncmpcpp -q")
(define-key m (kbd "v") "term ncmpcpp -qs visualizer")
#+end_src
#+name: interactive-gen
#+begin_src emacs-lisp :var name="inter" keys=inter-mpc
(format "%s"
@ -1863,7 +1910,7 @@ games and the bépo layout most of the time. Ill use the command
#+end_src
#+name: num-to-char
#+begin_src emacs-lisp :var table=number-to-char-table num=0
#+begin_src emacs-lisp :var table=number-to-char-table num=2
(let ((char (replace-regexp-in-string (regexp-quote "~")
""
(let* ((row (assoc num table))
@ -1877,5 +1924,5 @@ games and the bépo layout most of the time. Ill use the command
char))
#+end_src
#+RESULTS[6934c27c10c3f968f70b0112d4639298e519fe61]: num-to-char
: *
#+RESULTS[0c35d70ec5195a6f24fdaa1f5847c1bda7ae18be]: num-to-char
: guillemotleft