branch: externals/eev
commit 1a2f3772e5ee0df4255a8eb7d1d6ad9ff2317ae7
Author: Eduardo Ochs <[email protected]>
Commit: Eduardo Ochs <[email protected]>
Added `find-elocus-links' (`M-h M-l').
---
ChangeLog | 16 +++++++++++++
VERSION | 4 ++--
eev-code.el | 1 +
eev-elinks.el | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
eev-helpful.el | 46 ++++++++++++++++++++++++++++++++++++-
eev-intro.el | 57 +++++++++++++++++++++++-----------------------
eev-load.el | 8 ++++---
eev-mode.el | 3 ++-
eev-tlinks.el | 13 +++++------
9 files changed, 175 insertions(+), 44 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 427d6e4588..316340be51 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,21 @@
+2024-03-06 Eduardo Ochs <[email protected]>
+
+ * eev-mode.el (eev-mode-map-set): bind `M-h M-l' to
+ `find-elocus-links'.
+
+ * eev-elinks.el (find-elocus-links, ee-read-key-sequence)
+ (ee-binding-locus, ee-keymap-lookup): new functions.
+
+2024-03-05 Eduardo Ochs <[email protected]>
+
+ * eev-helpful.el (find-hkeymap-links): new function.
+
+ * eev-code.el (ee-code-c-d-base): added a defvar.
+
2024-03-04 Eduardo Ochs <[email protected]>
+ * eev-tlinks.el (find-eev-reload-links): added eev-aliases.
+
* eev-intro.el (find-eev-levels-intro): rewrote some sections.
* eev-beginner.el (eev-beginner): added a (require 'eev-aliases).
diff --git a/VERSION b/VERSION
index 8f182386e8..5953b2bfa2 100644
--- a/VERSION
+++ b/VERSION
@@ -1,2 +1,2 @@
-Tue Mar 5 01:50:24 GMT 2024
-Mon Mar 4 22:50:24 -03 2024
+Wed Mar 6 04:59:05 GMT 2024
+Wed Mar 6 01:59:05 -03 2024
diff --git a/eev-code.el b/eev-code.el
index 2691123db4..27b845fc72 100644
--- a/eev-code.el
+++ b/eev-code.el
@@ -214,6 +214,7 @@ Try this: (find-code-c-d \"CODE\" \"/DIR/\" :info \"INFO\")"
;; (eek \"M-h M-f apply\")
;; (eek \"M-h M-f interactive\")
;;
+ (defvar ee-{c}dir \"{d}\")
(setq ee-{c}dir \"{d}\")
(defun ee-{c}file (str)
(concat (ee-expand ee-{c}dir) str))
diff --git a/eev-elinks.el b/eev-elinks.el
index 212aab46b6..105b509c8d 100644
--- a/eev-elinks.el
+++ b/eev-elinks.el
@@ -19,7 +19,7 @@
;;
;; Author: Eduardo Ochs <[email protected]>
;; Maintainer: Eduardo Ochs <[email protected]>
-;; Version: 20240113
+;; Version: 20240306
;; Keywords: e-scripts
;;
;; Latest version: <http://anggtwu.net/eev-current/eev-elinks.el>
@@ -85,6 +85,7 @@
;; «.find-eminormodes-links» (to "find-eminormodes-links")
;; «.find-emodeline-links» (to "find-emodeline-links")
;; «.find-emenubar-links» (to "find-emenubar-links")
+;; «.find-elocus-links» (to "find-elocus-links")
;; «.find-code-pdf-links» (to "find-code-pdf-links")
;; «.find-pdf-links» (to "find-pdf-links")
@@ -309,7 +310,8 @@ This is an internal function used by `find-efunction-links'
and
(find-efunctionlgrep ',f)
(find-efunctionlgrep ',f ',f)
(find-eloadhistory-for ',f)
- (find-estring-elisp (ee-eloadhistory-find-flines))
+ (find-eloadhistory-for ',f 2 ,(format " %s)" f))
+ ;; (find-estring-elisp (ee-eloadhistory-find-flines))
""
(symbol-file ',f 'defun)
(find-fline (symbol-file ',f 'defun))
@@ -1737,6 +1739,71 @@ You can use this to understand how the mode line works."
+;;; _
+;;; | | ___ ___ _ _ ___
+;;; | | / _ \ / __| | | / __|
+;;; | |__| (_) | (__| |_| \__ \
+;;; |_____\___/ \___|\__,_|___/
+;;;
+;; «find-elocus-links» (to ".find-elocus-links")
+;; Skel: (find-find-links-links-new "elocus" "key keymap" "f")
+;; Test: (find-elocus-links)
+;; (find-elocus-links "M-h M-h" eev-mode-map)
+;;
+(defun find-elocus-links (&optional key keymap &rest pos-spec-list)
+ "Visit a temporary buffer with info about KEY and its locus (a KEYMAP).
+When `find-elocus-links' is called interactively it asks the user for a
+key sequence, calls `help--binding-locus' to find the keymap in which
+that key sequence is defined, and calls `keymap-lookup' to find the
+command bound to that key sequence - and then it shows lots of
+hyperlinks about all that."
+ (interactive (list (ee-read-key-sequence "Key sequence: ")))
+ (setq key (or key "{key}"))
+ (setq keymap (or keymap (ee-binding-locus key) "{keymap}"))
+ (let* ((f (ee-keymap-lookup (symbol-value keymap) key)))
+ (apply
+ 'find-elinks-elisp
+ `((find-elocus-links ,key ',keymap ,@pos-spec-list)
+ ;; Convention: the first sexp always regenerates the buffer.
+ (find-efunction 'find-elocus-links)
+ ""
+ ,(ee-template0 "\
+;; (require 'helpful)
+;; (find-evariable '{keymap})
+;; (find-evardescr '{keymap})
+;; (find-hkeymap-links '{keymap})
+;; (find-hkeymap-links '{keymap} 2 {(ee-S key)} \"{f}\")
+;; (find-efunction-links '{f})
+;; (find-efunctiondescr '{f})
+;; (find-efunction '{f})
+")
+ )
+ pos-spec-list)))
+
+
+;; Internal functions used by `find-elocus-links'.
+;; Tests: (ee-read-key-sequence "Key sequence: ")
+;; (ee-binding-locus "M-h M-h")
+;; (ee-keymap-lookup eev-mode-map "M-h")
+;; (ee-keymap-lookup eev-mode-map "M-h M-h")
+;; (ee-keymap-lookup eev-mode-map "M-h M-h M-h")
+;; (ee-keymap-lookup "foo" "M-h M-h M-h")
+;; (ee-active-minor-modes)
+;; See: (find-efunction 'help--binding-locus)
+;;
+(defun ee-read-key-sequence (prompt)
+ (format-kbd-macro (read-key-sequence-vector prompt)))
+
+(defun ee-binding-locus (key)
+ (help--binding-locus (kbd key) nil))
+
+(defun ee-keymap-lookup (keymap key)
+ (if (keymapp keymap)
+ (let ((result (keymap-lookup keymap key)))
+ (and (commandp result)
+ result))))
+
+
diff --git a/eev-helpful.el b/eev-helpful.el
index 393032a602..c5613363a4 100644
--- a/eev-helpful.el
+++ b/eev-helpful.el
@@ -19,7 +19,7 @@
;;
;; Author: Eduardo Ochs <[email protected]>
;; Maintainer: Eduardo Ochs <[email protected]>
-;; Version: 20230127
+;; Version: 20240305
;; Keywords: e-scripts
;;
;; Latest version: <http://anggtwu.net/eev-current/eev-helpful.el>
@@ -31,6 +31,7 @@
;; «.find-helpful-links» (to "find-helpful-links")
;; «.find-hlinks» (to "find-hlinks")
+;; «.find-hkeymap-links» (to "find-hkeymap-links")
@@ -182,6 +183,49 @@ the name of a buffer in helpful-mode.")
+;; «find-hkeymap-links» (to ".find-hkeymap-links")
+;; Skel: (find-find-links-links-new "hkeymap" "symbol" "ee-buffer-name")
+;; Test: (find-hkeymap-links 'emacs-lisp-mode-map)
+;;
+(defun find-hkeymap-links (&optional symbol &rest pos-spec-list)
+"Visit a temporary buffer containing hyperlinks for hkeymap."
+ (interactive)
+ (setq symbol (or symbol "{symbol}"))
+ (let ((ee-buffer-name
+ (or ee-buffer-name
+ (format "*(find-hkeymap-links '%s)*" symbol))))
+ (apply
+ 'find-elinks
+ `((find-hkeymap-links ',symbol ,@pos-spec-list)
+ ;; Convention: the first sexp always regenerates the buffer.
+ (find-efunction 'find-hkeymap-links)
+ ""
+ (find-evariable ',symbol)
+ (find-hvariable ',symbol)
+ ""
+ ,(helpful--format-keymap (symbol-value symbol))
+ )
+ pos-spec-list)))
+
+'("--A test:--"
+
+ (defun find-4a (a b c d) (find-wset "13_o2_o2_o_o+" a b c d))
+ (find-4a nil
+ ' (find-hkeymap-links 'emacs-lisp-mode-map)
+ ' (find-hkeymap-links 'lisp-mode-shared-map)
+ ' (find-hkeymap-links 'prog-mode-map)
+ )
+ (find-4a nil
+ ' (find-evariable 'emacs-lisp-mode-map)
+ ' (find-evariable 'lisp-mode-shared-map)
+ ' (find-evariable 'prog-mode-map)
+ )
+
+"--end--")
+
+
+
+
diff --git a/eev-intro.el b/eev-intro.el
index e829258295..2b4d52de03 100644
--- a/eev-intro.el
+++ b/eev-intro.el
@@ -19,7 +19,7 @@
;;
;; Author: Eduardo Ochs <[email protected]>
;; Maintainer: Eduardo Ochs <[email protected]>
-;; Version: 20240304
+;; Version: 20240305
;; Keywords: e-scripts
;;
;; Latest version: <http://anggtwu.net/eev-current/eev-intro.el>
@@ -339,9 +339,9 @@ explained in this video:
The three links in the \"Video links:\" block below
[Video links:]
- (find-eevnavvideo \"0:30\" \"0.1. M-x package-initialize\")
- (find-eevnavvideo \"0:39\" \"0.2. M-x list-packages\")
- (find-eevnavvideo \"2:38\" \"0.3. M-x eev-beginner\")
+ (find-eevnavvideo \"00:30\" \"0.1. M-x package-initialize\")
+ (find-eevnavvideo \"00:39\" \"0.2. M-x list-packages\")
+ (find-eevnavvideo \"02:33\" \"0.3. M-x eev-beginner\")
point to positions in that video; to learn how to use links like
those, visit this URL:
@@ -368,10 +368,10 @@ after starting it again you will need to type `M-x
eev-beginner'
to activate eev again. For an explanation of this in video, see:
[Video links:]
- (find-eevnavvideo \"3:46\" \"0.4. for the beginners: quitting and
restarting\")
- (find-eevnavvideo \"4:06\" \"the part of the sequence of keys\")
- (find-eevnavvideo \"4:21\" \"go to the file menu, click quit\")
- (find-eevnavvideo \"4:46\" \"enter emacs again, type M-x eev-beginner\")
+ (find-eevnavvideo \"03:46\" \"0.4. for the beginners: quitting and
restarting\")
+ (find-eevnavvideo \"04:05\" \"the part of the sequence of keys\")
+ (find-eevnavvideo \"04:23\" \"go to the file menu, click quit\")
+ (find-eevnavvideo \"04:41\" \"enter emacs again, type M-x eev-beginner\")
Eventually you will learn how to get out of everything and how to undo
almost anything, _BUT THAT WILL NOT HAPPEN IN THE FIRST TEN MINUTES_.
@@ -569,7 +569,7 @@ creates this buffer, and switches to it:
[Video links:]
- (find-eev2020video \"29:39\" \"2. A tale of two `describe-key's\")
+ (find-eev2020video \"29:38\" \"2. A tale of two `describe-key's\")
(find-eev2020video \"31:31\" \"the problem with the standard
`describe-key'\")
(find-eev2020video \"35:07\" \"My variant: `find-ekey-links'\")
(find-eev2020video \"37:00\" \"how `find-ekey-links' generates its links\")
@@ -897,12 +897,11 @@ For more details see:
[Video links:]
(find-eevnavvideo \"10:36\" \"if I type <f8> six times here\")
- (find-eevnavvideo \"10:50\" \"a shell running inside Emacs\")
- (find-eev2021video \"0:14\" \"and if we type f8 several times here\")
- (find-eev2019video \"15:11\" \"Demo: the eepitch block (in red star lines)\")
+ (find-eevnavvideo \"10:49\" \"a shell running inside Emacs\")
+ (find-eev2021video \"00:14\" \"and if we type f8 several times here\")
+ (find-eev2019video \"15:13\" \"Demo: the eepitch block (in red star lines)\")
(find-eev2019video \"15:48\" \"Demo: eepitch on non-red star lines\")
- (find-eev2019video \"15:56\" \"Demo: eepitch in action\")
- (find-eevtestblsvideo \"2:33\" \"if I run f8 here I start a new Lua
interpreter\")
+ (find-eev2019video \"15:58\" \"Demo: eepitch in action\")
@@ -1055,12 +1054,12 @@ star, but to make that work you need to know a bit of
Lisp. See:
7. Quick access to one-liners
=============================
[Video links:]
- (find-eevnavvideo \"6:28\" \"M-j: you can forget practically
everything...\")
- (find-eevnavvideo \"6:41\" \"if you type just M-j\")
- (find-eevnavvideo \"6:48\" \"has a header that is beginner-friendly\")
- (find-eevnavvideo \"8:48\" \"most of the entries have hyperlinks to the
manual\")
- (find-eevnavvideo \"9:48\" \"M-j with numeric prefixes\")
- (find-eevnavvideo \"9:59\" \"M-2 M-j runs (find-emacs-keys-intro)\")
+ (find-eevnavvideo \"06:29\" \"M-j: you can forget practically
everything...\")
+ (find-eevnavvideo \"06:41\" \"if you type just M-j\")
+ (find-eevnavvideo \"06:49\" \"has a header that is beginner-friendly\")
+ (find-eevnavvideo \"08:45\" \"most of the entries have hyperlinks to the
manual\")
+ (find-eevnavvideo \"09:49\" \"M-j with numeric prefixes\")
+ (find-eevnavvideo \"09:59\" \"M-2 M-j runs (find-emacs-keys-intro)\")
(find-eevnavvideo \"10:06\" \"M-5 M-j runs (find-eev-quick-intro)\")
@@ -1236,9 +1235,9 @@ next section. Try it now:
e (find-fline \"/tmp/foo.tex\")
[Video links:]
- (find-eev2020video \"26:49\" \"1.5.3. `M-J' (meta-uppercase-J)\")
+ (find-eev2020video \"26:48\" \"1.5.3. `M-J' (meta-uppercase-J)\")
(find-eev2020video \"26:58\" \"transforms the current line\")
- (find-eev2020video \"27:37\" \"into a defun\")
+ (find-eev2020video \"27:36\" \"into a defun\")
@@ -1571,10 +1570,10 @@ files.
See also: (find-code-c-d-intro)
[Video links:]
- (find-eev2020video \"8:20\" \"`code-c-d' defines several new functions\")
+ (find-eev2020video \"08:18\" \"`code-c-d' defines several new functions\")
(find-eev2020video \"14:43\" \"1.4. How code-c-d is implemented\")
(find-eev2020video \"17:20\" \"find-code-c-d shows the code...\")
- (find-eev2019video \"17:07\" \"Demo: `code-c-d'\")
+ (find-eev2019video \"17:02\" \"Demo: `code-c-d'\")
@@ -1714,8 +1713,8 @@ some string in it...
(find-pdf-text \"~/Coetzee99.pdf\" 3 \"LECTURE I\")
[Video links:]
- (find-eev2020video \"4:52\" \"`find-pdf-page' calls an external program\")
- (find-eev2020video \"5:26\" \"`find-pdf-text' converts the PDF to text and\")
+ (find-eev2020video \"04:51\" \"`find-pdf-page' calls an external program\")
+ (find-eev2020video \"05:26\" \"`find-pdf-text' converts the PDF to text
and\")
@@ -19356,8 +19355,9 @@ at the top. For example,
(find-eloadhistory-for 'find-eevfile 2 \" ee-eevfile)\")
shows the entry in the load-history for the file in which `find-eevfile'
-was defined, and it jumps to the the beginning of this block in it:
+was defined, and it jumps to the first defun in this block:
+ ee-eevfile
(defun . ee-eevfile)
(defun . find-eevfile)
(defun . find-eevsh)
@@ -19369,7 +19369,8 @@ was defined, and it jumps to the the beginning of this
block in it:
These are exactly the functions that were defined by this call to
`code-c-d',
- (code-c-d \"eev\" ee-eev-source-directory :anchor)
+ ;; (find-code-c-d \"eev\" ee-eev-source-directory :anchor)
+ (code-c-d \"eev\" ee-eev-source-directory :anchor)
that appears here:
diff --git a/eev-load.el b/eev-load.el
index 2b4cd19acf..704ec0c2bb 100644
--- a/eev-load.el
+++ b/eev-load.el
@@ -20,7 +20,7 @@
;;
;; Author: Eduardo Ochs <[email protected]>
;; Maintainer: Eduardo Ochs <[email protected]>
-;; Version: 20240227
+;; Version: 20240304
;; Keywords: e-scripts
;;
;; Supersedes: (find-eev "eev-all.el")
@@ -185,9 +185,11 @@
;; IMPORTANT: Since 2019mar05 these files are no longer loaded by
;; default! Note the "'" at the beginning of each line!
+;; This can't be loaded by default because it needs a package (hydra).
+' (require 'eev-hydras) ; (find-eev "eev-hydras.el")
-
-;; TODO: explain this!
+;; This is optional because it "contaminates the main namespace".
+;; See: (find-eev-levels-intro)
' (require 'eev-aliases) ; (find-eev "eev-aliases.el")
diff --git a/eev-mode.el b/eev-mode.el
index 9e5ab54f20..fde2fbad53 100644
--- a/eev-mode.el
+++ b/eev-mode.el
@@ -19,7 +19,7 @@
;;
;; Author: Eduardo Ochs <[email protected]>
;; Maintainer: Eduardo Ochs <[email protected]>
-;; Version: 20240228
+;; Version: 20240306
;; Keywords: e-scripts
;;
;; Latest version: <http://anggtwu.net/eev-current/eev-mode.el>
@@ -125,6 +125,7 @@ and: (find-eval-intro \"`M-k'\")"
(define-key eev-mode-map "\M-h\M-h" 'find-here-links)
(define-key eev-mode-map "\M-h\M-i" 'find-eintro-or-einfo-links)
(define-key eev-mode-map "\M-h\M-k" 'find-ekey-links)
+ (define-key eev-mode-map "\M-h\M-l" 'find-elocus-links)
(define-key eev-mode-map "\M-h\M-n" 'find-eunicodeucs)
(define-key eev-mode-map "\M-h\M-p" 'find-pdf-links)
(define-key eev-mode-map "\M-h\M-s" 'find-strange-function-links)
diff --git a/eev-tlinks.el b/eev-tlinks.el
index b1a8fa9709..33d8c23196 100644
--- a/eev-tlinks.el
+++ b/eev-tlinks.el
@@ -1022,21 +1022,19 @@ sudo dpkg -i *.deb
;;; \___|\___| \_/ |_| \___|_|\___/ \__,_|\__,_|
;;;
;; «find-eev-reload-links» (to ".find-eev-reload-links")
-;; Skel: (find-find-links-links-new "eev-reload" "dir" "")
+;; Skel: (find-find-links-links-new "eev-reload" "" "")
;; Test: (find-eev-reload-links)
;;
-(defun find-eev-reload-links (&optional dir &rest pos-spec-list)
+(defun find-eev-reload-links (&rest pos-spec-list)
"Visit a temporary buffer with a script for reloading eev. Experimental!"
(interactive)
- (setq dir (or dir "{dir}"))
(apply
'find-elinks-elisp
- `((find-eev-reload-links ,dir ,@pos-spec-list)
+ `((find-eev-reload-links ,@pos-spec-list)
;; Convention: the first sexp always regenerates the buffer.
(find-efunction 'find-eev-reload-links)
""
- ,(ee-template0 "\
-
+ ,(ee-template0 "
(eepitch-shell)
(eepitch-kill)
(eepitch-shell)
@@ -1063,7 +1061,8 @@ git pull
eev-wconfig
eev-audiovideo
eev-videolinks
- eev-rcirc\"))
+ eev-rcirc
+ eev-aliases\"))
do (load modulename))