[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:
		
							parent
							
								
									4a6fbf3264
								
							
						
					
					
						commit
						d63da4af42
					
				| @ -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 doesn’t know some characters | ||||
| by their actual name, rather by another one that I find too long and | ||||
| too bothersome to remember. So here’s 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, let’s 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~ | | ||||
| 
 | ||||
| Let’s translate this table in CommonLisp: | ||||
| #+begin_src lisp | ||||
| @ -1826,12 +1854,15 @@ games and the bépo layout most of the time. I’ll 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. I’ll 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. I’ll 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. I’ll use the command | ||||
|     char)) | ||||
| #+end_src | ||||
| 
 | ||||
| #+RESULTS[6934c27c10c3f968f70b0112d4639298e519fe61]: num-to-char | ||||
| : * | ||||
| #+RESULTS[0c35d70ec5195a6f24fdaa1f5847c1bda7ae18be]: num-to-char | ||||
| : guillemotleft | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user