[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/eev d2dc3d6 08/14: Moved `find-here-links' and friends
From: |
Stefan Monnier |
Subject: |
[elpa] externals/eev d2dc3d6 08/14: Moved `find-here-links' and friends to the file find-hlinks.el. |
Date: |
Mon, 24 Feb 2020 11:32:09 -0500 (EST) |
branch: externals/eev
commit d2dc3d65163462e76ebc2631af6506b89efe906e
Author: Eduardo Ochs <address@hidden>
Commit: Eduardo Ochs <address@hidden>
Moved `find-here-links' and friends to the file find-hlinks.el.
---
ChangeLog | 29 ++++
VERSION | 4 +-
eev-code.el | 1 +
eev-elinks.el | 246 +++-----------------------------
eev-hlinks.el | 439 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
eev-intro.el | 30 +++-
eev-load.el | 3 +-
7 files changed, 522 insertions(+), 230 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index bb15ab2..8299f11 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,35 @@
2020-01-08 Eduardo Ochs <address@hidden>
+ * eev-hlinks.el: new file.
+ (ee-buffer-re, ee-buffer-eq, ee-buffer-help0)
+ (ee-buffer-help-re0, ee-buffer-help, ee-grep-bufferp)
+ (ee-man-bufferp, ee-rcirc-bufferp, ee-info-bufferp)
+ (ee-dired-bufferp, ee-wdired-bufferp, ee-w3m-bufferp)
+ (ee-custom-bufferp, ee-epackages-bufferp, ee-intro-bufferp)
+ (ee-freenode-bufferp, ee-ecolors-bufferp, ee-efaces-bufferp)
+ (ee-pdftext-bufferp, ee-efunctiondescr-bufferp)
+ (ee-find-efunctiondescr-links, ee-evardescr-bufferp)
+ (ee-find-evardescr-links, ee-efunctiondescr-re, ee-evardescr-re)
+ (ee-efacedescr-re, ee-efacedescr-bufferp)
+ (ee-find-efacedescr-links, ee-epackage-re, ee-epackage-bufferp)
+ (ee-find-epackage-links, ee-man-re, ee-find-man-links)
+ (ee-custom-re, ee-find-custom-links, ee-file-bufferp)
+ (ee-find-efaces-links, ee-find-ecolors-links)
+ (ee-find-epackages-links, ee-find-pdftext-links)
+ (ee-find-here-links, find-here-links-test, ee-find-here-links0)
+ (find-here-links, find-here-links-beginner)
+ (ee-window-configuration-before-M-h-M-3, find-here-links-3)
+ (find-here-links-1): all these functions and variables were moved
+ from eev-elinks.el to eev-hlinks.el.
+
+ * eev-intro.el (find-links-conv-intro): mention eev-hlinks.el in
+ the classification in the section "3. Classification".
+
* eev-tlinks.el (find-find-links-links-new): new function.
+ (find-fossil-links, ee-fossil-url-stem): new functions.
+
+ * eev-code.el: added a `(code-c-d "cl" ...)', for the Common Lisp
+ extensions.
2020-01-07 Eduardo Ochs <address@hidden>
diff --git a/VERSION b/VERSION
index 90fff04..cf5b4d5 100644
--- a/VERSION
+++ b/VERSION
@@ -1,2 +1,2 @@
-Wed Jan 8 22:25:42 GMT 2020
-Wed Jan 8 19:25:42 -03 2020
+Tue Feb 11 18:57:39 GMT 2020
+Tue Feb 11 15:57:39 -03 2020
diff --git a/eev-code.el b/eev-code.el
index 1ed79d7..ef9b638 100644
--- a/eev-code.el
+++ b/eev-code.el
@@ -328,6 +328,7 @@ Note: the POS-SPEC-LIST arguments are currently not used."
(code-c-d "e" ee-emacs-lisp-directory "emacs" :gz) ; (find-enode "Top")
(code-c-d "el" ee-emacs-lisp-directory "elisp" :gz) ; (find-elnode "Top")
(code-c-d "eli" ee-emacs-lisp-directory "eintr" :gz) ; (find-elinode "Top")
+(code-c-d "cl" (ee-efile "emacs-lisp/") "cl" :gz) ; (find-clnode "Top")
(code-c-d "eleim" ee-emacs-leim-directory :gz)
(code-c-d "equail" (ee-eleimfile "quail/") :gz)
(code-c-d "eetc" data-directory :gz)
diff --git a/eev-elinks.el b/eev-elinks.el
index edd1f7b..7c8c5db 100644
--- a/eev-elinks.el
+++ b/eev-elinks.el
@@ -77,13 +77,23 @@
;; «.find-color-links» (to "find-color-links")
;; «.find-epackage-links» (to "find-epackage-links")
+;; «.find-code-pdf-links» (to "find-code-pdf-links")
+;; «.find-pdf-links» (to "find-pdf-links")
+;; «.find-code-audiovideo-links» (to "find-code-audiovideo-links")
+
+
+
+;; The functions in these sections were moved to:
+;; (find-eev "eev-hlinks.el")
+;;
;; «.find-here-links» (to "find-here-links")
;; «.find-here-links-beginner» (to "find-here-links-beginner")
;; «.find-here-links-3» (to "find-here-links-3")
+;; «find-here-links» (to ".find-here-links")
+;; «find-here-links-beginner» (to ".find-here-links-beginner")
+;; «find-here-links-3» (to ".find-here-links-3")
+
-;; «.find-code-pdf-links» (to "find-code-pdf-links")
-;; «.find-pdf-links» (to "find-pdf-links")
-;; «.find-code-audiovideo-links» (to "find-code-audiovideo-links")
@@ -279,7 +289,7 @@ This is an internal function used by `find-efunction-links'
and
;;; |_| |_|_| |_|\__,_| \___| \_/ \__,_|_| |_|\__,_|_.__/|_|\___|
;;;
;; «find-evariable-links» (to ".find-evariable-links")
-;; (find-find-links-links "\\M-v" "evariable" "var")
+;; Skel: (find-find-links-links-old "\\M-v" "evariable" "var")
;; A test: (find-evariable-links 'line-move-visual)
;; (eek "M-h M-v line-move-visual")
@@ -314,7 +324,7 @@ This is an internal function used by `find-efunction-links'
and
;;; |___/
;;
;; «find-ekey-links» (to ".find-ekey-links")
-;; (find-find-links-links "\\M-k" "ekey" "key")
+;; Skel: (find-find-links-links-old "\\M-k" "ekey" "key")
;;
;; The functions in this section generate buffers with hyperlinks
;; about a key sequence. Like this,
@@ -745,7 +755,7 @@ when this is true remove the prefix D from FNAME, and put
the sexp
;;; |_| |_|_| |_|\__,_| |_| |_|_|\___| |_|_|_| |_|_|\_\___/
;;;
;; «find-file-links» (to ".find-file-links")
-;; (find-find-links-links "f" "file" "fname")
+;; Skel: (find-find-links-links-old "f" "file" "fname")
;; A test: (find-file-links "~/tmp/foo")
;; Moved to eev-mode.el:
@@ -793,7 +803,7 @@ when this is true remove the prefix D from FNAME, and put
the sexp
;;; |___/ |_|
;;
;; «find-grep-links» (to ".find-grep-links")
-;; (find-find-links-links "\\M-g" "grep" "")
+;; Skel: (find-find-links-links-old "\\M-g" "grep" "")
;; Tests:
;; (ee-find-grep-commands)
;; (ee-find-grep-functions "~/eev-current/")
@@ -853,7 +863,7 @@ when this is true remove the prefix D from FNAME, and put
the sexp
;;; |_| |_|_| |_|\__,_| |_| |_| |_|\__,_|\___|_| \___/
;;;
;; «find-ekbmacro-links» (to ".find-ekbmacro-links")
-;; (find-find-links-links "M" "macro" "")
+;; Skel: (find-find-links-links-old "M" "macro" "")
;; (find-efunction 'find-ekbmacro-links)
;; Moved to eev-mode.el:
@@ -911,7 +921,7 @@ when this is true remove the prefix D from FNAME, and put
the sexp
(defun ee-region-or-last-kill ()
(or (ee-region) (ee-last-kill)))
-;; (find-find-links-links "\\M-p" "pdflike-page" "page bufname offset")
+;; Skel: (find-find-links-links-old "\\M-p" "pdflike-page" "page bufname
offset")
;; Moved to eev-mode.el:
;; (define-key eev-mode-map "\M-h\M-p" 'find-pdflike-page-links)
@@ -1013,7 +1023,7 @@ See the comments in the source code."
;; (find-templates-intro)
;; «find-eface-links» (to ".find-eface-links")
-;; (find-find-links-links "\\M-s" "eface" "face-symbol")
+;; Skel: (find-find-links-links-old "\\M-s" "eface" "face-symbol")
;; A test: (find-eface-links 'bold)
;; Moved to eev-mode.el:
@@ -1056,7 +1066,7 @@ See the comments in the source code."
;;; |_| |_|_| |_|\__,_| \___|\___\___/|_|\___/|_| |_|_|_| |_|_|\_\___/
;;;
;; «find-color-links» (to ".find-color-links")
-;; (find-find-links-links "c" "color" "initialcolor")
+;; Skel: (find-find-links-links-old "c" "color" "initialcolor")
;; Tests:
;; (find-ecolor-links)
;; (find-ecolor-links "sienna")
@@ -1160,220 +1170,6 @@ This is an internal function used by
`ee-find-epackage-links'."
-;;; __ _ _ _ _ _ _
-;;; / _(_)_ __ __| | | |__ ___ _ __ ___ | (_)_ __ | | _____
-;;; | |_| | '_ \ / _` |_____| '_ \ / _ \ '__/ _ \_____| | | '_ \| |/ / __|
-;;; | _| | | | | (_| |_____| | | | __/ | | __/_____| | | | | | <\__ \
-;;; |_| |_|_| |_|\__,_| |_| |_|\___|_| \___| |_|_|_| |_|_|\_\___/
-;;;
-;; «find-here-links» (to ".find-here-links")
-;; See: (find-eev-quick-intro "`M-h M-h'")
-
-;; (find-efunction 'find-grep-links)
-;; (find-efunction 'find-einfo-links)
-;; (find-efunction 'find-file-links)
-;; (find-find-links-links "\\M-h" "here" "")
-;; (find-efunction 'find-ecolors)
-
-;; Moved the key binding to:
-;; (find-eevfile "eev-mode.el" "\\M-h\\M-h")
-;; (define-key eev-mode-map "\M-h\M-h" 'find-here-links)
-
-;; TODO: support cases like these:
-;; (find-efunctiondescr 'condition-case)
-
-;; Some tools for detecting which kind of buffer we're in.
-(defun ee-buffer-re (re)
- (if (string-match re (buffer-name))
- (match-string 1 (buffer-name))))
-(defun ee-buffer-eq (str) (string= str (buffer-name)))
-
-(defun ee-buffer-help0 () (ee-buffer-eq "*Help*"))
-(defun ee-buffer-help-re0 (re n)
- (if (ee-buffer-help0)
- (save-excursion
- (goto-char (point-min))
- (if (looking-at re) (match-string n)))))
-
-(defun ee-buffer-help (re n) (intern (or (ee-buffer-help-re0 re n) "nil")))
-
-;; By major mode
-(defun ee-grep-bufferp () (eq major-mode 'grep-mode))
-(defun ee-man-bufferp () (eq major-mode 'Man-mode))
-(defun ee-rcirc-bufferp () (eq major-mode 'rcirc-mode))
-(defun ee-info-bufferp () (eq major-mode 'Info-mode))
-(defun ee-dired-bufferp () (eq major-mode 'dired-mode))
-(defun ee-wdired-bufferp () (eq major-mode 'wdired-mode))
-(defun ee-w3m-bufferp () (eq major-mode 'w3m-mode))
-(defun ee-custom-bufferp () (eq major-mode 'Custom-mode))
-(defun ee-epackages-bufferp () (eq major-mode 'package-menu-mode))
-
-;; By buffer name
-(defun ee-intro-bufferp () (ee-buffer-re "^\\*(find-\\(.*\\)-intro)\\*$"))
-(defun ee-freenode-bufferp () (ee-buffer-re "^\\(.*\\).freenode\\.net"))
-(defun ee-ecolors-bufferp () (ee-buffer-eq "*Colors*"))
-(defun ee-efaces-bufferp () (ee-buffer-eq "*Faces*"))
-(defun ee-pdftext-bufferp () (ee-buffer-re "^pdftotext"))
-
-;; By buffer name (when it is "*Help*")
-(defvar ee-efunctiondescr-re
- "^\\([^ \t\n]+\\) is a[^\t\n]*\\(function\\|Lisp macro\\|special form\\)")
-(defun ee-efunctiondescr-bufferp () (ee-buffer-help ee-efunctiondescr-re 1))
-(defun ee-find-efunctiondescr-links ()
- (let ((f (ee-efunctiondescr-bufferp)))
- `((find-efunction-links ',f)
- (find-efunctiondescr ',f))))
-
-(defvar ee-evardescr-re "^\\([^ \t\n]+\\) is a variable")
-(defun ee-evardescr-bufferp () (ee-buffer-help ee-evardescr-re 1))
-(defun ee-find-evardescr-links ()
- (let ((v (ee-evardescr-bufferp)))
- `((find-evariable-links ',v)
- (find-evardescr ',v))))
-
-(defvar ee-efacedescr-re "^Face: \\([^ \t\n]+\\)")
-(defun ee-efacedescr-bufferp () (ee-buffer-help ee-efacedescr-re 1))
-(defun ee-find-efacedescr-links ()
- (let ((f (ee-efacedescr-bufferp)))
- `((find-eface-links ',f)
- (find-efacedescr ',f))))
-
-(defvar ee-epackage-re "^\\([^ \t\n]+\\) is a[ -~]+ package")
-(defun ee-epackage-bufferp () (ee-buffer-help ee-epackage-re 1))
-(defun ee-find-epackage-links ()
- (let ((p (ee-epackage-bufferp)))
- (list (ee-find-epackage-links0 p))))
-
-;; By buffer name (when the mode is man)
-(defvar ee-man-re "^\\*Man \\(.*\\)\\*$")
-(defun ee-find-man-links ()
- (let ((mp (ee-buffer-re ee-man-re)))
- `((find-man ,mp))))
-
-(defvar ee-custom-re "^\\*Customize Group: \\(.*\\)\\*$")
-(defun ee-find-custom-links ()
- (let* ((name (ee-buffer-re ee-custom-re))
- (symbol (intern (downcase (replace-regexp-in-string " " "-" name)))))
- `((find-customizegroup ',symbol))))
-
-;; Other cases
-(defun ee-file-bufferp () buffer-file-name)
-
-
-
-(defun ee-find-efaces-links () `((find-efaces)))
-(defun ee-find-ecolors-links () `((find-ecolors)))
-(defun ee-find-epackages-links () `((find-epackages)))
-(defun ee-find-pdftext-links () (ee-pdflike-page-links))
-
-;; to to:
-;; ee-find-w3m-links
-;; ee-find-ecolor-links
-;;
-
-(defun ee-find-here-links ()
- (cond ;; by major mode
- ((ee-info-bufferp) (cons "" (ee-find-info-links))) ; M-h M-i
- ((ee-man-bufferp) (cons "" (ee-find-man-links))) ; ?
- ((ee-grep-bufferp) (cons "" (ee-find-grep-links))) ; M-h M-g
- ((ee-w3m-bufferp) (cons "" (ee-find-w3m-links))) ; M-h M-w
- ((ee-dired-bufferp) (cons "" (ee-find-file-links))) ; M-h f
- ((ee-wdired-bufferp) (cons "" (ee-find-file-links))) ; M-h f
- ((ee-custom-bufferp) (cons "" (ee-find-custom-links))) ; ?
- ((ee-epackages-bufferp) (cons "" (ee-find-epackages-links))) ; ?
- ;; by buffer name
- ((ee-intro-bufferp) (cons "" (ee-find-intro-links))) ; M-h M-i
- ((ee-freenode-bufferp) (cons "" (ee-find-freenode-links))) ; ?
- ((ee-ecolors-bufferp) (cons "" (ee-find-ecolors-links))) ; ?
- ((ee-efaces-bufferp) (cons "" (ee-find-efaces-links))) ; ?
- ((ee-pdftext-bufferp) (cons "" (ee-find-pdftext-links))) ; ?
- ;; by buffer name, when it is "*Help*"
- ((ee-efunctiondescr-bufferp) (cons "" (ee-find-efunctiondescr-links)))
- ((ee-efacedescr-bufferp) (cons "" (ee-find-efacedescr-links)))
- ((ee-evardescr-bufferp) (cons "" (ee-find-evardescr-links)))
- ((ee-epackage-bufferp) (cons "" (ee-find-epackage-links)))
- ;; other cases
- ((ee-file-bufferp) (cons "" (ee-find-file-links))) ; M-h f
- (t (list "" "Not implemented!" "See:"
- '(find-efunction 'ee-find-here-links)))
- ))
-
-(defun find-here-links-test (sexp)
-"See: (find-links-intro \"`find-here-links'\")"
- (find-wset "13o_2o_o" sexp '(find-here-links)))
-
-;; (find-man "1 cat")
-;; (progn (find-man "1 cat") (buffer-name))
-;; (find-eevfile "eev-rcirc.el")
-
-(defun ee-find-here-links0 ()
- `(,(ee-H "See: ")
- (find-eev-quick-intro "4.1. `find-here-links'")
- (find-emacs-keys-intro "1. Basic keys (eev)" "M-h M-h")
- (find-here-links-intro "4. `find-here-links-3'")
- ))
-
-;; (find-find-links-links "\\M-h" "here" "")
-;;
-(defun find-here-links (&rest pos-spec-list)
-"Visit a temporary buffer containing hyperlinks pointing to here."
- (interactive)
- (apply 'find-elinks
- `(;; The first line of a find-here-links buffer DOES NOT
- ;; regenerates the buffer - instead the first lines point to
- ;; help pages.
- ,@(ee-find-here-links0)
- ,@(ee-find-here-links)
- )
- pos-spec-list))
-
-;; Test: (find-here-links)
-;; (progn (find-enode "Screen") (find-here-links))
-
-
-
-;; «find-here-links-beginner» (to ".find-here-links-beginner")
-;; This is a hack for beginners that is explained in a tutorial. See:
-;; (find-refining-intro "4. A tip for beginners")
-;; (find-refining-intro "4. A tip for beginners" "find-here-links-beginner")
-;;
-(defun find-here-links-beginner (&optional arg)
- "A variant of `find-here-links' that may create a three-window setting."
- (interactive "P")
- (if arg (find-here-links-3) (find-here-links)))
-
-;; «find-here-links-3» (to ".find-here-links-3")
-;; See: (find-here-links-intro "4. `find-here-links-3'")
-;; (find-here-links-intro "5. `find-here-links-1'")
-;;
-(defvar ee-window-configuration-before-M-h-M-3 nil)
-
-(defun find-here-links-3 ()
- "A variant of `find-here-links' that creates a three-window setting.
-Before creating the three windows this function tries to save the
-current window configuration to the variable
-`ee-window-configuration-before-M-h-M-3', but if that variable is
-not nil we abort instead of overwriting it.
-See: (find-here-links-intro \"4. `find-here-links-3'\")"
- (interactive)
- (if ee-window-configuration-before-M-h-M-3
- (let ((overwrite
- (yes-or-no-p "Overwrite `ee-window-configuration-before-M-h-M-3'?
")))
- (if (not overwrite)
- (error))))
- (setq ee-window-configuration-before-M-h-M-3
- (current-window-configuration))
- (find-wset "13_o2_o_coo" nil '(find-here-links) '(eejump-1)))
-
-(defun find-here-links-1 ()
- "Restore the window configuration before `find-here-links-3'.
-See: (find-here-links-intro \"5. `find-here-links-1'\")"
- (interactive)
- (set-window-configuration ee-window-configuration-before-M-h-M-3)
- (setq ee-window-configuration-before-M-h-M-3 nil))
-
-
-
diff --git a/eev-hlinks.el b/eev-hlinks.el
new file mode 100644
index 0000000..320bf9d
--- /dev/null
+++ b/eev-hlinks.el
@@ -0,0 +1,439 @@
+;;; eev-hlinks.el --- `find-here-links' and variants.
+
+;; Copyright (C) 2020 Free Software Foundation, Inc.
+;;
+;; This file is part of GNU eev.
+;;
+;; GNU eev is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; GNU eev is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+;;
+;; Author: Eduardo Ochs <address@hidden>
+;; Maintainer: Eduardo Ochs <address@hidden>
+;; Version: 2020jan09
+;; Keywords: e-scripts
+;;
+;; Latest version: <http://angg.twu.net/eev-current/eev-hlinks.el>
+;; htmlized: <http://angg.twu.net/eev-current/eev-hlinks.el.html>
+;; See also: <http://angg.twu.net/eev-current/eev-readme.el.html>
+;; <http://angg.twu.net/eev-intros/find-eev-intro.html>
+;; <http://angg.twu.net/eev-intros/find-here-links-intro.html>
+;; (find-eev-intro)
+;; (find-here-links-intro)
+
+;;; Commentary:
+
+;; This file implements `find-here-links', its variants for beginners,
+;; and the many low-level functions that are needed to make them work.
+;;
+;; `find-here-links' generates a temporary buffer with links to
+;; "here". There are several kinds of "here"s - see:
+;;
+;; (find-here-links-intro "3. `find-here-links'")
+;; (find-here-links-intro "3. `find-here-links'" "several kinds")
+;;
+;; The "here" buffer is sometimes called the "target" buffer. See:
+;;
+;; (find-here-links-intro "4. `find-here-links-3'")
+;; (find-here-links-intro "4. `find-here-links-3'" "terminology")
+;;
+;; For each kind of "here" we have a "test function" that tests if the
+;; current buffer is of that kind of here and a "links function" that
+;; generates links for that kind of here. Here's the conventions on
+;; their names. A sexp like
+;;
+;; (find-man "1 date")
+;;
+;; opens a manpage buffer; the test function and the links function
+;; for manpage buffers are:
+;;
+;; (ee-man-bufferp)
+;; (ee-find-man-links)
+;;
+;; They all have the same stem - "man" - but different prefixes and
+;; suffixes.
+
+;; TODO: Some of the `ee-find-*-links' functions are defined in other
+;; files. Which ones? Give examples!
+;;
+;; (find-eapropos "ee-find-.*-links")
+
+
+
+;; The main workhorse function in this file is `ee-find-here-links',
+;; that _currently_ uses a big `cond' to run these test functions in a
+;; certain order until one of them returns true, and then it returns
+;; the result of the links function associated to that test (and to
+;; that kind of "here"). But I am trying to rewrite it...
+
+
+
+;; «.ee-types-of-here» (to "ee-types-of-here")
+;; «.tests-and-links» (to "tests-and-links")
+;; «.ee-which-here-tests» (to "ee-which-here-tests")
+;;
+;; «.find-here-links» (to "find-here-links")
+;; «.find-here-links-beginner» (to "find-here-links-beginner")
+;; «.find-here-links-3» (to "find-here-links-3")
+
+
+
+
+
+;;; __ _ _ _ _ _ _
+;;; / _(_)_ __ __| | | |__ ___ _ __ ___ | (_)_ __ | | _____
+;;; | |_| | '_ \ / _` |_____| '_ \ / _ \ '__/ _ \_____| | | '_ \| |/ / __|
+;;; | _| | | | | (_| |_____| | | | __/ | | __/_____| | | | | | <\__ \
+;;; |_| |_|_| |_|\__,_| |_| |_|\___|_| \___| |_|_|_| |_|_|\_\___/
+;;;
+;; «find-here-links» (to ".find-here-links")
+;; See: (find-eev-quick-intro "`M-h M-h'")
+
+;; (find-efunction 'find-grep-links)
+;; (find-efunction 'find-einfo-links)
+;; (find-efunction 'find-file-links)
+;; (find-find-links-links "\\M-h" "here" "")
+;; (find-efunction 'find-ecolors)
+
+;; Moved the key binding to:
+;; (find-eevfile "eev-mode.el" "\\M-h\\M-h")
+;; (define-key eev-mode-map "\M-h\M-h" 'find-here-links)
+
+;; TODO: support cases like these:
+;; (find-efunctiondescr 'condition-case)
+
+
+
+
+
+
+;;; _ __ _
+;;; | |_ _ _ _ __ ___ ___ ___ / _| | |__ ___ _ __ ___
+;;; | __| | | | '_ \ / _ \/ __|_____ / _ \| |_ _____| '_ \ / _ \ '__/ _ \
+;;; | |_| |_| | |_) | __/\__ \_____| (_) | _|_____| | | | __/ | | __/
+;;; \__|\__, | .__/ \___||___/ \___/|_| |_| |_|\___|_| \___|
+;;; |___/|_|
+;;
+;; «ee-types-of-here» (to ".ee-types-of-here")
+;; New code. Not working yet. Commented out.
+;; Uglyness: `ee-add-type-of-here' runs `sort' too often.
+;; See: (find-eev "eev-code.el" "alists")
+;; (find-elnode "Sequence Functions" "Function: sort ")
+
+'
+(progn
+
+(setq ee-types-of-here nil)
+
+(defun ee-sort-types-of-here ()
+ (setq ee-types-of-here
+ (sort ee-types-of-here
+ (lambda (a b) (string< (car a) (car b))))))
+
+(defun ee-add-type-of-here (priority testcode linkscode)
+ (let* ((label (format "%s %s" priority (ee-S testcode))))
+ (setq ee-types-of-here
+ (ee-aset ee-types-of-here label (list testcode linkscode)))))
+
+(defun ee-add-toh-major (testcode linkscode)
+ (ee-add-type-of-here "20 major" testcode linkscode))
+
+(defun ee-add-toh-bname (testcode linkscode)
+ (ee-add-type-of-here "40 bname" testcode linkscode))
+
+(defun ee-add-toh-bhelp (testcode linkscode)
+ (ee-add-type-of-here "60 help " testcode linkscode))
+
+(defun ee-add-toh-other (testcode linkscode)
+ (ee-add-type-of-here "80 other" testcode linkscode))
+
+;; By major mode:
+(ee-add-toh-major '(ee-info-bufferp) '(ee-find-info-links))
+(ee-add-toh-major '(ee-man-bufferp) '(ee-find-man-links))
+(ee-add-toh-major '(ee-grep-bufferp) '(ee-find-grep-links))
+(ee-add-toh-major '(ee-w3m-bufferp) '(ee-find-w3m-links))
+(ee-add-toh-major '(ee-dired-bufferp) '(ee-find-file-links))
+(ee-add-toh-major '(ee-wdired-bufferp) '(ee-find-file-links))
+(ee-add-toh-major '(ee-custom-bufferp) '(ee-find-custom-links))
+(ee-add-toh-major '(ee-epackages-bufferp) '(ee-find-epackages-links))
+
+;; By buffer name:
+(ee-add-toh-bname '(ee-intro-bufferp) '(ee-find-intro-links))
+(ee-add-toh-bname '(ee-ecolors-bufferp) '(ee-find-ecolors-links))
+(ee-add-toh-bname '(ee-efaces-bufferp) '(ee-find-efaces-links))
+;; (ee-add-toh-bname '(ee-freenode-bufferp) '(ee-find-freenode-links))
+;; (ee-add-toh-bname '(ee-pdftext-bufferp) '(ee-find-pdftext-links))
+
+;; When the buffer name is "*Help*" we parse the first line:
+(ee-add-toh-bhelp '(ee-efunctiondescr-bufferp) '(ee-find-efunctiondescr-links))
+(ee-add-toh-bhelp '(ee-efacedescr-bufferp) '(ee-find-efacedescr-links))
+(ee-add-toh-bhelp '(ee-evardescr-bufferp) '(ee-find-evardescr-links))
+(ee-add-toh-bhelp '(ee-epackage-bufferp) '(ee-find-epackage-links))
+
+;; Other cases:
+(ee-add-toh-other '(ee-file-bufferp) '(ee-find-file-links))
+
+(ee-sort-types-of-here)
+
+;; Inspect the data structures:
+;; (find-epp ee-types-of-here)
+;; (find-estring (mapconcat 'car ee-types-of-here "\n"))
+
+
+)
+
+
+
+
+
+
+;;; _ _ _ _ _ _
+;;; | |_ ___ ___| |_ ___ __ _ _ __ __| | | (_)_ __ | | _____
+;;; | __/ _ \/ __| __/ __| / _` | '_ \ / _` | | | | '_ \| |/ / __|
+;;; | || __/\__ \ |_\__ \ | (_| | | | | (_| | | | | | | | <\__ \
+;;; \__\___||___/\__|___/ \__,_|_| |_|\__,_| |_|_|_| |_|_|\_\___/
+;;;
+;; «tests-and-links» (to ".tests-and-links")
+;; For each kind of here we have:
+;; a) a test function that tests if the current buffer is of that kind,
+;; b) a function that return hyperlinks for that kind of here.
+;;
+;; Idea: rename them, and use names like:
+;; ee-here-info-p
+;; ee-here-info-links
+
+
+
+;; Some tools for detecting which kind of buffer we're in.
+(defun ee-buffer-re (re)
+ (if (string-match re (buffer-name))
+ (match-string 1 (buffer-name))))
+(defun ee-buffer-eq (str) (string= str (buffer-name)))
+
+(defun ee-buffer-help0 () (ee-buffer-eq "*Help*"))
+(defun ee-buffer-help-re0 (re n)
+ (if (ee-buffer-help0)
+ (save-excursion
+ (goto-char (point-min))
+ (if (looking-at re) (match-string n)))))
+
+(defun ee-buffer-help (re n) (intern (or (ee-buffer-help-re0 re n) "nil")))
+
+
+
+;; By major mode
+(defun ee-grep-bufferp () (eq major-mode 'grep-mode))
+(defun ee-man-bufferp () (eq major-mode 'Man-mode))
+(defun ee-rcirc-bufferp () (eq major-mode 'rcirc-mode))
+(defun ee-info-bufferp () (eq major-mode 'Info-mode))
+(defun ee-dired-bufferp () (eq major-mode 'dired-mode))
+(defun ee-wdired-bufferp () (eq major-mode 'wdired-mode))
+(defun ee-w3m-bufferp () (eq major-mode 'w3m-mode))
+(defun ee-custom-bufferp () (eq major-mode 'Custom-mode))
+(defun ee-epackages-bufferp () (eq major-mode 'package-menu-mode))
+
+;; By buffer name
+(defun ee-intro-bufferp () (ee-buffer-re "^\\*(find-\\(.*\\)-intro)\\*$"))
+(defun ee-freenode-bufferp () (ee-buffer-re "^\\(.*\\).freenode\\.net"))
+(defun ee-ecolors-bufferp () (ee-buffer-eq "*Colors*"))
+(defun ee-efaces-bufferp () (ee-buffer-eq "*Faces*"))
+(defun ee-pdftext-bufferp () (ee-buffer-re "^pdftotext"))
+
+;; By buffer name (when it is "*Help*")
+(defvar ee-efunctiondescr-re
+ "^\\([^ \t\n]+\\) is a[^\t\n]*\\(function\\|Lisp macro\\|special form\\)")
+(defun ee-efunctiondescr-bufferp () (ee-buffer-help ee-efunctiondescr-re 1))
+(defun ee-find-efunctiondescr-links ()
+ (let ((f (ee-efunctiondescr-bufferp)))
+ `((find-efunction-links ',f)
+ (find-efunctiondescr ',f))))
+
+(defvar ee-evardescr-re "^\\([^ \t\n]+\\) is a variable")
+(defun ee-evardescr-bufferp () (ee-buffer-help ee-evardescr-re 1))
+(defun ee-find-evardescr-links ()
+ (let ((v (ee-evardescr-bufferp)))
+ `((find-evariable-links ',v)
+ (find-evardescr ',v))))
+
+(defvar ee-efacedescr-re "^Face: \\([^ \t\n]+\\)")
+(defun ee-efacedescr-bufferp () (ee-buffer-help ee-efacedescr-re 1))
+(defun ee-find-efacedescr-links ()
+ (let ((f (ee-efacedescr-bufferp)))
+ `((find-eface-links ',f)
+ (find-efacedescr ',f))))
+
+(defvar ee-epackage-re "^\\([^ \t\n]+\\) is a[ -~]+ package")
+(defun ee-epackage-bufferp () (ee-buffer-help ee-epackage-re 1))
+(defun ee-find-epackage-links ()
+ (let ((p (ee-epackage-bufferp)))
+ (list (ee-find-epackage-links0 p))))
+
+;; By buffer name (when the mode is man)
+(defvar ee-man-re "^\\*Man \\(.*\\)\\*$")
+(defun ee-find-man-links ()
+ (let ((mp (ee-buffer-re ee-man-re)))
+ `((find-man ,mp))))
+
+(defvar ee-custom-re "^\\*Customize Group: \\(.*\\)\\*$")
+(defun ee-find-custom-links ()
+ (let* ((name (ee-buffer-re ee-custom-re))
+ (symbol (intern (downcase (replace-regexp-in-string " " "-" name)))))
+ `((find-customizegroup ',symbol))))
+
+;; Other cases
+(defun ee-file-bufferp () buffer-file-name)
+
+
+(defun ee-find-efaces-links () `((find-efaces)))
+(defun ee-find-ecolors-links () `((find-ecolors)))
+(defun ee-find-epackages-links () `((find-epackages)))
+(defun ee-find-pdftext-links () (ee-pdflike-page-links))
+
+
+
+;; to to:
+;; ee-find-w3m-links
+;; ee-find-ecolor-links
+;;
+
+(defun ee-find-here-links ()
+ (cond ;; by major mode
+ ((ee-info-bufferp) (cons "" (ee-find-info-links))) ; M-h M-i
+ ((ee-man-bufferp) (cons "" (ee-find-man-links))) ; ?
+ ((ee-grep-bufferp) (cons "" (ee-find-grep-links))) ; M-h M-g
+ ((ee-w3m-bufferp) (cons "" (ee-find-w3m-links))) ; M-h M-w
+ ((ee-dired-bufferp) (cons "" (ee-find-file-links))) ; M-h f
+ ((ee-wdired-bufferp) (cons "" (ee-find-file-links))) ; M-h f
+ ((ee-custom-bufferp) (cons "" (ee-find-custom-links))) ; ?
+ ((ee-epackages-bufferp) (cons "" (ee-find-epackages-links))) ; ?
+ ;; by buffer name
+ ((ee-intro-bufferp) (cons "" (ee-find-intro-links))) ; M-h M-i
+ ((ee-freenode-bufferp) (cons "" (ee-find-freenode-links))) ; ?
+ ((ee-ecolors-bufferp) (cons "" (ee-find-ecolors-links))) ; ?
+ ((ee-efaces-bufferp) (cons "" (ee-find-efaces-links))) ; ?
+ ((ee-pdftext-bufferp) (cons "" (ee-find-pdftext-links))) ; ?
+ ;; by buffer name, when it is "*Help*"
+ ((ee-efunctiondescr-bufferp) (cons "" (ee-find-efunctiondescr-links)))
+ ((ee-efacedescr-bufferp) (cons "" (ee-find-efacedescr-links)))
+ ((ee-evardescr-bufferp) (cons "" (ee-find-evardescr-links)))
+ ((ee-epackage-bufferp) (cons "" (ee-find-epackage-links)))
+ ;; other cases
+ ((ee-file-bufferp) (cons "" (ee-find-file-links))) ; M-h f
+ (t (list "" "Not implemented!" "See:"
+ '(find-efunction 'ee-find-here-links)))
+ ))
+
+(defun find-here-links-test (sexp)
+"See: (find-links-intro \"`find-here-links'\")"
+ (find-wset "13o_2o_o" sexp '(find-here-links)))
+
+;; (find-man "1 cat")
+;; (progn (find-man "1 cat") (buffer-name))
+;; (find-eevfile "eev-rcirc.el")
+
+(defun ee-find-here-links0 ()
+ `(,(ee-H "See: ")
+ (find-eev-quick-intro "4.1. `find-here-links'")
+ (find-emacs-keys-intro "1. Basic keys (eev)" "M-h M-h")
+ (find-here-links-intro "4. `find-here-links-3'")
+ ))
+
+
+
+;;; __ _ _ _ _ _ _
+;;; / _(_)_ __ __| | | |__ ___ _ __ ___ | (_)_ __ | | _____
+;;; | |_| | '_ \ / _` |_____| '_ \ / _ \ '__/ _ \_____| | | '_ \| |/ / __|
+;;; | _| | | | | (_| |_____| | | | __/ | | __/_____| | | | | | <\__ \
+;;; |_| |_|_| |_|\__,_| |_| |_|\___|_| \___| |_|_|_| |_|_|\_\___/
+;;;
+
+;; (find-find-links-links "\\M-h" "here" "")
+;;
+(defun find-here-links (&rest pos-spec-list)
+"Visit a temporary buffer containing hyperlinks pointing to here."
+ (interactive)
+ (apply 'find-elinks
+ `(;; The first line of a find-here-links buffer DOES NOT
+ ;; regenerates the buffer - instead the first lines point to
+ ;; help pages.
+ ,@(ee-find-here-links0)
+ ,@(ee-find-here-links)
+ )
+ pos-spec-list))
+
+;; Test: (find-here-links)
+;; (progn (find-enode "Screen") (find-here-links))
+
+
+
+;;; _ _
+;;; | |__ ___ __ _(_)_ __ _ __ ___ _ __
+;;; | '_ \ / _ \/ _` | | '_ \| '_ \ / _ \ '__|
+;;; | |_) | __/ (_| | | | | | | | | __/ |
+;;; |_.__/ \___|\__, |_|_| |_|_| |_|\___|_|
+;;; |___/
+;;
+;; «find-here-links-beginner» (to ".find-here-links-beginner")
+;; This is a hack for beginners that is explained in a tutorial. See:
+;; (find-refining-intro "4. A tip for beginners")
+;; (find-refining-intro "4. A tip for beginners" "find-here-links-beginner")
+;;
+(defun find-here-links-beginner (&optional arg)
+ "A variant of `find-here-links' that may create a three-window setting."
+ (interactive "P")
+ (if arg (find-here-links-3) (find-here-links)))
+
+;; «find-here-links-3» (to ".find-here-links-3")
+;; See: (find-here-links-intro "4. `find-here-links-3'")
+;; (find-here-links-intro "5. `find-here-links-1'")
+;;
+(defvar ee-window-configuration-before-M-h-M-3 nil)
+
+(defun find-here-links-3 ()
+ "A variant of `find-here-links' that creates a three-window setting.
+Before creating the three windows this function tries to save the
+current window configuration to the variable
+`ee-window-configuration-before-M-h-M-3', but if that variable is
+not nil we abort instead of overwriting it.
+See: (find-here-links-intro \"4. `find-here-links-3'\")"
+ (interactive)
+ (if ee-window-configuration-before-M-h-M-3
+ (let ((overwrite
+ (yes-or-no-p "Overwrite `ee-window-configuration-before-M-h-M-3'?
")))
+ (if (not overwrite)
+ (error))))
+ (setq ee-window-configuration-before-M-h-M-3
+ (current-window-configuration))
+ (find-wset "13_o2_o_coo" nil '(find-here-links) '(eejump-1)))
+
+(defun find-here-links-1 ()
+ "Restore the window configuration before `find-here-links-3'.
+See: (find-here-links-intro \"5. `find-here-links-1'\")"
+ (interactive)
+ (set-window-configuration ee-window-configuration-before-M-h-M-3)
+ (setq ee-window-configuration-before-M-h-M-3 nil))
+
+
+
+
+
+
+
+
+(provide 'eev-hlinks)
+
+
+
+;; Local Variables:
+;; coding: utf-8-unix
+;; no-byte-compile: t
+;; End:
diff --git a/eev-intro.el b/eev-intro.el
index 94678f7..94c65df 100644
--- a/eev-intro.el
+++ b/eev-intro.el
@@ -3966,7 +3966,12 @@ We start from some observations:
`find-code-pdf-page' as its associated debugging function,
and so on.
- f) If we call the hyperlinks in the items above \"non-basic\"
+ f) `find-here-links' and its variants create temporary buffers
+ that violate this convention:
+
+ (find-links-intro \"5. The first line regenerates the buffer\")
+
+ g) If we call the hyperlinks in the items above \"non-basic\"
then we get - by exclusion! - a notion of what are \"basic
hyperlinks\".
@@ -3977,6 +3982,7 @@ and a hyperlink to the source file at the right:
External processes: (find-eev \"eev-plinks.el\")
`find-elinks': (find-eev \"eev-elinks.el\")
`find-elinks'+`ee-template0': (find-eev \"eev-tlinks.el\")
+ `find-here-links': (find-eev \"eev-hlinks.el\")
`code-c-d' and `find-code-c-d': (find-eev \"eev-code.el\")
`code-pdf*' and `find-code-pdf*': (find-eev \"eev-pdflike.el\")
@@ -8543,8 +8549,28 @@ LIST that are sexps are converted to strings using
`ee-HS'. See:
+4. Skels
+========
+Many functions in eev have comments that start with \";; Skel:\",
+like this:
+
+ ;; Skel: (find-find-links-links-new \"fossil\" \"url subdir c\" \"\")
+
+A comment like that before a function means that I wrote that
+function by first running that sexp and then modifying the code
+that that sexp generated, that was a \"skeleton\".
+
+Try:
+
+ (find-find-links-links-new \"fossil\" \"url subdir c\" \"\")
+ (find-eev \"eev-tlinks.el\" \"find-fossil-links\")
+ (find-eevgrep \"grep --color -nH --null -e Skel: *.el\")
+
+
+
+
-4. `find-find-links-links'
+5. `find-find-links-links'
==========================
ALL my `find-*-links' started as quick hacks.
SOME of them were useful enough to deserve being cleaned up.
diff --git a/eev-load.el b/eev-load.el
index b6ddd2d..547629e 100644
--- a/eev-load.el
+++ b/eev-load.el
@@ -1,7 +1,7 @@
;;; eev-load.el -- load all the main modules of eev.
;;; This can also be used as an index to the main source files.
-;; Copyright (C) 2019 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2020 Free Software Foundation, Inc.
;;
;; This file is part of GNU eev.
;;
@@ -104,6 +104,7 @@
(require 'eev-plinks) ; (find-eev "eev-plinks.el")
(require 'eev-elinks) ; (find-eev "eev-elinks.el")
(require 'eev-tlinks) ; (find-eev "eev-tlinks.el")
+(require 'eev-hlinks) ; (find-eev "eev-hlinks.el")
;;
;; The `brxxx' functions. See:
;; (find-eev-quick-intro "3.1. Non-elisp hyperlinks")
- [elpa] externals/eev 4dbb2d4 04/14: Rewrote `(find-templates-intro)'., (continued)
- [elpa] externals/eev 4dbb2d4 04/14: Rewrote `(find-templates-intro)'., Stefan Monnier, 2020/02/24
- [elpa] externals/eev 1133d7a 02/14: Added a new section to `(find-audiovideo-intro)'., Stefan Monnier, 2020/02/24
- [elpa] externals/eev 5f748b9 09/14: Fixed several typos (thx to Marc Simpson & codespell), Stefan Monnier, 2020/02/24
- [elpa] externals/eev 5833336 03/14: Quote function names like this: `foo', Stefan Monnier, 2020/02/24
- [elpa] externals/eev 68e9991 01/14: Mention ":results output" in `(find-org-intro)'., Stefan Monnier, 2020/02/24
- [elpa] externals/eev 57c351e 05/14: Added the ee-ffll-functions (for `find-find-links-links-new')., Stefan Monnier, 2020/02/24
- [elpa] externals/eev dfb01f6 06/14: New function: `find-find-links-links-new'., Stefan Monnier, 2020/02/24
- [elpa] externals/eev a80a088 11/14: Small changes in README.md., Stefan Monnier, 2020/02/24
- [elpa] externals/eev bb41e52 07/14: New function: `find-fossil-links'., Stefan Monnier, 2020/02/24
- [elpa] externals/eev 4f4a4f1 12/14: Added `find-windows-eepitch-lua-links'., Stefan Monnier, 2020/02/24
- [elpa] externals/eev d2dc3d6 08/14: Moved `find-here-links' and friends to the file find-hlinks.el.,
Stefan Monnier <=
- [elpa] externals/eev d6d2a98 10/14: Rewrote the file README.md., Stefan Monnier, 2020/02/24
- [elpa] externals/eev d4f6082 13/14: Added `(find-windows-beginner-intro)' and `(find-extra-file-links)'., Stefan Monnier, 2020/02/24
- [elpa] externals/eev facb51d 14/14: Merge remote-tracking branch 'eev/UTF-8' into externals/eev, Stefan Monnier, 2020/02/24