[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/eev facb51d 14/14: Merge remote-tracking branch 'eev/UT
From: |
Stefan Monnier |
Subject: |
[elpa] externals/eev facb51d 14/14: Merge remote-tracking branch 'eev/UTF-8' into externals/eev |
Date: |
Mon, 24 Feb 2020 11:32:11 -0500 (EST) |
branch: externals/eev
commit facb51dffc5f8a37931db762e308a6ebb68d33a8
Merge: 8bc3bde d4f6082
Author: Stefan Monnier <address@hidden>
Commit: Stefan Monnier <address@hidden>
Merge remote-tracking branch 'eev/UTF-8' into externals/eev
---
ChangeLog | 100 +++++-
README.md | 47 ++-
VERSION | 4 +-
eejump.el | 3 +-
eev-audiovideo.el | 87 ++++-
eev-blinks.el | 13 +-
eev-bounded.el | 2 +-
eev-channels.el | 2 +-
eev-code.el | 6 +
eev-codings.el | 4 +-
eev-elinks.el | 378 ++++++++------------
eev-hlinks.el | 439 +++++++++++++++++++++++
eev-intro.el | 1010 +++++++++++++++++++++++++++++++++++++++++++++++------
eev-load.el | 3 +-
eev-mode.el | 3 +-
eev-testblocks.el | 10 +
eev-tlinks.el | 416 ++++++++++++++++++++--
17 files changed, 2128 insertions(+), 399 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index ec98439..a67fb31 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,101 @@
+2020-02-20 Eduardo Ochs <address@hidden>
+
+ * eev-intro.el (find-windows-beginner-intro): new function.
+ (find-eev-intro): added `(find-windows-beginner-intro)' to the
+ list of intros.
+ (find-emacs-keys-intro): stress that `M-j' is one of the most
+ basic keys.
+
+ * eejump.el (eejump-3): new function - make `M-3 M-j' jump to
+ `(find-windows-beginner-intro)'.
+
+ * eev-tlinks.el (find-intro-links): added a "Skel:".
+
+ * eev-elinks.el (find-extra-file-links): new function.
+ (find-code-audiovideo-links): small changes.
+
+ * eev-mode.el (eev-mode-map-set): bind `M-h M-e' to
+ `find-extra-file-links'.
+
+2020-02-16 Eduardo Ochs <address@hidden>
+
+ * eev-tlinks.el (find-windows-eepitch-lua-links): new function.
+
+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>
+
+ * eev-tlinks.el (ee-ffll-optional, ee-ffll-setqs, ee-ffll-lets)
+ (ee-ffll-comma-args, ee-ffll-defun-without-lets)
+ (ee-ffll-defun-with-lets, ee-ffll-defun): new functions.
+
+2020-01-05 Eduardo Ochs <address@hidden>
+
+ * eev-code.el: added `(code-c-d "elpa" "~/.emacs.d/elpa/")' -
+ `find-epackage-links' depends on this.
+
+2020-01-04 Eduardo Ochs <address@hidden>
+
+ * eev-intro.el (find-templates-intro): rewrote the whole intro.
+ (find-refining-intro): new section: "5. Pointing to anchors".
+
+2020-01-03 Eduardo Ochs <address@hidden>
+
+ * eev-testblocks.el (ee-insert-test-idris): new function.
+
+ * eev-audiovideo.el: rewrote many comments.
+
+ * eev-intro.el (find-audiovideo-intro): new section: "4.4. The
+ default audio/video file".
+
+ * eev-blinks.el (ee-find-man-pos-spec-list): `defvar'ed. Was
+ undeclared before.
+
+2020-01-02 Eduardo Ochs <address@hidden>
+
+ * eev-tlinks.el (find-git-links): use "export PAGER=cat".
+
+2019-11-13 Eduardo Ochs <address@hidden>
+
+ * eev-intro.el (find-eev-quick-intro): rewrote the section 7.2 to
+ explain how beginners should use `M-j' without a prefix argument.
+
+2019-11-11 Eduardo Ochs <address@hidden>
+
+ * eev-intro.el (find-org-intro): use \":results output\" (thx Ken
+ Mankoff)
+
2019-11-04 Eduardo Ochs <address@hidden>
* eev-intro.el (find-org-intro): rewrote everything.
@@ -146,7 +244,7 @@
2019-08-11 Eduardo Ochs <address@hidden>
* eev-audiovideo.el (ee-mpv-video-options): new variable.
- (ee-mpv-video-options, ee-find-mpv-video): num funcions.
+ (ee-mpv-video-options, ee-find-mpv-video): new functions.
* eev-tlinks.el (find-apt-get-source-links): new function.
diff --git a/README.md b/README.md
index 760229a..f00c389 100644
--- a/README.md
+++ b/README.md
@@ -15,7 +15,36 @@ shell-like programs ("eepitch"), and sandboxed tutorials (the
"find-xxx-intro"s) - quite clearly in its first sections. I've been
using it to teach Emacs and GNU/Linux to beginners.
-Besides that tutorial the best introductions to eev are these videos:
+<p><br/></p>
+
+
+
+
+### EmacsConf 2019
+
+Besides that tutorial the best introduction to eev is this video:
+
+ How to record executable notes with eev - and how to play them back
+ http://angg.twu.net/emacsconf2019.html
+ http://angg.twu.net/LATEX/2019emacsconf.pdf (slides)
+ http://www.youtube.com/watch?v=86yiRG8YJD0
+
+Its slide 13 shows how beginners can learn eev by starting with just
+two keys, M-j and M-e. See:
+
+ https://www.youtube.com/watch?v=86yiRG8YJD0&t=680
+ http://angg.twu.net/eev-intros/find-emacs-keys-intro.html#1
+ http://angg.twu.net/eev-intros/find-eev-quick-intro.html#7.2
+
+<p><br/></p>
+
+
+
+
+
+### Older videos
+
+These two older videos are also interesting:
Eepitch: a way to control shell-like programs from Emacs (2013)
http://www.youtube.com/watch?v=Lj_zKC5BR64
@@ -24,13 +53,21 @@ Besides that tutorial the best introductions to eev are
these videos:
http://www.youtube.com/watch?v=doeyn5MOaB8
The video about eepitch has a very nice demonstration of controlling
-two shell-like programs at once - watch its first two minutes.
-Note: I made it before implementing the "find-xxx-intro"s, that in the
-last few years became a central feature in eev.
+two shell-like programs at once - watch its first two minutes. Note: I
+made these two videos before implementing the "find-xxx-intro"s, that
+in the last few years became a central feature in eev.
+
+
+
+
+
+<p><br/></p>
+
+### Etc
The main URLs for eev are these:
- http://angg.twu.net/#eev
+ http://angg.twu.net/#eev
http://angg.twu.net/eev-intros/find-eev-quick-intro.html
The "quick intro" has installation instructions.
diff --git a/VERSION b/VERSION
index 0b5d362..3cfc394 100644
--- a/VERSION
+++ b/VERSION
@@ -1,2 +1,2 @@
-Tue Nov 5 20:01:03 GMT 2019
-Tue Nov 5 17:01:03 -03 2019
+Thu Feb 20 21:11:56 GMT 2020
+Thu Feb 20 18:11:56 -03 2020
diff --git a/eejump.el b/eejump.el
index 3e91ca9..7d9440e 100644
--- a/eejump.el
+++ b/eejump.el
@@ -19,7 +19,7 @@
;;
;; Author: Eduardo Ochs <address@hidden>
;; Maintainer: Eduardo Ochs <address@hidden>
-;; Version: 2019mar05
+;; Version: 2020feb20
;; Keywords: e-scripts
;;
;; Latest version: <http://angg.twu.net/eev-current/eejump.el>
@@ -101,6 +101,7 @@ See: (find-eejump-intro \"\\neejump\\n\")"
(defun eejump-* () (find-efunction 'eejump-*))
(defun eejump-1 () (find-fline "~/TODO"))
(defun eejump-2 () (find-emacs-keys-intro))
+(defun eejump-3 () (find-windows-beginner-intro))
(defun eejump-5 () (find-eev-quick-intro))
(defun eejump-6 () (find-escripts-intro))
diff --git a/eev-audiovideo.el b/eev-audiovideo.el
index f252ba5..19399d7 100644
--- a/eev-audiovideo.el
+++ b/eev-audiovideo.el
@@ -19,7 +19,7 @@
;;
;; Author: Eduardo Ochs <address@hidden>
;; Maintainer: Eduardo Ochs <address@hidden>
-;; Version: 2019sep29
+;; Version: 2020jan03
;; Keywords: e-scripts
;;
;; Latest version: <http://angg.twu.net/eev-current/eev-audiovideo.el>
@@ -31,12 +31,63 @@
;;; Commentary:
-;; There is an introduction to these features here,
+;; This file implements links to audio or video files _at certain time
+;; offsets_. Here are two examples, in a long syntax:
+;;
+;; (find-video "~/eev-videos/Punch_and_Judy_Mark_Poulton-K6LmZ0A1s9U.mp4")
+;; (find-video "~/eev-videos/Punch_and_Judy_Mark_Poulton-K6LmZ0A1s9U.mp4"
"1:17")
+;;
+;; There are also the usual shorter hyperlinks, like this,
+;;
+;; (find-punchandjudyvideo "1:04" "right position")
+;;
+;; and a very compact syntax, used by `eev-avadj-mode', in which `M-p'
+;; plays the default audio or video file at the first time offset that
+;; can the parsed in the current line (the "time from BOL"). See:
;;
;; (find-audiovideo-intro)
+;; (find-audiovideo-intro "1. Time offsets")
+;; (find-audiovideo-intro "4. Short hyperlinks to audio and video files")
+;; (find-audiovideo-intro "4.3. A demo")
+;; (find-audiovideo-intro "4.4. The default audio/video file")
+;; (find-audiovideo-intro "4.4. The default audio/video file" "`M-p'")
;;
-;; but that needs to be rewritten...
+;; NOTE: I am not aware of other packages - for emacs or not - that
+;; implement links that play audio or video files at given time
+;; offsets... but in 2020jan03 a guy called stardiviner sent this
+;; proposal to the Org mailing list:
+;;
+;; https://lists.gnu.org/archive/html/emacs-orgmode/2020-01/msg00007.html
+
+
+;; Historical note:
+;;
+;; I wrote a first version of this in 2011 or 2012, and some time
+;; later a friend - Rafael Duarte Pinheiro - helped me to create a way
+;; to play my indexed audios in a browser. Here is an example:
+;;
+;; http://angg.twu.net/audios/2011dec13-ict.html
+;;
+;; I used these indexed audios to show what was happening in the
+;; banana meetings of the Banana Institute of Science and Technology
+;; of the banana campus in which I work, that is part of a banana
+;; university in a banana republic.
+;;
+;; My tools for indexed audios later became one third of my "tools for
+;; activists", that are documented here:
+;;
+;; http://angg.twu.net/ferramentas-para-ativistas.html#audios-introducao
+;;
+;; but everything there is in Portuguese.
+;;
+;; In 2014 I had a burn-out and stopped working on these tools for
+;; activists.
+
+
+
+
+;; «.ee-time-from-bol» (to "ee-time-from-bol")
;; «.eev-avadj-mode» (to "eev-avadj-mode")
;; «.find-mplayer» (to "find-mplayer")
;; «.find-termplayer» (to "find-termplayer")
@@ -68,6 +119,8 @@
;;; | |_| | | | | | | __/_____| _| | | (_) | | | | | |_____| |_) | (_) | |
;;; \__|_|_| |_| |_|\___| |_| |_| \___/|_| |_| |_| |_.__/ \___/|_|
;;;
+;; «ee-time-from-bol» (to ".ee-time-from-bol")
+
(defvar ee-time-regexp
"\\(?:\\([0-9]?[0-9]\\):\\)?\\([0-9]?[0-9]\\):\\([0-9][0-9]\\)")
@@ -77,10 +130,14 @@
(if (re-search-forward regexp limit t repeat)
(match-string-no-properties 0))))
+;; Test: 98:76:54 3:21 (ee-time-from-bol)
+;;
(defun ee-time-from-bol ()
"Try this: 98:76:54 3:21 (ee-time-from-bol)"
(ee-re-search-from (ee-bol) ee-time-regexp (ee-eol)))
+;; Test: 98:76:54 3:21 (ee-time-from-bol-flash)
+;;
(defun ee-time-from-bol-flash () (interactive)
"Try this: 98:76:54 3:21 (ee-time-from-bol-flash)"
(if (ee-time-from-bol)
@@ -97,6 +154,12 @@
;;; | |_| | | | | | | __/_____\__ \ | | | | _| |_
;;; \__|_|_| |_| |_|\___| |___/_| |_|_|_| \__|
;;;
+;; Tests:
+;; (ee-time-to-seconds "1:00:00")
+;; (ee-seconds-to-time 5)
+;; (ee-seconds-to-time 300)
+;; (ee-time+ -20 "0:05")
+
(defun ee-time-to-seconds (time)
(save-match-data
(if (string-match ee-time-regexp time)
@@ -127,20 +190,21 @@
(ee-time-from-bol-shift (- (or seconds 1))))
+
;;; _ _ _ _ __ _ _
;;; | | __ _ ___| |_ __ _ _ _ __| (_) ___ / /_ _(_) __| | ___ ___
;;; | |/ _` / __| __| / _` | | | |/ _` | |/ _ \ / /\ \ / / |/ _` |/ _ \/ _ \
;;; | | (_| \__ \ |_ | (_| | |_| | (_| | | (_) / / \ V /| | (_| | __/ (_) |
;;; |_|\__,_|___/\__| \__,_|\__,_|\__,_|_|\___/_/ \_/ |_|\__,_|\___|\___/
;;;
-;;
+;; See: (find-audiovideo-intro "4.4. The default audio/video file")
+
(defvar ee-audiovideo-last nil
"See: (find-audiovideo-intro \"The current audio or video\")")
(defun ee-audiovideo-sexp (time)
(list ee-audiovideo-last time))
-
(defun ee-time-from-bol-rerun (&optional arg)
"Play the current audio or video starting at '(ee-time-from-bol)'.
With a prefix of 0 just display what would be done. See:
@@ -418,7 +482,10 @@ See: (find-audiovideo-intro \"`eev-avadj-mode'\")"
;;;
;; Convert between a number of seconds (a number)
-;; and a "minutes:seconds" thing (a string)
+;; and a "minutes:seconds" thing (a string).
+;; OBSOLETE.
+;; TODO: convert all calls to `ee-secs-to-mm:ss' to `ee-seconds-to-time' and
+;; all calls to `ee-mm:ss-to-secs' to `ee-time-to-seconds'.
;;
(defun ee-secs-to-mm:ss (n)
"Force N - a number of seconds or an \"mm:ss\" string - to the mm:ss format"
@@ -433,13 +500,7 @@ See: (find-audiovideo-intro \"`eev-avadj-mode'\")"
(+ (* 60 (car ms)) (cadr ms)))))
-;;; _ _
-;;; | |_(_)_ __ ___ ___ _ __ ___ __ _ _____ ___ __
-;;; | __| | '_ ` _ \ / _ \_____| '__/ _ \/ _` |/ _ \ \/ / '_ \
-;;; | |_| | | | | | | __/_____| | | __/ (_| | __/> <| |_) |
-;;; \__|_|_| |_| |_|\___| |_| \___|\__, |\___/_/\_\ .__/
-;;; |___/ |_|
-;;
+;; Old notes on time regexps:
;; (find-elnode "Time Parsing")
;; (seconds-to-time 4000)
;; (float-time '(0 4000 0))
diff --git a/eev-blinks.el b/eev-blinks.el
index ad1e66b..92770cd 100644
--- a/eev-blinks.el
+++ b/eev-blinks.el
@@ -522,8 +522,8 @@ CODE argument, and process the POS-SPEC-LIST."
(defun find-estring (string &rest pos-spec-list)
"Visit a temporary buffer whose contents are given by STR.
The default name for the buffer is \"*string*\", but this can be
-overriden by setting `ee-buffer-name' to another name with a `let'.
-If the buffer already exists its contents are destroyed.
+overridden by setting `ee-buffer-name' to another name with a
+`let'. If the buffer already exists its contents are destroyed.
The buffer is not made read-only."
(apply 'find-eoutput-rerun (or ee-buffer-name "*string*")
`(insert ,string) pos-spec-list))
@@ -552,7 +552,7 @@ See: (find-anchors-intro \"WARNING: some glyphs need
raw-text-unix\")"
(defun find-estring-lv (string &rest pos-spec-list)
"Visit a temporary buffer whose contents are given by STR.
The default name for the buffer is \"*string*\", but this can be
-overriden by setting `ee-buffer-name' to another name with a `let'.
+overridden by setting `ee-buffer-name' to another name with a `let'.
If the buffer already exists its contents are destroyed.
The buffer is not made read-only.
The \"Local variables:\" section in the buffer is processed."
@@ -637,10 +637,11 @@ This is like `find-sh' but sets the buffer's
default-directory to DIR."
;; Tests:
;; (find-man "1 cat")
-(defvar ee-find-man-flag nil "See `find-man'.")
+(defvar ee-find-man-flag nil "See `find-man'.")
+(defvar ee-find-man-pos-spec-list nil "See `find-man'.")
;; See: (find-elnode "Advising Functions")
-;; (find-elnode "Porting old advices")
+;; (find-elnode "Porting old advice")
;; (find-efunctiondescr 'defadvice)
(defadvice Man-notify-when-ready (around find-man (man-buffer) activate)
"After rendering a manpage jump to `ee-find-man-pos-spec-list'."
@@ -723,7 +724,7 @@ it doesn't convert relative filenames into urls. See
;; (find-fline "/var/lib/dpkg/status" "\nPackage: bash\n")
(defun find-Package (fname &optional packagename &rest pos-spec-list)
- "Hyperlink to \"Package: \" achors in Debian package control files.
+ "Hyperlink to \"Package: \" anchors in Debian package control files.
See: `find-status', `find-available', (find-man \"grep-dctrl\")"
(find-fline fname)
(apply 'ee-goto-position
diff --git a/eev-bounded.el b/eev-bounded.el
index 3501a97..e6b369f 100644
--- a/eev-bounded.el
+++ b/eev-bounded.el
@@ -35,7 +35,7 @@
;; This file adds support for "bounded functions" to eev. For example:
;; `M-x eev' saves the region between point and mark into the
;; temporary script file; `M-x eev-bounded' saves the region around
-;; point, up to the first occurences of a certain delimiters before
+;; point, up to the first occurrences of a certain delimiters before
;; and after point, into the temporary script file.
;;
;; Big letters courtesy of Figlet.
diff --git a/eev-channels.el b/eev-channels.el
index 0ebcd11..6b4844a 100644
--- a/eev-channels.el
+++ b/eev-channels.el
@@ -1,4 +1,4 @@
-;;; eev-channels.el -- control external processes usign signals,
+;;; eev-channels.el -- control external processes using signals,
;;; temporary files, and Expect scripts.
;; Copyright (C) 2012-2019 Free Software Foundation, Inc.
diff --git a/eev-code.el b/eev-code.el
index 072531d..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)
@@ -338,9 +339,14 @@ Note: the POS-SPEC-LIST arguments are currently not used."
;; (find-equailfile "")
;; (find-equailfile "latin-ltx.el")
+;; Debian:
(code-c-d "ud" "/usr/share/doc/" :gz) ; (find-udfile "bash/")
(code-c-d "vldi" "/var/lib/dpkg/info/") ; (find-vldifile "bash.list")
+;; Used by `find-epackage-links':
+(code-c-d "elpa" "~/.emacs.d/elpa/")
+;; (find-elpafile "")
+
(provide 'eev-code)
diff --git a/eev-codings.el b/eev-codings.el
index 5561fd9..958f664 100644
--- a/eev-codings.el
+++ b/eev-codings.el
@@ -35,8 +35,8 @@
;;
;; in the local variables section at the end of (at least some) of his
;; files; the functions defined here make the local variables section
-;; trick unneccessary - `ee-format-as-anchor' now uses `ee-tolatin1'
-;; to produce a search string that works both unibyte, on UTF-8, on
+;; trick unnecessary - `ee-format-as-anchor' now uses `ee-tolatin1' to
+;; produce a search string that works both unibyte, on UTF-8, on
;; latin-1 files and some (most of?) other encodings.
;;
;; NOTE: `ee-tolatin1' a hack! Conversion to latin-1 seems to work in
diff --git a/eev-elinks.el b/eev-elinks.el
index 5852631..bcbc374 100644
--- a/eev-elinks.el
+++ b/eev-elinks.el
@@ -19,7 +19,7 @@
;;
;; Author: Eduardo Ochs <address@hidden>
;; Maintainer: Eduardo Ochs <address@hidden>
-;; Version: 2019oct04
+;; Version: 2020feb20
;; Keywords: e-scripts
;;
;; Latest version: <http://angg.twu.net/eev-current/eev-elinks.el>
@@ -35,7 +35,9 @@
;; See this for a (rough) classification of eev's hyperlink functions
;; into several classes:
;;
-;; (find-links-intro "6. Basic and non-basic hyperlinks")
+;; (find-links-conv-intro "3. Classification")
+;; (find-links-conv-intro "3. Classification" "`find-elinks'")
+;; (find-links-conv-intro "3. Classification" "`find-elinks'+")
;;
;; In this file we define `find-elinks' and several functions based on
;; it that generate relatively simple elisp hyperlinks buffers -
@@ -75,13 +77,24 @@
;; «.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-extra-file-links» (to "find-extra-file-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")
@@ -277,7 +290,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")
@@ -312,7 +325,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,
@@ -743,7 +756,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:
@@ -762,6 +775,7 @@ when this is true remove the prefix D from FNAME, and put
the sexp
(setq fname (or fname (or (buffer-file-name) default-directory)))
`(,(ee-if-prefixp "~/" "~/" fname '`(find-fline ,fname+))
,(ee-if-prefixp "$S/http/" "http://" fname '(ee-H fname+))
+ ,(ee-if-prefixp "$S/https/" "https://" fname '(ee-H fname+))
,(ee-if-prefixp "$S/shttp/" "shttp://" fname '(ee-H fname+))
""
(find-file ,fname) ; non-refinable
@@ -791,7 +805,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/")
@@ -851,7 +865,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:
@@ -909,7 +923,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)
@@ -1011,7 +1025,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:
@@ -1054,7 +1068,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")
@@ -1158,220 +1172,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))
-
-
-
@@ -1417,14 +1217,14 @@ See: (find-here-links-intro \"5. `find-here-links-1'\")"
;; (find-fline {(ee-S (file-name-directory fname))})
\(code-c-d \"{c}\" \"{(file-name-directory fname)}\")
-;; \(find-{c}file \"\")
+;; (find-{c}file \"\")
;; (find-pdf-page \"{fname}\")
;; (find-pdf-text \"{fname}\")
\(code-pdf-page \"{c}\" \"{fname}\")
\(code-pdf-text \"{c}\" \"{fname}\")
-;; \(find-{c}page)
-;; \(find-{c}text)
+;; (find-{c}page)
+;; (find-{c}text)
")
)
pos-spec-list)))
@@ -1440,41 +1240,137 @@ See: (find-here-links-intro \"5.
`find-here-links-1'\")"
+;; «find-extra-file-links» (to ".find-extra-file-links")
+;; Skel: (find-find-links-links-new "extra-file" "fname c" "dir")
+;;
+(defun find-extra-file-links (&optional fname c &rest pos-spec-list)
+"Visit a temporary buffer containing hyperlinks for extra-file."
+ (interactive (list (and (eq major-mode 'dired-mode) (ee-dired-to-fname))))
+ (if fname (setq fname (ee-shorten-file-name fname)))
+ (setq fname (or fname "{fname}"))
+ (setq c (or c "{c}"))
+ (let* ((dir (file-name-directory fname)))
+ (apply
+ 'find-elinks-elisp
+ `((find-extra-file-links ,fname ,c ,@pos-spec-list)
+ ;; Convention: the first sexp always regenerates the buffer.
+ ;; (find-efunction 'find-extra-file-links)
+ ;; ""
+ ,(ee-template0 "\
+;; See: (find-eev-quick-intro \"9.1. `code-c-d'\")
+;; (find-pdf-like-intro \"9. Generating three pairs\" \"`M-h M-p'\")
+;; (find-audiovideo-intro \"2.1. `find-extra-file-links'\")
+
+;; Links to this directory:
+;; (find-fline {(ee-S (file-name-directory fname))})
+\(code-c-d \"{c}\" \"{(file-name-directory fname)}\")
+;; (find-{c}file \"\")
+
+;; Links to a PDF file:
+;; (find-pdf-page \"{fname}\")
+;; (find-pdf-text \"{fname}\")
+\(code-pdf-page \"{c}\" \"{fname}\")
+\(code-pdf-text \"{c}\" \"{fname}\")
+;; (find-{c}page)
+;; (find-{c}text)
+
+;; Links to an audio file:
+;; (find-audio \"{fname}\")
+\(code-audio \"{c}audio\" \"{fname}\")
+;; (find-{c}audio)
+;; (find-{c}audio \"0:00\")
+
+;; Links to a video file:
+;; (find-video \"{fname}\")
+\(code-video \"{c}video\" \"{fname}\")
+;; (find-{c}video)
+;; (find-{c}video \"0:00\")
+;;
+;; (eev-avadj-mode 0)
+;; (eev-avadj-mode)
+
+;; Links to an shell-like program (for eepitch):
+;; (eepitch-comint \"{c}\" \"{fname}\")
+
+(defun eepitch-{c} () (interactive)
+ (eepitch-comint \"{c}\"
+ \"{fname}\"))
+
+;; Test:
+
+ (eepitch-{c})
+ (eepitch-kill)
+ (eepitch-{c})
+")
+ )
+ pos-spec-list)))
+
+;; Tests:
+;; (find-extra-file-links "~/eev-videos/three-keys-2.mp4")
+
+
+
;; «find-code-audiovideo-links» (to ".find-code-audiovideo-links")
+;; Skel: (find-find-links-links-new "code-audiovideo" "fname c" "dir")
;;
(defun find-code-audiovideo-links (&optional fname c &rest pos-spec-list)
-"Visit a temporary buffer containing hyperlinks and..."
+"Visit a temporary buffer containing hyperlinks for code-audiovideo."
(interactive (list (and (eq major-mode 'dired-mode) (ee-dired-to-fname))))
(if fname (setq fname (ee-shorten-file-name fname)))
(setq fname (or fname "{fname}"))
(setq c (or c "{c}"))
- (let ((dir (file-name-directory fname)))
- (apply 'find-elinks-elisp
+ (let* ((dir (file-name-directory fname)))
+ (apply
+ 'find-elinks-elisp
`((find-code-audiovideo-links ,fname ,c ,@pos-spec-list)
;; Convention: the first sexp always regenerates the buffer.
- ;;
- ;; (find-efunction 'find-code-pdf-links)
+ ;; (find-efunction 'find-code-audiovideo-links)
+ ;; ""
,(ee-template0 "\
;; See: (find-eev-quick-intro \"9.1. `code-c-d'\")
;; (find-pdf-like-intro \"9. Generating three pairs\" \"`M-h M-p'\")
;; (find-audiovideo-intro \"2.1. `find-code-audiovideo-links'\")
+;; Links to this directory:
;; (find-fline {(ee-S (file-name-directory fname))})
\(code-c-d \"{c}\" \"{(file-name-directory fname)}\")
-;; \(find-{c}file \"\")
+;; (find-{c}file \"\")
+;; Links to a PDF file:
+;; (find-pdf-page \"{fname}\")
+;; (find-pdf-text \"{fname}\")
+\(code-pdf-page \"{c}\" \"{fname}\")
+\(code-pdf-text \"{c}\" \"{fname}\")
+;; (find-{c}page)
+;; (find-{c}text)
+
+;; Links to an audio file:
;; (find-audio \"{fname}\")
\(code-audio \"{c}audio\" \"{fname}\")
-;; \(find-{c}audio)
-;; \(find-{c}audio \"0:00\")
+;; (find-{c}audio)
+;; (find-{c}audio \"0:00\")
+;; Links to a video file:
;; (find-video \"{fname}\")
\(code-video \"{c}video\" \"{fname}\")
-;; \(find-{c}video)
-;; \(find-{c}video \"0:00\")
-
+;; (find-{c}video)
+;; (find-{c}video \"0:00\")
+;;
;; (eev-avadj-mode 0)
;; (eev-avadj-mode)
+
+;; Links to an shell-like program (for eepitch):
+;; (eepitch-comint \"{c}\" \"{fname}\")
+
+(defun eepitch-{c} () (interactive)
+ (eepitch-comint \"{c}\"
+ \"{fname}\"))
+
+;; Test:
+
+ (eepitch-{c})
+ (eepitch-kill)
+ (eepitch-{c})
")
)
pos-spec-list)))
diff --git a/eev-hlinks.el b/eev-hlinks.el
new file mode 100644
index 0000000..30abc4a
--- /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.
+;; Ugliness: `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 92e6d8b..5d2022c 100644
--- a/eev-intro.el
+++ b/eev-intro.el
@@ -1,6 +1,6 @@
;;; eev-intro.el --- sandboxed tutorials for eev, like (find-eev-quick-intro)
-;; Copyright (C) 2013-2019 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2020 Free Software Foundation, Inc.
;;
;; This file is part of GNU eev.
;;
@@ -19,7 +19,7 @@
;;
;; Author: Eduardo Ochs <address@hidden>
;; Maintainer: Eduardo Ochs <address@hidden>
-;; Version: 2019nov04
+;; Version: 2020feb20
;; Keywords: e-scripts
;;
;; Latest version: <http://angg.twu.net/eev-current/eev-intro.el>
@@ -91,6 +91,8 @@
;; «.find-org-intro» (to "find-org-intro")
;; «.find-escripts-intro» (to "find-escripts-intro")
+;; «.find-windows-beginner-intro» (to "find-windows-beginner-intro")
+
;; Videos:
;; «.find-three-main-keys-intro» (to "find-three-main-keys-intro")
;; «.find-what-sexps-can-do-intro» (to "find-what-sexps-can-do-intro")
@@ -327,7 +329,7 @@ start it again by typing \"~/eev\" again in the shell
prompt.
Eventually you will learn how go get out of everything and how to undo
almost anything, _BUT THAT WILL NOT HAPPEN IN THE FIRST TEN MINUTES_.
-This tutorial is intented to make you learn the most essential things
+This tutorial is intended to make you learn the most essential things
in the first ten minutes - including how to navigate in Emacs's
manuals.
@@ -372,7 +374,7 @@ line of the block below:
`M-e' accepts several different numeric prefixes that alter its
behavior. We are only interested in one of them now - `M-0 M-e'
-highlights the sexp for a fraction of a second insted of executing it.
+highlights the sexp for a fraction of a second instead of executing it.
Try it above.
@@ -433,7 +435,7 @@ or
sudo apt-get install emacs-common-non-dfsg
may work - but for \"...-non-dfsg\" packages may need you to
-enable access to the \"non-free\" respository... ask for help if
+enable access to the \"non-free\" repository... ask for help if
you need!
An important difference between elisp hyperlinks and browser
@@ -982,7 +984,9 @@ active. So:
`M-j' runs: (find-eejumps)
-Let's try to understand this from both a user's point of view and
+`find-eejumps' is explained in the next section.
+
+Let's try to understand `M-j' from both a user's point of view and
from a technical point of view.
We may have elisp one-liners that we want to be able to execute very
@@ -1037,20 +1041,49 @@ as the \"target associated to nnn\".
7.2. The list of eejump targets
-------------------------------
-If you type `M-j' without a prefix argument then it runs
-`(find-eejumps)', that displays a help text followed by all the
-current eejump targets as defuns, one in each line. Try it:
+If you type `M-j' without a prefix argument it runs
+`(find-eejumps)', that displays a temporary buffer with a header
+with help and links and then a list of all the current eejump targets.
+Try it:
(eek \"M-j\")
(find-eejumps)
-You will see that two of those entries are:
+The header is this:
+
+ ;; Generated by: (find-eejumps)
+ ;; See: (find-eev-quick-intro \"7.1. `eejump'\" \"`M-j'\")
+ ;; (find-emacs-keys-intro \"1. Basic keys (eev)\")
+ ;; (find-emacs-keys-intro \"2. Key sequences\")
+ ;; For example,
+ ;; M-1 M-j runs: (find-fline \"~/TODO\")
+ ;; M-2 M-j runs: (find-emacs-keys-intro)
+ ;; M-5 M-j runs: (find-eev-quick-intro)
+ ;; Current eejump targets:
+
+Note that after the \"See:\" we have three elisp hyperlinks to
+sections of tutorials, and after the \"For example:\" we have
+three examples of how to run `M-j' with numeric prefixes; each
+one of these examples is followed by the elisp hyperlink whose
+action corresponds to running `M-j' with that prefix.
+
+That header is very beginner-friendly, and if you are a beginner
+who only knows how to use `M-e' and `M-j' you can, and should,
+use that header as your main starting point: every time that you
+feel lost you can type `M-j' to go back to that header, and you
+can use its links to navigate to the documentation for Emacs and
+eev.
+
+That header is followed by a section that is very beginner
+UN-friendly, that contains a series of defuns like these ones:
(defun eejump-1 () (find-fline \"~/TODO\"))
(defun eejump-5 () (find-eev-quick-intro))
+
+
7.3. Defining eejump targets
----------------------------
We can define new eejump targets, or overwrite the current ones, by
@@ -1091,7 +1124,7 @@ Let's start with an example. If we are editing a LaTeX
file, say
If our \"/tmp/foo.tex\" starts with these lines
% (defun c () (interactive) (find-sh \"cd /tmp/; pdflatex foo.tex\"))
- % (defun d () (interactive) (find-xpdfpage \"/tmp/foo.pdf\"))
+ % (defun d () (interactive) (find-pdf-page \"/tmp/foo.pdf\"))
% (defun e () (interactive) (find-fline \"/tmp/foo.tex\"))
and we execute these defuns, then from that point on `M-x c', `M-x d'
@@ -1625,7 +1658,7 @@ variables by running this:
(setq ee-info-file \"elisp\")
The short hyperlink to an info node is only produced when Info is
-visting a node in a manual whose name matches the variable
+visiting a node in a manual whose name matches the variable
`ee-info-file'.
@@ -1716,7 +1749,7 @@ This section was moved to:
;;; |___/
;;
;; «find-emacs-keys-intro» (to ".find-emacs-keys-intro")
-;; (find-intro-links "emacs-keys")
+;; Skel: (find-intro-links "emacs-keys")
(defun find-emacs-keys-intro (&rest pos-spec-list) (interactive)
(let ((ee-buffer-name "*(find-emacs-keys-intro)*"))
@@ -1739,15 +1772,17 @@ The most basic keys of eev are:
M-e - to follow a hyperlink. Mnemonic: \"(e)valuate\"/\"(e)xecute\".
See: (find-eev-quick-intro \"2. Evaluating Lisp\")
(find-eev-quick-intro \"3. Elisp hyperlinks\")
+ M-j - to jump to certain predefined places. In particular,
+ `M-j' takes you to a buffer with basic help and a
+ list of jump targets. See:
+ (find-eev-quick-intro \"7.2. The list of eejump targets\")
+ `M-2 M-j' takes you to this help page.
+ `M-5 M-j' takes you to: (find-eev-quick-intro)
M-k - to go back. Mnemonic: \"(k)ill buffer\".
See: (find-eev-quick-intro \"3. Elisp hyperlinks\" \"M-k\")
M-K - to go back without killing the buffer.
See: (find-eval-intro \"5. Going back\")
(find-eval-intro \"5. Going back\" \"`M-K' instead of `M-k'\")
- M-j - to jump to certain predefined places - in particular,
- `M-j' takes you to the list of jump targets.
- `M-2 M-j' takes you to this help page.
- `M-5 M-j' takes you to: (find-eev-quick-intro)
<f8> - See: (find-eev-quick-intro \"6. Controlling shell-like programs\")
M-T - See: (find-eev-quick-intro \"6.3. Creating eepitch blocks: `M-T'\")
@@ -1913,7 +1948,7 @@ M-B -- eewrap-escript-block
(find-eev-quick-intro \"`M-B'\")
;;;
;; «find-eev-install-intro» (to ".find-eev-install-intro")
-;; (find-intro-links "eev-install")
+;; Skel: (find-intro-links "eev-install")
(defun find-eev-install-intro (&rest pos-spec-list) (interactive)
(let ((ee-buffer-name "*(find-eev-install-intro)*"))
@@ -2358,7 +2393,7 @@ See:
;;; \___|\___| \_/
;;;
;; This works as an index.
-;; (find-intro-links "eev")
+;; Skel: (find-intro-links "eev")
;; «find-eev-intro» (to ".find-eev-intro")
(defun find-eev-intro (&rest rest) (interactive)
@@ -2392,47 +2427,52 @@ recommended reading order. These are the basic ones:
8. (find-rcirc-intro)
9. (find-eev-install-intro)
+This is a very basic tutorial intended mainly for M$ Windows
+users:
+
+ 10. (find-windows-beginner-intro)
+
These ones explain ideas, conventions, and usage patterns:
- 10. (find-escripts-intro)
- 11. (find-links-conv-intro)
+ 11. (find-escripts-intro)
+ 12. (find-links-conv-intro)
These are older and more technical versions of sections of the
eev-quick-intro:
- 12. (find-eval-intro)
- 13. (find-links-intro)
- 14. (find-brxxx-intro)
- 15. (find-wrap-intro)
- 16. (find-eejump-intro)
- 17. (find-anchors-intro)
- 18. (find-code-c-d-intro)
- 19. (find-psne-intro)
+ 13. (find-eval-intro)
+ 14. (find-links-intro)
+ 15. (find-brxxx-intro)
+ 16. (find-wrap-intro)
+ 17. (find-eejump-intro)
+ 18. (find-anchors-intro)
+ 19. (find-code-c-d-intro)
+ 10. (find-psne-intro)
These are etcs:
- 20. (find-multiwindow-intro)
- 21. (find-templates-intro)
- 22. (find-org-intro)
- 23. (find-videos-intro)
- 24. (find-what-sexps-can-do-intro)
+ 21. (find-multiwindow-intro)
+ 22. (find-templates-intro)
+ 23. (find-org-intro)
+ 24. (find-videos-intro)
+ 25. (find-what-sexps-can-do-intro)
These ones explain advanced features that require extra setup:
- 25. (find-prepared-intro)
- 26. (find-bounded-intro)
- 27. (find-channels-intro)
+ 26. (find-prepared-intro)
+ 27. (find-bounded-intro)
+ 28. (find-channels-intro)
This one is used in a video:
- 28. (find-three-main-keys-intro)
+ 29. (find-three-main-keys-intro)
These ones are obsolete:
- 29. (find-emacs-intro)
- 30. (find-defun-intro)
+ 30. (find-emacs-intro)
+ 31. (find-defun-intro)
-Item 23 is an index of old video tutorials, with scripts for
+Item 24 is an index of old video tutorials, with scripts for
downloading local copies of them and links to important positions
in the videos.
@@ -2523,7 +2563,7 @@ For the full lists of keybindings, see:
;;; |_| |_|\___|_| \___| |_|_|_| |_|_|\_\___/
;;;
;; «find-here-links-intro» (to ".find-here-links-intro")
-;; (find-intro-links "here-links")
+;; Skel: (find-intro-links "here-links")
(defun find-here-links-intro (&rest pos-spec-list) (interactive)
(let ((ee-buffer-name "*(find-here-links-intro)*"))
@@ -2817,7 +2857,7 @@ The next steps are to learn how:
;;; |___/
;;
;; «find-refining-intro» (to ".find-refining-intro")
-;; (find-intro-links "refining")
+;; Skel: (find-intro-links "refining")
(defun find-refining-intro (&rest pos-spec-list) (interactive)
(let ((ee-buffer-name "*(find-refining-intro)*"))
@@ -2879,7 +2919,7 @@ special way, according to its type:
and the other arguments are interpreted (recursively) by
`ee-goto-rest':
- string -> jump to the next occurence of that string
+ string -> jump to the next occurrence of that string
number -> move down n lines
list -> evaluate the list
@@ -3087,7 +3127,83 @@ The big figure below shows all the keys sequences:
+5. Pointing to anchors
+======================
+We saw in
+
+ (find-eev-quick-intro \"8. Anchors\")
+
+how to create anchors and how to point to anchors in the same
+file with `to', and we saw briefly in
+
+ (find-eev-quick-intro \"9.2. Extra arguments to `code-c-d'\")
+
+that the extra argument `:anchor' in
+
+ (code-c-d \"eev\" ee-eev-source-directory :anchor)
+
+let us abbreviate the links below, that point to anchors,
+
+ (find-eevfile \"eev-blinks.el\" \"«find-wottb»\")
+ (find-anchor (ee-eevfile \"eev-blinks.el\") \"find-wottb\")
+
+as just:
+
+ (find-eev \"eev-blinks.el\" \"find-wottb\")
+If you are in a file that has anchors there are two key sequences
+that you can use to create a link to that anchors in it very
+quickly. Remember that `M-h M-w' is a variant of `M-w' that
+copies the current line to the kill ring; as a bonus, `M-h M-w'
+highlights the current line for a brief while, and displays this
+message in the echo area:
+
+ Copied the current line to the kill ring - use C-y to paste
+
+If you run `M-h M-w' with the prefix argument 1, i.e., with `M-1
+M-h M-w', it copies the previous anchor instead of the current
+line. Try it now - `M-1 M-h M-w' will flash the \"find-wottb\"
+above and will say:
+
+ Copied \"find-wottb\" to the kill ring
+
+If you try `M-1 M-h M-w' at the target of this sexp, on in the
+lines after the target,
+
+ (find-eev \"eev-blinks.el\" \"find-wottb\")
+
+the anchor \"find-wottb\" will be copied to the kill ring... if
+you then type `M-h M-h' or `M-h M-3', go to the line with
+
+ (find-eevfile \"eev-blinks.el\")
+
+in it and type `M-h M-y' it will become this,
+
+ (find-eevfile \"eev-blinks.el\" \"find-wottb\")
+
+that is ALMOST a link to the anchor \"find-wottb\" in the file
+\"eev-blinks.el\" - we need to delete the \"file\" in
+`find-eevfile' to make it become a link to an anchor. It turns
+out that eev has a key that does exactly that: `M-h M--'. See:
+
+ (eek \"M-h M-k M-h M-- ;; ee-shrink-hyperlink-at-eol\")
+ (find-eev \"eev-edit.el\" \"ee-shrink-hyperlink-at-eol\")
+
+I use this so much that I got used to typing this sequence of
+keys VERY quickly:
+
+ M-1 M-h M-w
+ M-h M-h
+ (<down> several times)
+ M-h M-2
+ M-h M-y
+ M-h M--
+ M-h M-w
+
+I don't touch-type, and for me it became natural do hold the meta
+key down with my left thumb while I type `M-1hwhh' and
+`M-h2hyh-hw'... I would be nice to have a way to do this same
+series of actions using keys that are good for touch typists.
@@ -3105,7 +3221,7 @@ The big figure below shows all the keys sequences:
;;; \___| \_/ \__,_|_|
;;;
;; «find-eval-intro» (to ".find-eval-intro")
-;; (find-intro-links "eval")
+;; Skel: (find-intro-links "eval")
;; (find-TH "eev-article" "hyperlinks")
;; http://angg.twu.net/eev-article.html#hyperlinks
;; file:///home/edrx/TH/L/eev-article.html#hyperlinks
@@ -3160,14 +3276,14 @@ but eev-mode implements a shorthand for it: `M-e'. Try
it here:
`M-e' accepts several different numeric prefixes that alter its
behavior. We are only interested in one of them now - `M-0 M-e'
-highlights the sexp for a fraction of a second insted of
+highlights the sexp for a fraction of a second instead of
executing it. Try it above.
In some rare occasions we might want to run something like `M-e'
but without moving to the end of the line first. Eev-mode
implements a key binding for that: `M-E' (meta-shift-e). As an
exercise, try to use `M-0 M-E' at several positions below, to
-hightlight the subsexps `(* 2 3)', `(* 4 5)', and `4'.
+highlight the subsexps `(* 2 3)', `(* 4 5)', and `4'.
(+ (* 2 3) (* 4 5))
@@ -3357,7 +3473,7 @@ special way, according to its type:
and the other arguments are interpreted (recursively) by
`ee-goto-rest':
- string -> jump to the next occurence of that string
+ string -> jump to the next occurrence of that string
number -> move down n lines
list -> evaluate the list
@@ -3393,7 +3509,7 @@ argument in the pos-spec-list by running
`ee-format-as-anchor' on
it [TODO: document this], and the ones based on
`ee-goto-position-page' jump to the n-th \"page\" of a buffer if
the first argument of the pos-spec-list is a number, n; for
-exemple, if n is 234 that will jump to the 233-th formfeed (233
+example, if n is 234 that will jump to the 233-th formfeed (233
and not 234 because the page 1 is before the first formfeed). For
more on \"pages\", see:
@@ -3469,7 +3585,7 @@ keep the instructions visible.
10. More on functions
=====================
-A symbol - for example `f' - can be both a varible and a
+A symbol - for example `f' - can be both a variable and a
function; its \"value as a variable\" and its \"value as a
function\" are stored in different places. Try:
@@ -3684,7 +3800,7 @@ hyperlinks in scripts]
;;; |_|_|_| |_|_|\_\___/ \___\___/|_| |_|\_/ \___|_| |_|\__|_|\___/|_|
|_|___/
;;;
;; «find-links-conv-intro» (to ".find-links-conv-intro")
-;; (find-intro-links "links-conv")
+;; Skel: (find-intro-links "links-conv")
(defun find-links-conv-intro (&rest pos-spec-list) (interactive)
(let ((ee-buffer-name "*(find-links-conv-intro)*"))
@@ -3859,7 +3975,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\".
@@ -3870,6 +3991,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\")
@@ -4138,7 +4260,7 @@ be expanded later:
;;; | | | | | | <\__ \
;;; |_|_|_| |_|_|\_\___/
;;;
-;; (find-intro-links "links")
+;; Skel: (find-intro-links "links")
;; «find-links-intro» (to ".find-links-intro")
(defun find-links-intro (&rest rest) (interactive)
@@ -4377,11 +4499,10 @@ Most of the \"M-h commands\" generate buffers with elisp
hyperlinks in which the the first line \"regenerates the
buffers\". This means two things:
- 1. You can copy the first to your notes, and it will work as a
- link to that buffer. For example:
+ 1. You can copy the first line to your notes, and it will work
+ as a link to that buffer. Here are some examples of these
+ first lines:
- (find-efunction 'next-line)
- (find-evariable 'line-move-visual)
(find-latex-links \"/tmp/mytest\")
(find-latex-links \"~/latextest\")
(find-code-pdf-links
\"/usr/local/texlive/2019/texmf-dist/doc/asymptote/\" \"{c}\")
@@ -4530,7 +4651,7 @@ scripts etc\]
;;; |_|
;;
;; «find-eepitch-intro» (to ".find-eepitch-intro")
-;; (find-intro-links "eepitch")
+;; Skel: (find-intro-links "eepitch")
;; (find-eev "eepitch.readme")
(defun find-eepitch-intro (&rest rest) (interactive)
@@ -5176,7 +5297,7 @@ What functions can generate target buffers:
;;; \_/\_/ |_| \__,_| .__/
;;; |_|
;;
-;; (find-intro-links "wrap")
+;; Skel: (find-intro-links "wrap")
;; «find-wrap-intro» (to ".find-wrap-intro")
(defun find-wrap-intro (&rest rest) (interactive)
@@ -5670,7 +5791,7 @@ it is not empty, then `M-J' produces a definition for an
Note that `M-J' is quite dumb - it doesn't check if the first
\"word\" is a number, nor if the second is a sexp. Use it with
care! Try using `M-J' on the \"a b ...\" lines below - you will
-get useless definitons.
+get useless definitions.
a b c d
a b c
@@ -5702,7 +5823,7 @@ then you'll be attributing just a \"temporary\" meaning to
;;; \__,_|_| |_|\___|_| |_|\___/|_| |___/
;;;
;; «find-anchors-intro» (to ".find-anchors-intro")
-;; (find-intro-links "anchors")
+;; Skel: (find-intro-links "anchors")
(defun find-anchors-intro (&rest rest) (interactive)
(let ((ee-buffer-name "*(find-anchors-intro)*"))
@@ -5971,7 +6092,7 @@ lists, like this (NOTE: do not execute these defuns!):
and they both invoke `ee-code-c-d', which does all the template
work and returns a big string; `ee-code-c-d' passes its `rest'
argument to a recursive function called `ee-code-c-d-rest', and
-for each one of the suported keywords there is a corresponding
+for each one of the supported keywords there is a corresponding
function, also recursive; for `:info' it is called
`ee-code-c-d-:info'. Their specifications are like this:
@@ -7061,7 +7182,7 @@ The details on how to create these \"brxxx functions\"
are here:
;;; \__,_|\__,_|\__,_|_|\___/_/ \_/ |_|\__,_|\___|\___/
;;;
;; «find-audiovideo-intro» (to ".find-audiovideo-intro")
-;; (find-intro-links "audiovideo")
+;; Skel: (find-intro-links "audiovideo")
(defun find-audiovideo-intro (&rest pos-spec-list) (interactive)
(let ((ee-buffer-name "*(find-audiovideo-intro)*"))
@@ -7151,8 +7272,8 @@ execute these sexps occasionally to check if they are
really
pointing to the right places, and then make further adjustments;
we are not doing that yet.
-The idea of a \"default audio/video file\" will be explained
-later.
+The idea of a \"default audio/video file\" will be explained in
+section 4.4.
@@ -7325,6 +7446,77 @@ Then try:
+4.4. The default audio/video file
+---------------------------------
+One of the things that the function `find-punchandjudyvideo' does
+when executed is this:
+
+ (setq ee-audiovideo-last 'find-punchandjudyvideo)
+
+It sets the \"default audio/video file\" - more precisely, it
+sets the global variable `ee-audiovideo-last' that indicate that
+the way to play again the \"default audio/video file\" is by
+running the function `find-punchandjudyvideo'.
+
+This is similar to what the `find-xxxtext' functions do - they
+store some information about the last PDF opened with a
+`find-xxxtext' function into global variables. See:
+
+ (find-pdf-like-intro \"11. How `M-h M-p' guesses everything\")
+ (find-pdf-like-intro \"11. How `M-h M-p' guesses everything\"
\"find-xxxtext\")
+
+and, for more technical details:
+
+ (find-eev-quick-intro \"9.1. `code-c-d'\")
+ (find-eev-quick-intro \"9.1. `code-c-d'\" \"find-code-c-d\")
+ (find-code-video \"punchandjudyvideo\"
+
\"~/eev-videos/Punch_and_Judy_Mark_Poulton-K6LmZ0A1s9U.mp4\")
+
+In section 2 we mentioned that the key `M-p' in `eev-avadj-mode'
+does this:
+
+ M-p play the default audio/video file at a time offset
+
+Let's see in practice what this means. If we run these three
+sexps here,
+
+ (code-video \"punchandjudyvideo\"
\"~/eev-videos/Punch_and_Judy_Mark_Poulton-K6LmZ0A1s9U.mp4\")
+ (find-punchandjudyvideo \"1:17\" \"he will sing the baby to sleep\")
+ (eev-avadj-mode 1)
+
+we will a) define `find-punchandjudyvideo', b) set the global
+variable `ee-audiovideo-last' to `find-punchandjudyvideo', c)
+turn `eev-avadj-mode' on. Now `M-p' should work! If you type
+`M-p' on any of the lines with timestamps below it will open the
+default audio/video file at that timestamp.
+
+ 0:00
+ 0:10 calls the baby
+ 0:40 where's the baby
+ 1:04 right position
+ 1:17 he will sing the baby to sleep
+ 1:33 1-2-3
+ 1:48 baby downstairs
+ 3:12 slaps
+ 3:50 1-2-3
+ 4:34 you keep an eye on mr Punch
+ 4:46 hat
+ 5:03 hat
+ 5:25 did you see him?
+ 5:55 clown
+ 6:14 slaps
+ 6:52 sausages
+ 7:24 crocodile
+ 8:07 crocodile + sausages
+ 8:32 another scene
+ 8:39 fight
+ 9:03 clown
+ 9:45 mr punch
+
+
+
+
+
5. Passing options to mplayer
=============================
@@ -7465,7 +7657,7 @@ to `find-youtubedl-links' below:
In the second one we get a buffer where all occurrences
of \"{title}\" have been substituted by \"TITLE\", and all
-occurrences of \"{ext-}\" by \".mp4\". What happenned was that
+occurrences of \"{ext-}\" by \".mp4\". What happened was that
(ee-youtubedl-guess* \"/tmp/\" \"abcdefghijk\")
--> (\"/tmp/TITLE-abcdefghijk.mp4.part\")
@@ -7576,7 +7768,7 @@ buffers, change the variables `ee-youtubedl-dir',
`ee-youtubedl-dir2',
;;; |_| |_| |_|\__,_|_|\__|_| \_/\_/ |_|_| |_|\__,_|\___/ \_/\_/
;;;
;; «find-multiwindow-intro» (to ".find-multiwindow-intro")
-;; (find-intro-links "multiwindow")
+;; Skel: (find-intro-links "multiwindow")
(defun find-multiwindow-intro (&rest pos-spec-list) (interactive)
(let ((ee-buffer-name "*(find-multiwindow-intro)*"))
@@ -8014,7 +8206,7 @@ Here:
;;; |_| \___|_|_| \___|
;;;
;; «find-rcirc-intro» (to ".find-rcirc-intro")
-;; (find-intro-links "rcirc")
+;; Skel: (find-intro-links "rcirc")
(defun find-rcirc-intro (&rest pos-spec-list) (interactive)
(let ((ee-buffer-name "*(find-rcirc-intro)*"))
@@ -8147,7 +8339,7 @@ We can apply this idea
(find-eev-quick-intro \"7.4. Commands with very short names\")
(find-eev-quick-intro \"7.4. Commands with very short names\" \"(defun c
()\")
-to rcirc. If you connect occasionaly to the channels #eev,
+to rcirc. If you connect occasionally to the channels #eev,
#emacs, #git and #ruby, you can run this, or put these lines in
your .emacs:
@@ -8202,7 +8394,7 @@ See:
;;; |_|
;;
;; «find-templates-intro» (to ".find-templates-intro")
-;; (find-intro-links "templates")
+;; Skel: (find-intro-links "templates")
(defun find-templates-intro (&rest rest) (interactive)
(let ((ee-buffer-name "*(find-templates-intro)*"))
@@ -8218,27 +8410,252 @@ It is meant as both a tutorial and a sandbox.
-This into is currently GARBAGE.
-It should be rewritten to become a tutorial on:
+This intro is being rewritten!
+
+
+
+
+1. Introduction
+===============
+In dec/2019 I sent this e-mail to the eev mailing list:
+
+ https://lists.gnu.org/archive/html/eev/2019-12/msg00001.html
+
+It was a kind of a call for help. It contained a very brief
+explanation of how the \"templated\" functions of eev, like
+`find-ekey-links' and `find-latex-links', are implemented, and
+showed how people can write their own templated functions as
+quick hacks.
+
+If you want to learn how to _use_ templated functions, start by:
+
+ (find-eev-quick-intro \"4.2. `find-ekey-links' and friends\")
+ (find-eev-quick-intro \"7.5. `find-latex-links'\")
+
+If you want to look at the source code of the existing templated
+functions, take a look at:
+
+ (find-eev \"eev-elinks.el\")
+ (find-eev \"eev-tlinks.el\")
+
+ (find-links-intro \"3. Elisp hyperlinks buffers conventions\")
+
+This tutorial is for people who want to learn how to _write_
+their own templated functions.
+
+To learn how to write your own templated functions you need to:
+
+ 1) learn how to use `ee-template0' by reading its source code
+ and playing with examples in the source and here,
+
+ 2) learn how to use `find-elinks' - same thing,
+
+ 3) learn how to use `find-find-links-links', that is a horrible
+ kludge that works well enough so I never cleaned it up.
+
+
+
+
+
+2. `ee-template0'
+=================
+See:
+
+ (find-efunction 'ee-template0)
+ (find-eev \"eev-template0.el\")
+
+Try:
+
+ (ee-template00 \"a{(+ 2 3)}b\")
+
+ (let ((hi \"Here: \")
+ (a 22)
+ (b 33))
+ (ee-template00 \"{hi}{a}+{b}={(+ a b)}\"))
+
+ (defun foo (a b) (ee-template00 \"{a}+{b}={(+ a b)}\"))
+ (foo 22 33)
+
+ (ee-template0 \"{<} a{(+ 2 3)} {>}\")
+
+
+
+
+3. `find-elinks'
+================
+See:
+
+ (find-efunction 'find-elinks)
+ (find-eev \"eev-elinks.el\" \"find-elinks\")
+
+Now try these examples. They are multi-line versions with
+comments of the examples in the source file.
+
+ (find-elinks
+ '((a sexp)
+ \"a string\")
+ )
+
+Now try these examples. They are longer, multi-line versions of
+the examples in the source file.
+
+ (find-elinks
+ '((a sexp)
+ \"a string\")
+ )
+
+ (find-elinks
+ '((a sexp)
+ \"a string\")
+ \"st\")
+
+ (find-elinks
+ '((a sexp)
+ \"a string\")
+ \"st\" \"i\")
+
+ (find-elinks
+ '((a sexp)
+ (another sexp)
+ (sexps get comment signs)
+ (strings in sexps: \"foo bar\")
+ (newlines in strings in sexps get backslashed: \"\\n\")
+ (ticks in sexps: 'a '(b c))
+ (nils in sexps: nil () (nil nil))
+ \"a string\"
+ \"another string\"
+ \"strings don't get comment signs\"
+ \"empty strings become empty lines\"
+ \"\"
+ \"newlines in strings\\nbecome real newlines\"
+ \"nils are dropped:\"
+ nil
+ \"see?\"
+ \"\"
+ (another sexp)
+ )
+ )
+
+Normally the first argument to `find-elinks' is backquoted. See:
+
+ (find-elnode \"Backquote\")
+
+Try:
+
+ `(foo ,(+ 2 3) bar)
+ `(foo ,'(+ 2 3) bar)
+ `(foo ,(list 2 3) bar)
+ `(foo ,@(list 2 3) bar)
+
+See:
+
+ (find-eev \"eev-elinks.el\" \"find-efunction-links\")
+
+The first argument to `find-elinks' is called LIST. Elements of
+LIST that are sexps are converted to strings using `ee-HS'. See:
+
+ (find-eev \"eev-wrap.el\" \"ee-S\")
+
+
+
+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\")
+
+
+
+
+
+5. `find-find-links-links'
+==========================
+ALL my `find-*-links' started as quick hacks.
+SOME of them were useful enough to deserve being cleaned up.
+A FEW of them ended up in:
+
+ http://angg.twu.net/eev-current/eev-elinks.el.html
+ http://angg.twu.net/eev-current/eev-tlinks.el.html
+ (find-eev \"eev-elinks.el\")
+ (find-eev \"eev-tlinks.el\")
+
+...but there are lots of other `find-*-links' functions in:
+
+ http://angg.twu.net/.emacs.templates.html
+
+They are trivial to write. I start with a skeleton that I obtain by
+running `M-x find-find-links-links', and then I modify the first line
+in that buffer, regenerate, modify, regenerate, and so on until happy.
+Run each of the sexps below with `M-2 M-e' to compare the buffers that
+they generate:
+
+ (find-find-links-links \"{k}\" \"{stem}\" \"{args}\")
+ (find-find-links-links \"\\\\M-u\" \"{stem}\" \"{args}\")
+ (find-find-links-links \"\\\\M-u\" \"macports\" \"{args}\")
+ (find-find-links-links \"\\\\M-u\" \"macports\" \"pkgname\")
+ (find-find-links-links \"\\\\M-u\" \"macports\" \"pkgname anotherarg\")
+
+
+
+
+So: start by running something like
+
+ (find-find-links-links \"\\\\M-u\" \"macports\" \"pkgname\")
+ (find-find-links-links \"\\\\M-u\" \"homebrew\" \"pkgname\")
+
+then copy the
+
+\(define-key eev-mode-map \"\\M-h\\M-u\" 'find-macports-links)
+
+\(defun find-macports-links (&optional pkgname &rest pos-spec-list)
+\"Visit a temporary buffer containing hyperlinks for foo.\"
+ (interactive)
+ (setq pkgname (or pkgname \"{pkgname}\"))
+ (apply 'find-elinks
+ `((find-macports-links ,pkgname ,@pos-spec-list)
+ ;; Convention: the first sexp always regenerates the buffer.
+ (find-efunction 'find-macports-links)
+ \"\"
+ ,(ee-template0 \"\\
+\")
+ )
+ pos-spec-list))
+
+;; Test: (find-macports-links ___)
+
+to your notes, replace the `(interactive)' by
+
+ (interactive (list (ee-debpkgname-ask)))
+
+and start adding things to the string in (ee-template0 \"...\").
+
+I will try to update this intro in the next days:
- 1) How to use `ee-template0' and `find-elinks':
+ (find-templates-intro)
+ http://angg.twu.net/eev-intros/find-templates-intro.html
- (find-eev \"eev-wrap.el\" \"ee-template0\")
- (find-eev \"eev-elinks.el\" \"find-elinks\")
- 2) A review of the conventions here:
- (find-links-conv-intro)
- (find-links-conv-intro \"3. Classification\")
- 3) How some template functions like these
- (find-eev \"eev-tlinks.el\" \"find-find-links-links\")
- (find-eev \"eev-tlinks.el\" \"find-intro-links\")
- (find-eev \"eev-wrap.el\" \"find-eewrap-links\")
+Etc:
- are used to create first versions for several functions in
- eev...
+ (find-links-conv-intro)
+ (find-links-conv-intro \"3. Classification\")
+ (find-eev \"eev-tlinks.el\" \"find-find-links-links\")
+ (find-eev \"eev-tlinks.el\" \"find-intro-links\")
+ (find-eev \"eev-wrap.el\" \"find-eewrap-links\")
" rest)))
@@ -8485,7 +8902,7 @@ But try these:
;;; |_.__/ \___/ \__,_|_| |_|\__,_|\___|\__,_|
;;;
;; «find-bounded-intro» (to ".find-bounded-intro")
-;; (find-intro-links "bounded")
+;; Skel: (find-intro-links "bounded")
(defun find-bounded-intro (&rest pos-spec-list) (interactive)
(let ((ee-buffer-name "*(find-bounded-intro)*"))
(apply 'find-eintro "\
@@ -8578,7 +8995,7 @@ so you should do something like this, but for your
favourite key:
;;; \___|_| |_|\__,_|_| |_|_| |_|\___|_|___/
;;;
;; «find-channels-intro» (to ".find-channels-intro")
-;; (find-intro-links "channels")
+;; Skel: (find-intro-links "channels")
(defun find-channels-intro (&rest pos-spec-list) (interactive)
(let ((ee-buffer-name "*(find-channels-intro)*"))
@@ -8684,7 +9101,7 @@ and then:
a python interpreter \"listening on channel A\";
2) we use the top shell to send the lines \"print(2+3)\" and
- \"exit()\" \"thorugh the channel A\". In low-level terms
+ \"exit()\" \"through the channel A\". In low-level terms
this means that for each line
a) we save it into the file \"$EEVTMPDIR/eeg.A.str\",
@@ -9088,7 +9505,7 @@ How to set it up
;;; \_/ |_|\__,_|\___|\___/|___/
;;;
;; «find-videos-intro» (to ".find-videos-intro")
-;; (find-intro-links "videos")
+;; Skel: (find-intro-links "videos")
(defun find-videos-intro (&rest pos-spec-list) (interactive)
(let ((ee-buffer-name "*(find-videos-intro)*"))
@@ -9295,7 +9712,7 @@ player. All this is explained here:
30:21 remember that the first line regenerates the buffer...
31:07 we use that to select a directory for installation.
31:40 an eepitch block
-31:53 emacs is made to handle anyting that looks like text...
+31:53 emacs is made to handle anything that looks like text...
32:38 running terminals inside Emacs
32:52 the best of both worlds
33:50 f8
@@ -9388,7 +9805,7 @@ use this sexp to help you:
;;; \__,_|\___|_| \__,_|_| |_|
;;;
;; «find-defun-intro» (to ".find-defun-intro")
-;; (find-intro-links "defun")
+;; Skel: (find-intro-links "defun")
(defun find-defun-intro (&rest rest) (interactive)
(let ((ee-buffer-name "*(find-defun-intro)*"))
@@ -9612,7 +10029,7 @@ returns nil. But just as
;;; \___|_| |_| |_|\__,_|\___|___/ |_|_| |_|\__|_| \___/
;;;
;; «find-emacs-intro» (to ".find-emacs-intro")
-;; (find-intro-links "emacs")
+;; Skel: (find-intro-links "emacs")
(defun find-emacs-intro (&rest rest) (interactive)
(let ((ee-buffer-name "*(find-emacs-intro)*"))
@@ -9806,7 +10223,7 @@ C-x e -- call-last-kbd-macro (find-enode
\"Keyboard Macros\")
;; «find-org-intro» (to ".find-org-intro")
-;; (find-intro-links "org")
+;; Skel: (find-intro-links "org")
(defun find-org-intro (&rest pos-spec-list) (interactive)
(let ((ee-buffer-name "*(find-org-intro)*"))
@@ -9905,12 +10322,15 @@ these notes.
You can execute a source block in Org and display its results
with `C-c C-c'. See:
-# (find-orgnode \"Working With Source Code\")
+# (find-orgnode \"Working with source code\")
# (find-orgnode \"Evaluating code blocks\")
+# (find-orgnode \"Evaluating code blocks\" \":results output\")
+# (find-orgnode \"Results of evaluation\" \":results output\")
+# (find-orgnode \"results\" \"output\")
Try it here:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh :results output
seq 200 204
#+END_SRC
@@ -9920,7 +10340,7 @@ Compare that with:
and compare
-#+BEGIN_SRC python
+#+BEGIN_SRC python :results output
def square (x):
return x*x
@@ -9971,7 +10391,7 @@ How do I mark a section as \"don't export this\"?
;;; |_|
;; «find-escripts-intro» (to ".find-escripts-intro")
-;; (find-intro-links "escripts")
+;; Skel: (find-intro-links "escripts")
(defun find-escripts-intro (&rest pos-spec-list) (interactive)
(let ((ee-buffer-name "*(find-escripts-intro)*"))
@@ -10665,6 +11085,394 @@ This can also be used to generate links to info nodes.
+;;; __ ___ _ _
+;;; \ \ / / | | |__ ___ __ _(_)_ __ _ __ ___ _ __
+;;; \ \ /\ / / __)_____| '_ \ / _ \/ _` | | '_ \| '_ \ / _ \ '__|
+;;; \ V V /\__ \_____| |_) | __/ (_| | | | | | | | | __/ |
+;;; \_/\_/ ( / |_.__/ \___|\__, |_|_| |_|_| |_|\___|_|
+;;; |_| |___/
+;;
+;; «find-windows-beginner-intro» (to ".find-windows-beginner-intro")
+;; Skel: (find-intro-links "windows-beginner")
+
+(defun find-windows-beginner-intro (&rest pos-spec-list) (interactive)
+ (let ((ee-buffer-name "*(find-windows-beginner-intro)*"))
+ (apply 'find-eintro "\
+\(Re)generate: (find-windows-beginner-intro)
+Source code: (find-efunction 'find-windows-beginner-intro)
+More intros: (find-eev-quick-intro)
+ (find-eval-intro)
+ (find-eepitch-intro)
+This buffer is _temporary_ and _editable_.
+It is meant as both a tutorial and a sandbox.
+The quickest way to open or recreate this is with `M-3 M-j'.
+
+
+
+
+This is a tutorial on how to install Emacs and eev on M$ Windows.
+If you're a W$ user you should start by reading it online, at:
+
+ http://angg.twu.net/eev-intros/find-windows-beginner-intro.html
+
+After getting eev installed on your machine you can access it
+from Emacs by typing `M-3 M-j'.
+
+
+
+
+
+0. Introduction
+===============
+My favorite exposition of what eev is is this presentation, called
+\"How to record executable notes with eev - and how to play them back\":
+
+ http://angg.twu.net/emacsconf2019.html
+ http://angg.twu.net/LATEX/2019emacsconf.pdf (slides)
+ http://www.youtube.com/watch?v=86yiRG8YJD0 (video)
+
+The video ends with a demo that shows a non-trivial example of
+\"executable notes\". The most interesting part of that demo shows how
+to use eev to send commands to an external program - a unix shell,
+being run in interactive mode. Here's a link to that part (the t=938
+tells youtube to jump to 15:38):
+
+ http://www.youtube.com/watch?v=86yiRG8YJD0&t=938
+
+These notes are an attempt - ongoing, and work in progress! - to help
+Windows users with installing Emacs, eev, and Lua, and with trying to
+use Emacs on Windows to send commands to external programs - currently
+first to the crappy shell that comes with Windows, and after that to
+Lua. A future version of these instructions will also include how to
+install Python, how to run it interactively from Emacs, and how to
+send commands to it.
+
+I don't have easy access to Windows machines, so I'm having to ask
+friends to try this for me. Also, Linux/*NIXes are Windows are
+totally different planets - it's common for Windows people, even
+programmers, to have practically zero experience with terminals,
+a.k.a. with \"the Command Line\"... in *NIXes this is so inconceivable
+that after discovering that many Windows programmers don't know how to
+use terminals I spent more than one week trying to figure out how to
+proceed.
+
+Version of these instructions: 2020feb20.
+
+
+
+
+1. Download and install Emacs
+=============================
+Official instructions:
+https://www.gnu.org/software/emacs/download.html#windows
+
+Download one of the .zips below:
+http://gnu.c3sl.ufpr.br/ftp/emacs/windows/emacs-26/
+http://gnu.c3sl.ufpr.br/ftp/emacs/windows/emacs-26/README
+http://gnu.c3sl.ufpr.br/ftp/emacs/windows/emacs-26/emacs-26.3-i686.zip (32
bits)
+http://gnu.c3sl.ufpr.br/ftp/emacs/windows/emacs-26/emacs-26.3-x86_64.zip (64
bits)
+
+then unpack the .zip and create a desktop icon or shortcut to
+<emacsdir>/bin/runemacs.exe.
+
+Note: don't use Emacs25 on Windows - it can't access the package repository!
The details are here:
+https://emacs.stackexchange.com/questions/233/how-to-proceed-on-package-el-signature-check-failure/52823#52823
+
+
+
+
+2. Key sequences and how to quit
+================================
+Most people who use Emacs do many things by using key sequences - for
+example `C-x C-s' to save the current file.
+
+`C-x C-s' is the Emacs notation for \"control-x control-s\". This
+notation is explained here:
+
+ (find-enode \"User Input\" \"<Ctrl>\" \"a\" \"C-a\")
+ (find-enode \"User Input\" \"<Meta>-a\" \"M-a\" \"<Alt>\")
+
+The best way to learn key sequences when you are a beginner is by
+using the menu bar:
+
+ (find-enode \"Menu Bar\")
+
+for example, in the \"File\" menu the last option is:
+
+ Quit C-x C-c
+
+If you type just `C-x' and wait the `C-x' will be displayed in the
+\"Echo area\" at the bottom of the screen. This is explained here:
+
+ (find-enode \"Echo Area\")
+
+ The line at the very bottom of the frame is the \"echo area\". It is
+ used to display small amounts of text for various purposes.
+
+ The echo area is so-named because one of the things it is used
+ for is \"echoing\", which means displaying the characters of a
+ multi-character command as you type. Single-character commands are
+ not echoed. Multi-character commands (*note Keys) are echoed if you
+ pause for more than a second in the middle of a command. Emacs then
+ echoes all the characters of the command so far, to prompt you for
+ the rest. Once echoing has started, the rest of the command echoes
+ immediately as you type it. This behavior is designed to give
+ confident users fast response, while giving hesitant users maximum
+ feedback.
+
+ The echo area is also used to display an \"error message\" when a
+ command cannot do its job. Error messages may be accompanied by
+ beeping or by flashing the screen.
+
+There are several ways to abort a key sequence in the middle. They
+are explained here,
+
+ (find-enode \"Quitting\")
+
+but what I recommend to beginners is: if you are stuck in the middle
+of a key sequence and don't know how to abort it, just go to the
+\"File\" menu, use the option \"Quit\", and restart Emacs.
+
+
+
+
+3. Using M-x and installing eev
+===============================
+We can run commands by name by using `M-x'. `M-x' uses the last line
+of the screen as a \"minibuffer\" - see:
+
+ (find-enode \"Minibuffer\")
+ (find-enode \"Basic Minibuffer\" \"it appears in the echo area\")
+ (find-enode \"M-x\" \"Running Commands by Name\")
+
+To install eev,
+ 1. run `M-x list-packages',
+ 2. select \"eev\" at the list of packages,
+ 3. click on \"install\".
+
+To load eev and enter its tutorial, run
+ `M-x eev-beginner'.
+
+The tutorial looks like this:
+ (find-eev-quick-intro)
+
+
+
+
+4. Understanding buffers and the mode line
+==========================================
+It's good to be able to interpret the mode line - it gives a lot of
+information about where we are. See:
+
+ (find-enode \"Mode Line\")
+
+For example, after running `M-x eev-beginner' the mode line says this:
+
+ -:**- *(find-eev-quick-intro)* Top L1 (Fundamental eev) ---
+
+The best way to understand what each component means is by moving the
+mouse pointer onto it and looking at the help that is displayed. The
+main components in this case are:
+
+ \"**\" - this buffer is read-write and has been modified. See:
+
+ (find-enode \"Mode Line\" \"**\")
+
+ \"*(find-eev-quick-intro)*\" - the name of this buffer.
+
+ A curiosity: this buffer is not associated to a file! If you
+ try to save it with `C-x C-s' or with the \"Save\" option in the
+ \"File\" menu you will get a prompt in the minibuffer that starts
+ with:
+
+ File to save in:
+
+ For more information on buffers and files, see:
+
+ (find-enode \"Mode Line\" \" BUF \" \"name of the buffer\")
+ (find-enode \"Buffers\" \"Most buffers are made by visiting files\")
+ (find-enode \"Basic Files\")
+
+ \"Top L1\" - see:
+
+ (find-enode \"Mode Line\" \"Top\")
+ (find-enode \"Mode Line\" \"line number at point\")
+ (find-enode \"Point\")
+
+ \"(Fundamental eev)\" - see:
+
+ (find-enode \"Mode Line\" \"(MAJOR MINOR)\")
+ (find-enode \"Mode Line\" \"major mode\")
+ (find-enode \"Mode Line\" \"minor modes\")
+
+
+
+
+5. More on modes
+================
+The \"eev\" in the mode line means that the key bindings defined by eev
+are \"active\". The main key bindings of eev are listed here,
+
+ (find-emacs-keys-intro \"1. Basic keys (eev)\")
+
+and if you want more details about whats is an \"active keymap\" you can
+read these sections of the manual:
+
+ (find-enode \"Key Bindings\")
+ (find-enode \"Keymaps\")
+ (find-enode \"Local Keymaps\")
+
+The five main major modes that beginners need to learn about are the
+Fundamental Mode, the Help Mode, the Info Mode, Dired Mode, and Shell
+mode. In the Fundamental Mode most \"basic\" keys are interpreted as
+editing keys - see:
+
+ (find-enode \"Major Modes\" \"Fundamental mode\")
+ (find-enode \"Keymaps\" \"self-inserting character\")
+
+
+
+
+5.1. Eev mode
+-------------
+The three main keys of Eev Mode are these ones:
+
+ M-e - to follow a hyperlink. Mnemonic: \"(e)valuate\"/\"(e)xecute\".
+ See: (find-eev-quick-intro \"2. Evaluating Lisp\")
+ (find-eev-quick-intro \"3. Elisp hyperlinks\")
+ M-j - to jump to certain predefined places. In particular,
+ `M-j' takes you to a buffer with basic help and a
+ list of jump targets. See:
+ (find-eev-quick-intro \"7.2. The list of eejump targets\")
+ `M-2 M-j' takes you to this help page.
+ `M-5 M-j' takes you to: (find-eev-quick-intro)
+ M-k - to go back. Mnemonic: \"(k)ill buffer\".
+ See: (find-eev-quick-intro \"3. Elisp hyperlinks\" \"M-k\")
+
+The text above was taken from:
+
+ (find-emacs-keys-intro \"1. Basic keys (eev)\")
+
+From this point onwards I will suppose that the reader knows how to
+use at least `M-e' and `M-j'.
+
+Note the Eev mode is a global minor mode. The next subsections are
+about the other four main major modes - besides Fundamental mode.
+
+
+
+
+5.2. Help Mode
+--------------
+Most help commands in Emacs display buffers in Help Mode. For
+example, if you run `C-h f Info-mode' or execute one of the sexps
+below
+
+ (find-efunctiondescr 'Info-mode)
+ (find-efunctiondescr 'help-mode)
+ (find-efunctiondescr 'dired-mode)
+
+you will get buffers in Help Mode - they are read-only, and if you
+type `q' in them this be interpreted as `quit' rather than as \"insert
+the character `q'\".
+
+
+
+5.3. Info Mode
+--------------
+The key sequence `C-h r' opens the Emacs manual in Info Mode. This is
+a read-only mode like Help Mode, but more keys become navigation keys.
+The main ones are:
+
+ q Quit Info: reselect previously selected buffer.
+ RET Follow a node reference near point.
+ n Move to the \"next\" node of this node.
+ p Move to the \"previous\" node of this node.
+ u Move \"up\" from this node.
+
+Also, the tool bar changes completely, and it shows icons
+corresponding to the main navigation keys. See:
+
+ (find-enode \"Tool Bars\")
+
+
+
+5.4. Dired Mode
+---------------
+Dired Mode lets you navigate the directory structure. You can enter
+it by typing `C-x C-f RET'. If you type `RET' on a line that shows a
+directory this will be interpreted as \"enter that directory\", and
+`RET' on a line that shows a file is interpreted as \"open that file\".
+See:
+
+ (find-enode \"Dired\")
+ (find-enode \"Dired Enter\" \"C-x C-f\")
+ (find-enode \"ls in Lisp\")
+
+
+
+5.5. Shell Mode
+---------------
+Emacs can run terminals inside its buffers - and by default that
+terminal runs the default shell. In Windows the default shell is
+\"cmd.exe\", that is reminiscent of MS-DOS, and is VERY clumsly. See:
+
+ https://en.wikipedia.org/wiki/Windows_Console
+ https://en.wikipedia.org/wiki/Command-line_interface
+ https://en.wikipedia.org/wiki/MS-DOS#Windows_command-line_interface
+ https://en.wikipedia.org/wiki/Cmd.exe
+ https://en.wikipedia.org/wiki/Batch_file
+ https://en.wikipedia.org/wiki/Terminal_emulator
+
+If you run `M-x shell' you will get a shell buffer. See:
+
+ (find-enode \"Interactive Shell\")
+
+especially this part of the first paragraph:
+
+ To give input to the subshell, go to the end of the buffer and type
+ the input, terminated by <RET>.
+
+As an exercise, try to give these commands to the Windows shell:
+
+ dir
+ cd
+ cd ..
+ dir
+
+
+
+
+6. Lua
+======
+Lua is a programming language that many people - like me - find
+much better and much simpler than Python. The examples of
+\"controlling shell-like programs\" in the main tutorials of eev
+use Python because it comes installed by default in all modern
+*NIXes... see:
+
+ (find-eev-quick-intro \"6.2. Other targets\")
+ (find-eepitch-intro \"1.1. Another target\")
+
+but on Windows Lua is easier to install than Python, so let's
+start by it and leave Python to a second stage.
+
+Try to follow the instructions here:
+
+ (find-windows-eepitch-lua-links nil)
+
+
+[Unfinished!!!]
+
+
+
+
+" pos-spec-list)))
+
+;; (find-windows-beginner-intro)
+
+
+
;;; _ _ _ _
@@ -10675,7 +11483,7 @@ This can also be used to generate links to info nodes.
;;; |___/
;; «find-three-main-keys-intro» (to ".find-three-main-keys-intro")
-;; (find-intro-links "three-main-keys")
+;; Skel: (find-intro-links "three-main-keys")
;; (find-three-main-keys-intro)
;; Used in this video:
@@ -10791,7 +11599,7 @@ line of the block below:
`M-e' accepts several different numeric prefixes that alter its
behavior. We are only interested in one of them now - `M-0 M-e'
-highlights the sexp for a fraction of a second insted of executing it.
+highlights the sexp for a fraction of a second instead of executing it.
Try it above.
Also:
@@ -10958,7 +11766,7 @@ Btw, the videos that I produced using this \"script\"
are here:
;;; |_|
;;
;; «find-what-sexps-can-do-intro» (to ".find-what-sexps-can-do-intro")
-;; (find-intro-links "what-sexps-can-do")
+;; Skel: (find-intro-links "what-sexps-can-do")
(defun find-what-sexps-can-do-intro (&rest pos-spec-list) (interactive)
(let ((ee-buffer-name "*(find-what-sexps-can-do-intro)*"))
@@ -11078,7 +11886,7 @@ wget -nc
http://angg.twu.net/eev-videos/Punch_and_Judy_Mark_Poulton-K6LmZ0A1s9U.
;; «find-creating-links-intro» (to ".find-creating-links-intro")
-;; (find-intro-links "creating-links")
+;; Skel: (find-intro-links "creating-links")
(defun find-creating-links-intro (&rest pos-spec-list) (interactive)
(let ((ee-buffer-name "*(find-creating-links-intro)*"))
@@ -11125,7 +11933,7 @@ The beginner's way of creating \"hyperlinks to here\"
is with:
-;; (find-intro-links "creating-links")
+;; Skel: (find-intro-links "creating-links")
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")
diff --git a/eev-mode.el b/eev-mode.el
index 8304f66..ea9adf8 100644
--- a/eev-mode.el
+++ b/eev-mode.el
@@ -19,7 +19,7 @@
;;
;; Author: Eduardo Ochs <address@hidden>
;; Maintainer: Eduardo Ochs <address@hidden>
-;; Version: 2019oct16
+;; Version: 2020feb20
;; Keywords: e-scripts
;;
;; Latest version: <http://angg.twu.net/eev-current/eev-mode.el>
@@ -118,6 +118,7 @@ and: (find-eval-intro \"`M-k'\")"
;; Source: (find-eev "eev-elinks.el")
(define-key eev-mode-map "\M-h\M-a" 'find-code-audiovideo-links)
(define-key eev-mode-map "\M-h\M-d" 'find-debpkg-links)
+ (define-key eev-mode-map "\M-h\M-e" 'find-extra-file-links)
(define-key eev-mode-map "\M-h\M-f" 'find-efunction-links)
(define-key eev-mode-map "\M-h\M-g" 'find-grep-links)
(define-key eev-mode-map "\M-h\M-h" 'find-here-links)
diff --git a/eev-testblocks.el b/eev-testblocks.el
index 538b921..33e1a04 100644
--- a/eev-testblocks.el
+++ b/eev-testblocks.el
@@ -60,6 +60,7 @@
((eq major-mode 'ruby-mode) (ee-insert-test-ruby))
((eq major-mode 'sh-mode) (ee-insert-test-sh))
((eq major-mode 'tcl-mode) (ee-insert-test-tcl))
+ ((eq major-mode 'idris-mode) (ee-insert-test-idris))
(t (error "ee-insert-test: Unsupported major mode"))))
(defun ee-insert-test-lua ()
@@ -122,6 +123,15 @@ source %s
}
" (buffer-name))))
+(defun ee-insert-test-idris ()
+ (interactive)
+ (insert (format "
+{-
+ (eepitch-to-buffer \"*idris-repl*\")
+
+-}
+" (buffer-name))))
+
diff --git a/eev-tlinks.el b/eev-tlinks.el
index 56b84e1..0fd6f32 100644
--- a/eev-tlinks.el
+++ b/eev-tlinks.el
@@ -1,6 +1,6 @@
;;; eev-tlinks.el --- hyperlinks to temporary buffers generated by templates
-;; Copyright (C) 2013-2019 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2020 Free Software Foundation, Inc.
;;
;; This file is part of GNU eev.
;;
@@ -19,7 +19,7 @@
;;
;; Author: Eduardo Ochs <address@hidden>
;; Maintainer: Eduardo Ochs <address@hidden>
-;; Version: 2019oct14
+;; Version: 2020feb20
;; Keywords: e-scripts
;;
;; Latest version: <http://angg.twu.net/eev-current/eev-tlinks.el>
@@ -41,6 +41,10 @@
;; The functions here are one complexity step above the functions in:
;; (find-eev "eev-elinks.el")
;;
+;; See:
+;; (find-links-conv-intro "3. Classification")
+;; (find-links-conv-intro "3. Classification" "find-elinks")
+
;; NOTE (written in 2019mar05): some of the functions here are very
;; old and ugly and I haven't used them in ages. They will be deleted
;; in the next few months.
@@ -51,25 +55,31 @@
-;; «.ee-copy-rest» (to "ee-copy-rest")
+;; «.ee-copy-rest» (to "ee-copy-rest")
;;
-;; «.find-find-links-links» (to "find-find-links-links")
-;; «.find-intro-links» (to "find-intro-links")
-;; «.find-pdflikedef-links» (to "find-pdflikedef-links")
-;; «.find-eev-header-links» (to "find-eev-header-links")
+;; «.find-find-links-links» (to "find-find-links-links")
+;; «.ee-ffll-functions» (to "ee-ffll-functions")
+;; «.find-find-links-links-new» (to "find-find-links-links-new")
;;
-;; «.find-debpkg-links» (to "find-debpkg-links")
-;; «.find-eev-install-links» (to "find-eev-install-links")
-;; «.find-eev-update-links» (to "find-eev-update-links")
-;; «.find-youtubedl-links» (to "find-youtubedl-links")
-;; «.find-psne-links» (to "find-psne-links")
-;; «.find-git-links» (to "find-git-links")
-;; «.find-apt-get-source-links» (to "find-apt-get-source-links")
-;; «.find-eev-video-links» (to "find-eev-video-links")
+;; «.find-intro-links» (to "find-intro-links")
+;; «.find-pdflikedef-links» (to "find-pdflikedef-links")
+;; «.find-eev-header-links» (to "find-eev-header-links")
;;
-;; «.find-latex-links» (to "find-latex-links")
-;; «.find-lua-links» (to "find-lua-links")
-;; «.find-escreenshot-links» (to "find-escreenshot-links")
+;; «.find-debpkg-links» (to "find-debpkg-links")
+;; «.find-eev-install-links» (to "find-eev-install-links")
+;; «.find-eev-update-links» (to "find-eev-update-links")
+;; «.find-youtubedl-links» (to "find-youtubedl-links")
+;; «.find-psne-links» (to "find-psne-links")
+;; «.find-git-links» (to "find-git-links")
+;; «.find-fossil-links» (to "find-fossil-links")
+;; «.find-apt-get-source-links» (to "find-apt-get-source-links")
+;; «.find-eev-video-links» (to "find-eev-video-links")
+;;
+;; «.find-latex-links» (to "find-latex-links")
+;; «.find-lua-links» (to "find-lua-links")
+;; «.find-escreenshot-links» (to "find-escreenshot-links")
+;; «.find-windows-eepitch-lua-links» (to "find-windows-eepitch-lua-links")
+;; «.find-extra-file-links» (to "find-extra-file-links")
(require 'eev-env)
@@ -202,9 +212,8 @@ See: (find-eev \"eev-tlinks.el\" \"ee-copy-rest\")"
;;;
;;
;; «find-find-links-links» (to ".find-find-links-links")
-;; See:
-;; (find-eev "eev-template.el" "find-find-links-links")
-;; (find-find-links-links "u" "find-links" "k stem args")
+;; See: (find-templates-intro "horrible" "kludge")
+;; Test: (find-find-links-links "u" "find-links" "k stem args")
(defun ee-prepend-commas (str)
(save-match-data
@@ -262,6 +271,141 @@ This is an internal function used by
`find-{stem}-links'.\"
+
+
+;;; __ __ _ _ _
+;;; ___ ___ / _|/ _| | | | __/\__
+;;; / _ \/ _ \_____| |_| |_| | | |_____\ /
+;;; | __/ __/_____| _| _| | | |_____/_ _\
+;;; \___|\___| |_| |_| |_|_|_| \/
+;;;
+;; «ee-ffll-functions» (to ".ee-ffll-functions")
+;; Low-level functions used by find-find-links-links-new.
+;;
+;; The original `find-find-links-links' whas a horrible kludge.
+;; See: (find-templates-intro "horrible" "kludge")
+;; This is an attempt to rewrite it.
+;; It was inspired by discussions with Marc Simpson.
+;; Version (of the ee-ffll-functions and find-find-links-links-new):
+;; 2020jan07.
+;; Status: `find-find-links-links-new' doesn't exist yet, but the
+;; tests below work.
+
+;; Tests:
+;; (ee-ffll-optional "")
+;; (ee-ffll-optional "foo bar")
+;; (ee-ffll-comma-args "plic bletch")
+;; (find-estring (ee-ffll-setqs " " "foo bar"))
+;; (find-estring (ee-ffll-lets " " "foo bar"))
+;; (find-estring-elisp (ee-ffll-defun-without-lets "mytask" "foo bar"))
+;; (find-estring-elisp (ee-ffll-defun-with-lets "mytask" "foo bar" "plc
bltch"))
+;; (find-estring-elisp (ee-ffll-defun "mytask" "foo bar"))
+;; (find-estring-elisp (ee-ffll-defun "mytask" "foo bar" "plic bletch"))
+;;
+(defun ee-ffll-optional (args)
+ (if (< 0 (length (split-string args)))
+ (concat "&optional " args " ")
+ ""))
+
+(defun ee-ffll-setqs (spaces args)
+ (mapconcat (lambda (arg) (format "%s(setq %s (or %s \"{%s}\"))\n"
+ spaces arg arg arg))
+ (split-string args)
+ ""))
+
+(defun ee-ffll-lets (spaces vars)
+ (format "let* (%s)"
+ (mapconcat (lambda (var) (format "(%s \"{%s}\")" var var))
+ (split-string vars)
+ (concat "\n" spaces " "))))
+
+(defun ee-ffll-comma-args (args)
+ (mapconcat (lambda (arg) (format ",%s " arg))
+ (split-string args)
+ ""))
+
+(defun ee-ffll-defun-without-lets (stem args)
+ (let* ((optional (ee-ffll-optional args))
+ (setqs (ee-ffll-setqs " " args))
+ (comma-args (ee-ffll-comma-args args))
+ )
+ (ee-template0 "\
+(defun find-{stem}-links ({optional}&rest pos-spec-list)
+\"Visit a temporary buffer containing hyperlinks for {stem}.\"
+ (interactive)
+{setqs}\
+ (apply
+ 'find-elinks
+ `((find-{stem}-links {comma-args},@pos-spec-list)
+ ;; Convention: the first sexp always regenerates the buffer.
+ (find-efunction 'find-{stem}-links)
+ \"\"
+ ,(ee-template0 \"\\
+\")
+ )
+ pos-spec-list))
+")))
+
+(defun ee-ffll-defun-with-lets (stem args vars)
+ (let* ((optional (ee-ffll-optional args))
+ (setqs (ee-ffll-setqs " " args))
+ (comma-args (ee-ffll-comma-args args))
+ (lets (ee-ffll-lets " " vars))
+ )
+ (ee-template0 "\
+(defun find-{stem}-links ({optional}&rest pos-spec-list)
+\"Visit a temporary buffer containing hyperlinks for {stem}.\"
+ (interactive)
+{setqs}\
+ ({lets}
+ (apply
+ 'find-elinks
+ `((find-{stem}-links {comma-args},@pos-spec-list)
+ ;; Convention: the first sexp always regenerates the buffer.
+ (find-efunction 'find-{stem}-links)
+ \"\"
+ ,(ee-template0 \"\\
+\")
+ )
+ pos-spec-list)))
+")))
+
+(defun ee-ffll-defun (stem args &optional vars)
+ (if (equal vars "") (setq vars nil))
+ (if vars (ee-ffll-defun-with-lets stem args vars)
+ (ee-ffll-defun-without-lets stem args)))
+
+
+;; «find-find-links-links-new» (to ".find-find-links-links-new")
+;; Test: (find-find-links-links-new)
+;;
+(defun find-find-links-links-new (&optional stem args vars &rest pos-spec-list)
+"Visit a temporary buffer containing a skeleton of a find-*-links function."
+ (interactive)
+ (setq stem (or stem "{stem}"))
+ (setq args (or args "{args}"))
+ (setq vars (or vars "{vars}"))
+ (apply 'find-elinks-elisp
+ `((find-find-links-links-new ,stem ,args ,vars ,@pos-spec-list)
+ (find-find-links-links-new "mytask" "foo bar" "" ,@pos-spec-list)
+ (find-find-links-links-new "mytask" "foo bar" "plic bletch"
,@pos-spec-list)
+ ;; Convention: the first sexp always regenerates the buffer.
+ (find-efunction 'find-find-links-links-new)
+ ""
+ ,(ee-template0 ";; <find-{stem}-links>")
+ ,(concat ";; Skel: " (ee-S `(find-find-links-links-new ,stem ,args
,vars)))
+ ";;"
+ ,(ee-ffll-defun stem args vars)
+ )
+ pos-spec-list))
+
+
+
+
+
+
+
+
;;; _ _ _ _ _
;;; (_)_ __ | |_ _ __ ___ | (_)_ __ | | _____
;;; | | '_ \| __| '__/ _ \ _____| | | '_ \| |/ / __|
@@ -289,7 +433,7 @@ See: (find-eev \"eev-intro.el\")"
;; (find-{stem}-intro)
;; <find-{stem}-intro>
-;; (find-intro-links \"{stem}\")
+;; Skel: (find-intro-links \"{stem}\")
\(defun find-{stem}-intro (&rest pos-spec-list) (interactive)
(let ((ee-buffer-name \"*(find-{stem}-intro)*\"))
@@ -1088,9 +1232,10 @@ cd {ee-git-dir}
git clone {url}
cd {dir}
+export PAGER=cat
git branch --list -a
git for-each-ref
-PAGER=cat git log --oneline --graph --all -20
+git log --oneline --graph --all -20
# (find-fline \"{ee-git-dir}\")
# (find-fline \"{dir}\")
@@ -1113,6 +1258,61 @@ PAGER=cat git log --oneline --graph --all -20
+
+;; «find-fossil-links» (to ".find-fossil-links")
+;; Skel: (find-find-links-links-new "fossil" "url subdir c" "")
+;; Test: (find-fossil-links "http://fossil.0branch.com/oorexx-mode")
+;; See: https://fossil-scm.org/
+;;
+(defun ee-fossil-url-stem (url) (ee-git-url-stem url))
+
+(defun find-fossil-links (&optional url subdir c &rest pos-spec-list)
+"Visit a temporary buffer containing hyperlinks for fossil."
+ (interactive (list (ee-url-at-point)))
+ (setq url (or url "{url}"))
+ (setq subdir (or subdir (ee-fossil-url-stem url) "{subdir}"))
+ (setq c (or c (replace-regexp-in-string "[-.]" "" subdir) "{c}"))
+ (apply
+ 'find-elinks
+ `((find-fossil-links ,url ,subdir ,c ,@pos-spec-list)
+ (find-fossil-links "{url}" "{subdir}" "{c}")
+ ;; Convention: the first sexp always regenerates the buffer.
+ (find-efunction 'find-fossil-links)
+ ""
+ ,(ee-template0 "\
+# (find-sh \"fossil help\")
+# (find-sh \"fossil help clone\")
+# (find-sh \"fossil help pull\")
+# (find-sh \"fossil help all\")
+# (find-sh \"fossil help open\")
+
+ (eepitch-shell)
+ (eepitch-kill)
+ (eepitch-shell)
+# rm -fv ~/usrc/fossil-repos/{subdir}.fsl
+mkdir -p ~/usrc/fossil-repos/
+cd ~/usrc/fossil-repos/
+
+fossil clone {url} {subdir}.fsl
+fossil pull {url} -R {subdir}.fsl
+fossil all ls
+
+# cd ~/usrc/{subdir}/ && fossil close
+# rm -Rfv ~/usrc/{subdir}/
+mkdir -p ~/usrc/{subdir}/
+cd ~/usrc/{subdir}/
+fossil open ~/usrc/fossil-repos/{subdir}.fsl
+
+# (code-c-d \"{c}\" \"~/usrc/{subdir}/\")
+# (find-{c}file \"\")
+")
+ )
+ pos-spec-list))
+
+
+
+
+
;;; _ _
;;; __ _ _ __ | |_ __ _ ___| |_ ___ ___ _ _ _ __ ___ ___
;;; / _` | '_ \| __|____ / _` |/ _ \ __|____/ __|/ _ \| | | | '__/ __/ _ \
@@ -1332,6 +1532,8 @@ echo 'http://angg.twu.net/eev-videos/{anggstem}.mp4'
>> ~/.psne.log
;; Tests: (find-latex-links)
;; (find-latex-links "/tmp/foo")
+;; (find-latex-links "/tmp/foo" 2)
+;; (find-latex-links "/tmp/foo" 2 "copy-rest")
@@ -1471,6 +1673,174 @@ dofile \"{fname0}\"
+
+
+;; «find-windows-eepitch-lua-links» (to ".find-windows-eepitch-lua-links")
+;; Skel: (find-find-links-links-new "windows-eepitch-lua" "dir" "")
+;; Test: (find-windows-eepitch-lua-links "/tmp/")
+;;
+(defun find-windows-eepitch-lua-links (&optional dir &rest pos-spec-list)
+"Visit a temporary buffer that helps in setting up `eepitch-lua52's on M$
Windows."
+ (interactive)
+ ;; (setq dir (or dir "{dir}"))
+ (setq dir (or dir default-directory))
+ (apply
+ 'find-elinks-elisp
+ `((find-windows-eepitch-lua-links ,dir ,@pos-spec-list)
+ (find-windows-eepitch-lua-links "{dir}" ,@pos-spec-list)
+ ;; Convention: the first sexp always regenerates the buffer.
+ ;; (find-efunction 'find-windows-eepitch-lua-links)
+ ""
+ ,(ee-template0 "\
+;; Instructions:
+;; To configure the `eepitch-lua52' function on M$ Windows, do this:
+;;
+;; 1) Install ZeroBrane from:
+;; https://studio.zerobrane.com/
+;;
+;; 2) Find the directory inside the ZeroBrane installation that
+;; has the file lua52.exe.
+;;
+;; 3) Open that directory in Emacs using Dired - see:
+;; (find-node \"(emacs)Dired\")
+;; Hints: use RET to enter into a subdirectory; use M-k to go back;
+;; you may start here:
+;; (find-fline \"C:/\")
+;;
+;; 4) Run `M-x find-windows-eepitch-lua-links' there. You should get
+;; a buffer like this one, but with that directory in the first line.
+;; This is like adjusting the parameter of `find-latex-links',
+;; but the value of \"{<}dir{>}\" is set to the current directory. See:
+;; (find-eev-quick-intro \"7.5. `find-latex-links'\")
+;;
+;; 5) Test if you've got the correct \"{<}dir{>}\". If you got it
+;; right then the sexp below should open that directory and go to
+;; line where the \"lua52.exe\" is:
+;; (find-fline \"{dir}\" \"lua52.exe\")
+;;
+;; 6) Try the sexp below - it is a low-level test to see a) if our
+;; current path to \"lua52.exe\" is the right one AND b) if we can run
+;; that \"lua52.exe\" as a \"shell-like program\" in a target buffer.
+;; These ideas are explained here,
+;; (find-eev-quick-intro \"6.1. The main key: <F8>\")
+;; (find-eepitch-intro \"1.1. Another target\")
+;; and the test sexp is:
+;; (eepitch-comint \"lua52\" \"{dir}lua52.exe\")
+;;
+;; 7) If you got a prompt like this one
+;;
+;; Lua 5.2.4 Copyright (C) 1994-2015 Lua.org, PUC-Rio
+;; >
+;;
+;; in the right window in the test in item (6) then everything is
+;; working. If you didn't get a prompt like that then you NEED to run
+;; this before performing another test:
+;; (eepitch-kill)
+;;
+;; 8) Override the current definition of eepitch-lua52 by running this:
+
+(defun eepitch-lua52 () (interactive)
+ (eepitch-comint \"lua52\"
+ \"{dir}lua52.exe\"))
+
+;; Note that it is a 3-line sexp! If you execute it with `M-e'
+;; the result in the echo area should be \"eepitch-lua52\".
+;;
+;; 9) Test if the eepitch block below works: run it by typing
+;; `<f8>'s on its three red star lines, and then `<f8>'s on its three
+;; non-red star lines.
+
+ (eepitch-lua52)
+ (eepitch-kill)
+ (eepitch-lua52)
+print(2+3)
+for i=2,20,3 do print(i) end
+os.exit()
+
+")
+ )
+ pos-spec-list))
+
+
+
+
+
+;; «find-extra-file-links» (to ".find-extra-file-links")
+;; Skel: (find-find-links-links-new "extra-file" "fname c" "dir")
+;;
+(defun find-extra-file-links (&optional fname c &rest pos-spec-list)
+"Visit a temporary buffer containing hyperlinks for extra-file."
+ (interactive (list (and (eq major-mode 'dired-mode) (ee-dired-to-fname))))
+ (if fname (setq fname (ee-shorten-file-name fname)))
+ (setq fname (or fname "{fname}"))
+ (setq c (or c "{c}"))
+ (let* ((dir (file-name-directory fname)))
+ (apply
+ 'find-elinks-elisp
+ `((find-extra-file-links ,fname ,c ,@pos-spec-list)
+ ;; Convention: the first sexp always regenerates the buffer.
+ ;; (find-efunction 'find-extra-file-links)
+ ;; ""
+ ,(ee-template0 "\
+;; See: (find-eev-quick-intro \"9.1. `code-c-d'\")
+;; (find-pdf-like-intro \"9. Generating three pairs\" \"`M-h M-p'\")
+;; (find-audiovideo-intro \"2.1. `find-extra-file-links'\")
+
+;; Links to this directory:
+;; (find-fline {(ee-S (file-name-directory fname))})
+\(code-c-d \"{c}\" \"{(file-name-directory fname)}\")
+;; (find-{c}file \"\")
+
+;; Links to a PDF file:
+;; (find-pdf-page \"{fname}\")
+;; (find-pdf-text \"{fname}\")
+\(code-pdf-page \"{c}\" \"{fname}\")
+\(code-pdf-text \"{c}\" \"{fname}\")
+;; (find-{c}page)
+;; (find-{c}text)
+
+;; Links to an audio file:
+;; (find-audio \"{fname}\")
+\(code-audio \"{c}audio\" \"{fname}\")
+;; (find-{c}audio)
+;; (find-{c}audio \"0:00\")
+
+;; Links to a video file:
+;; (find-video \"{fname}\")
+\(code-video \"{c}video\" \"{fname}\")
+;; (find-{c}video)
+;; (find-{c}video \"0:00\")
+;;
+;; (eev-avadj-mode 0)
+;; (eev-avadj-mode)
+
+;; Links to an shell-like program (for eepitch):
+;; (eepitch-comint \"{c}\" \"{fname}\")
+
+(defun eepitch-{c} () (interactive)
+ (eepitch-comint \"{c}\"
+ \"{fname}\"))
+
+;; Test:
+
+ (eepitch-{c})
+ (eepitch-kill)
+ (eepitch-{c})
+")
+ )
+ pos-spec-list)))
+
+;; Tests:
+;; (find-extra-file-links "~/eev-videos/three-keys-2.mp4")
+
+
+
+
+
+
+
+
+
(provide 'eev-tlinks)
- [elpa] externals/eev 5833336 03/14: Quote function names like this: `foo', (continued)
- [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, 2020/02/24
- [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 <=