emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/eev ca979de 9/9: Merge remote-tracking branch 'eev/UTF-


From: Stefan Monnier
Subject: [elpa] externals/eev ca979de 9/9: Merge remote-tracking branch 'eev/UTF-8' into externals/eev
Date: Thu, 25 Apr 2019 09:40:25 -0400 (EDT)

branch: externals/eev
commit ca979de007fef18255f09021461677227775f0d1
Merge: 9e6d5bc 340be0a
Author: Stefan Monnier <address@hidden>
Commit: Stefan Monnier <address@hidden>

    Merge remote-tracking branch 'eev/UTF-8' into externals/eev
---
 ChangeLog        |  39 +++++
 VERSION          |   4 +-
 eev-anchors.el   |   4 +-
 eev-blinks.el    |  31 +++-
 eev-code.el      |   1 -
 eev-env.el       |   1 -
 eev-eval.el      |   1 -
 eev-intro.el     | 515 ++++++++++++++++++++++++++++++++++++++++---------------
 eev-mode.el      |   1 -
 eev-plinks.el    |   1 -
 eev-prepared.el  |   1 -
 eev-rcirc.el     | 249 +++++++++++++++++++--------
 eev-template0.el |   1 -
 eev-tlinks.el    |   1 -
 eev.el           |   2 +-
 15 files changed, 635 insertions(+), 217 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 447eee9..f549a0e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,42 @@
+2019-04-14  Eduardo Ochs  <address@hidden>
+
+       * eev-intro.el (find-rcirc-intro): rewrote completely.
+
+       * eev-rcirc.el: rewrote all comments and some docstrings.
+       (ee-irc-channel-around-point): commented out.
+       (ee-buffer-freenode-channel-name): commented out.
+       (find-freenode-links): small changes.
+
+2019-04-13  Eduardo Ochs  <address@hidden>
+
+       * eev-intro.el (find-eval-intro): new sections: "10.1.
+       Byte-compiled functions", "10.2. How `find-efunction' works", and
+       "10.3. Why eev avoids byte-compilation".
+
+       * eev-blinks.el (find-eloadhistory0, find-eloadhistory): new
+       functions.
+
+2019-04-09  Eduardo Ochs  <address@hidden>
+
+       * eejump.el, eev-anchors.el, eev-audiovideo.el, eev-beginner.el,
+       eev-blinks.el, eev-brxxx.el, eev-channels.el, eev-code.el,
+       eev-codings.el, eev-edit.el, eev-elinks.el, eev-env.el,
+       eev-eval.el, eev-flash.el, eev-intro.el, eev-load.el, eev-mode.el,
+       eev-multiwindow.el, eev-pdflike.el, eev-plinks.el,
+       eev-prepared.el, eev-rcirc.el, eev-readme.el, eev-template0.el,
+       eev-tlinks.el, eev.el, eev2-all.el: fixed the copyright years to a
+       single range and rewrote the "(not yet?) part of GNU eev" to "part
+       of GNU eev".
+
+2019-04-08  Eduardo Ochs  <address@hidden>
+
+       * eev.el: new file.
+
+       * .gitignore: new file.
+
+       * eev-anchors.el (ee-anchor-format): autoload its status as as
+       safe local variable.
+
 2019-04-06  Eduardo Ochs  <address@hidden>
 
        * eev-intro.el (find-eev-install-intro): added an explanation of
diff --git a/VERSION b/VERSION
index 9fa000d..63f9b9a 100644
--- a/VERSION
+++ b/VERSION
@@ -1,2 +1,2 @@
-Sun Apr  7 02:05:04 GMT 2019
-Sat Apr  6 23:05:04 -03 2019
+Sun Apr 14 17:08:11 GMT 2019
+Sun Apr 14 14:08:11 -03 2019
diff --git a/eev-anchors.el b/eev-anchors.el
index 3828bc1..eccefb6 100644
--- a/eev-anchors.el
+++ b/eev-anchors.el
@@ -76,7 +76,8 @@
 ;;;                                                                            
 
 (defvar ee-anchor-format "«%s»" "See `ee-goto-anchor'.")
-(put   'ee-anchor-format 'safe-local-variable 'stringp)
+;;;###autoload
+(put   'ee-anchor-format 'safe-local-variable #'stringp)
 
 ;; A paranoid setting would be:
 ;; (defvar ee-anchor-format nil "See `ee-goto-anchor'.")
@@ -165,6 +166,5 @@ See `ee-goto-anchor'."
 
 ;; Local Variables:
 ;; coding:            utf-8-unix
-;; ee-anchor-format:  "«%s»"
 ;; no-byte-compile:   t
 ;; End:
diff --git a/eev-blinks.el b/eev-blinks.el
index 968ecb8..18bad9e 100644
--- a/eev-blinks.el
+++ b/eev-blinks.el
@@ -21,7 +21,7 @@
 ;;
 ;; Author:     Eduardo Ochs <address@hidden>
 ;; Maintainer: Eduardo Ochs <address@hidden>
-;; Version:    2019apr06
+;; Version:    2019apr13
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://angg.twu.net/eev-current/eev-blinks.el>
@@ -56,6 +56,7 @@
 ;; «.find-w3m»                 (to "find-w3m")
 ;; «.find-Package»             (to "find-Package")
 ;; «.find-epp»                 (to "find-epp")
+;; «.find-eloadhistory»                (to "find-eloadhistory")
 ;; «.find-einternals»          (to "find-einternals")
 ;; «.find-einsert»             (to "find-einsert")
 ;; «.find-eunicode»            (to "find-eunicode")
@@ -775,6 +776,34 @@ explicitly. Try this: (progn (message \"foo\") \"bar\")"
 
 
 
+;;;  _                 _       _     _     _                   
+;;; | | ___   __ _  __| |     | |__ (_)___| |_ ___  _ __ _   _ 
+;;; | |/ _ \ / _` |/ _` |_____| '_ \| / __| __/ _ \| '__| | | |
+;;; | | (_) | (_| | (_| |_____| | | | \__ \ || (_) | |  | |_| |
+;;; |_|\___/ \__,_|\__,_|     |_| |_|_|___/\__\___/|_|   \__, |
+;;;                                                      |___/ 
+;; «find-eloadhistory» (to ".find-eloadhistory")
+;; Display entries in the `load-history' alist.
+;; See: (find-eval-intro "10.2. How `find-efunction' works")
+;;      (find-elnode "Where Defined" "load-history")
+
+;; Tests: (find-eloadhistory0 (locate-library "eepitch"))
+;;        (find-eloadhistory0 (symbol-file 'eepitch-kill))
+(defun find-eloadhistory0 (fname &rest pos-spec-list)
+  "Hyperlink to the load-history entry for FNAME.
+FNAME must be an absolute file name."
+  (apply 'find-epp (assoc fname load-history)
+        pos-spec-list))
+
+;; Tests: (find-eloadhistory "eepitch")
+;;        (find-eloadhistory "eepitch" "eepitch-dash")
+(defun find-eloadhistory (library &rest pos-spec-list)
+  "Hyperlink to the load-history entry for LIBRARY.
+LIBRARY is converted to an absolute file name using `locate-library'."
+  (apply 'find-epp (assoc (locate-library library) load-history)
+        pos-spec-list))
+
+
 
 
 ;;;                                   _       _                        _     
diff --git a/eev-code.el b/eev-code.el
index dbacc35..072531d 100644
--- a/eev-code.el
+++ b/eev-code.el
@@ -350,6 +350,5 @@ Note: the POS-SPEC-LIST arguments are currently not used."
 
 ;; Local Variables:
 ;; coding:            utf-8-unix
-;; ee-anchor-format:  "«%s»"
 ;; no-byte-compile:   t
 ;; End:
diff --git a/eev-env.el b/eev-env.el
index edc42fd..649668a 100644
--- a/eev-env.el
+++ b/eev-env.el
@@ -139,6 +139,5 @@ See the source for details, examples, and tests."
 
 ;; Local Variables:
 ;; coding:            utf-8-unix
-;; ee-anchor-format:  "«%s»"
 ;; no-byte-compile:   t
 ;; End:
diff --git a/eev-eval.el b/eev-eval.el
index 482bb07..8e4334e 100644
--- a/eev-eval.el
+++ b/eev-eval.el
@@ -217,6 +217,5 @@ See: (find-eval-intro)"
 
 ;; Local Variables:
 ;; coding:            utf-8-unix
-;; ee-anchor-format:  "«%s»"
 ;; no-byte-compile:   t
 ;; End:
diff --git a/eev-intro.el b/eev-intro.el
index f11fd4c..007601b 100644
--- a/eev-intro.el
+++ b/eev-intro.el
@@ -19,7 +19,7 @@
 ;;
 ;; Author:     Eduardo Ochs <address@hidden>
 ;; Maintainer: Eduardo Ochs <address@hidden>
-;; Version:    2019apr06
+;; Version:    2019apr14
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://angg.twu.net/eev-current/eev-intro.el>
@@ -1960,28 +1960,49 @@ incompatible with our convention of creating a script 
called
 
 5. Eev as an ELPA/MELPA package
 ===============================
-In march 2019 I prepared a first version of an \"emacs package\"
-for eev to make it installable by `M-x list-packages' - see:
+In march 2019 I prepared a first version of an emacs package for
+eev to make it installable by `M-x list-packages' - see:
 
   (find-enode    \"Packages\")
   (find-efaqnode \"Packages that do not come with Emacs\")
 
-and sent it to the emacs-devel mailing list. Apparently it could
-go into GNU ELPA, but the developers requested several changes in
-the code, and some of them go against some important design
-decisions. I will discuss them here.
+and submitted it to the emacs-devel mailing list:
+
+  http://lists.gnu.org/archive/html/emacs-devel/2019-03/msg00433.html
+
+Stefan Monnier answered, and the rest of the discussion happened
+off-list. Apparently eev could go into GNU ELPA, but some changes
+and clean-ups were needed. I implemented most of what he
+proposed/requested, but three of the things that he asked for
+would demand changes that would make eev far less elegant and far
+less useful for beginners... in rough terms, the code should 1)
+be byte-compilable, 2) be compatible with lexical binding, and 3)
+have all the autoloads. My reasons for not complying - or for not
+complying NOW - are explained in the subsections below.
+
+I will try to submit eev to MELPA in the next few days - in
+mid-april 2019. I have the feeling that the issues blocking it
+from going into ELPA will take a few years to be solved.
+
+Btw: except for Stefan's e-mails ***100%*** the feedback that I
+received about eev in the last three years came from beginners.
+I am not willing to make changes that will make eev
+beginner-UNfriendly.
+
 
 
 
 5.1. Byte-compilation
 ---------------------
-All eev source files have a \"no-byte-compile: t\" in their local
-variables section. See:
+In standard packages all elisp files should be byte-compilable
+unless there is a very strong reason - but all eev source files
+have a \"no-byte-compile: t\" in their local variables section.
+See:
 
   (find-eevgrep \"grep --color -nH -e no-byte-compile: *.el\")
   (find-elnode \"Byte Compilation\" \"no-byte-compile: t\")
 
-Here is the reason. Each call to a `code-*' function defines some
+Here is why. Each call to a `code-*' function defines some
 functions dynamically - for example, `(code-c-d \"e\" ...)'
 defines `find-efile' - and the best way to inspect a function
 defined in this way is by using `find-functionpp'. Try:
@@ -2017,46 +2038,59 @@ have a reasonable corpus of functions for which
 `find-efunctionpp' shows something readable, which is good to
 help them understand the innards of Emacs.
 
-My view is that we have a \"new\" Emacs, that enforces
-byte-compilation and uses several data structures that are
-relatively opaque, built on top on an \"old\" Emacs that uses lots
-of simpler data structures, but in which many things are messier
-and more error-prone. I would love to add to eev functions to
-inspect these new data structures, but the \"old\" Emacs is the one
-that made me fell in love with Free Software and that made me
-spend years trying to convert people... and one of the underlying
-messages of eev is \"look, you can still use these simpler
-things\". Maybe I'm using \"simpler\" in a sense that is not very
-usual, so let me quote a paragraph from an article that I wrote
-about implementing a Forth in Lua:
-
-  \"I've met many people over the years who have been Forth
-  enthusiasts in the past, and we often end up discussing what
-  made Forth so thrilling to use at that time - and what we can
-  do to adapt its ideas to the computers of today. My personal
-  impression is that Forth's main points were not the ones that I
-  listed at the beginning of this section, and that I said that
-  were easy to quantify; rather, what was most important was that
-  nothing was hidden, there were no complex data structures
-  around with \"don't-look-at-this\" parts (think on garbage
-  collection in Lua, for example, and Lua's tables - beginners
-  need to be convinced to see these things abstractly, as the
-  concrete details of the implementation are hard), and
-  everything - code, data, dictionaries, stacks - were just
-  linear sequences of bytes, that could be read and modified
-  directly if we wished to. We had total freedom, defining new
-  words was quick, and experiments were quick to make; that gave
-  us a sense of power that was totally different from, say, the
-  one that a Python user feels today because he has huge
-  libraries at his fingertips.\"
+Here is an excerpt of one of my e-mails to Stefan:
+
+  I have the impression - please correct me if I'm wrong - that
+  you're proposing to replace the `find-efunctionpp' by something
+  more modern. My view is that we have a \"new\" Emacs, that
+  enforces byte-compilation and uses several data structures that
+  are relatively opaque, built on top on an \"old\" Emacs that
+  uses lots of simpler data structures, but in which many things
+  are messier and more error-prone. I would love to add to eev
+  functions to inspect these new data structures, but the \"old\"
+  Emacs is the one that made me fell in love with Free Software
+  and that made me spend years trying to convert people... and
+  one of the underlying messages of eev is \"look, you can still
+  use these simpler things\". Maybe I'm using \"simpler\" in a
+  sense that is not very usual, so let me quote a paragraph from
+  an article that I wrote about implementing a Forth in Lua:
+
+    \"I've met many people over the years who have been Forth
+    enthusiasts in the past, and we often end up discussing what
+    made Forth so thrilling to use at that time - and what we can
+    do to adapt its ideas to the computers of today. My personal
+    impression is that Forth's main points were not the ones that
+    I listed at the beginning of this section, and that I said
+    that were easy to quantify; rather, what was most important
+    was that nothing was hidden, there were no complex data
+    structures around with \"don't-look-at-this\" parts (think on
+    garbage collection in Lua, for example, and Lua's tables -
+    beginners need to be convinced to see these things
+    abstractly, as the concrete details of the implementation are
+    hard), and everything - code, data, dictionaries, stacks -
+    were just linear sequences of bytes, that could be read and
+    modified directly if we wished to. We had total freedom,
+    defining new words was quick, and experiments were quick to
+    make; that gave us a sense of power that was totally
+    different from, say, the one that a Python user feels today
+    because he has huge libraries at his fingertips.\"
 
     (From: http://angg.twu.net/miniforth-article.html)
 
 
 
+
 5.2. Dynamic binding
 --------------------
-See the comments in:
+Dependency on dynamic binding should be avoided - see:
+
+  (find-elnode \"Dynamic Binding\")
+  (find-elnode \"Dynamic Binding Tips\")
+  (find-elnode \"Lexical Binding\")
+
+but the main function that eev uses for template strings is
+intrinsically incompatible with lexical binding. See the comments
+in its source file:
 
   (find-eev \"eev-template0.el\")
 
@@ -2065,7 +2099,8 @@ See the comments in:
 5.3. Autoloads
 --------------
 I decided to mark only one function in eev as autoloadable -
-instead of hundreds. See the comments in:
+instead of hundreds - and this is very non-standard. See the
+comments in:
 
   (find-eev \"eev-load.el\")
 
@@ -2598,8 +2633,181 @@ keep the instructions visible.
 
 
 
-What else?
-==========
+10. More on functions
+=====================
+A symbol - for example `f' - can be both a varible and a
+function; its \"value as a variable\" and its \"value as a
+function\" are stored in different places. Try:
+
+  (setq f 2)
+  (setq f 5)
+  (defun f (x) (* x x))
+  (defun f (x) (* 10 x))
+  (symbol-value    'f)
+  (symbol-function 'f)
+
+This is explained here:
+
+  (find-elnode \"Symbol Components\")
+  (find-elnode \"Symbol Components\" \"value cell\")
+  (find-elnode \"Symbol Components\" \"function cell\")
+
+The content of a \"function cell\" is _usually_ a lambda
+expression. See:
+
+  (find-elnode \"Lambda Expressions\")
+  (find-elnode \"What Is a Function\")
+  (find-elnode \"What Is a Function\" \"lambda expression\")
+  (find-elnode \"What Is a Function\" \"byte-code function\")
+
+Try:
+
+  (setq f 2)
+  (setq f 5)
+  (set 'f 2)
+  (set 'f 5)
+  (fset 'f (lambda (x) (* x x)))
+  (fset 'f (lambda (x) (* 10 x)))
+  (defun f (x) (* 10 x))
+  (defun f (x) (* x x))
+  (symbol-value    'f)
+  (symbol-function 'f)
+  (f 4)
+  (f f)
+
+  ((lambda (x) (* x x))
+   4)
+  ((lambda (x) (* 10 x))
+   4)
+
+
+
+10.1. Byte-compiled functions
+-----------------------------
+Most functions in Emacs are byte-compiled - which means that
+their function cells contain a \"byte-code\" instead of a lambda
+expression. These byte-codes are very hard for humans to read.
+See:
+
+  (find-elnode \"What Is a Function\" \"byte-code function\")
+  (find-elnode \"Byte-Code Type\")
+  (find-elnode \"Byte Compilation\")
+  (find-elnode \"Disassembly\")
+
+Here is an example:
+
+  (find-efunctiondescr 'find-file)
+  (find-efunction      'find-file)
+  (symbol-function     'find-file)
+  (find-efunctionpp    'find-file)
+  (find-efunctiond     'find-file)
+
+The `find-efunctionpp' link above takes the content of the
+function cell of `find-file' and \"pretty-prints\" it, i.e.,
+indents it in a nice way, but the result in this case is
+unreadable... and the `find-efunctiond' link shows a decompiled
+version of that byte-code, which is only slightly better. Both
+the `find-efunctionpp' and the `find-efunctiond' links show
+internal representations that are very different from the source
+code. Compare that with a case in which the function is not
+byte-compiled:
+
+  (find-efunctiondescr 'find-fline)
+  (find-efunction      'find-fline)
+  (symbol-function     'find-fline)
+  (find-efunctionpp    'find-fline)
+
+The `(find-efunctionpp 'find-fline)' shows a lambda expression
+that is very similar to the defun that defined `find-fline'.
+
+
+
+
+10.2. How `find-efunction' works
+--------------------------------
+Eev defines hyperlink functions called `find-efunction',
+`find-evariable' and `find-eface' that are wrappers around the
+standard functions `find-function', `find-variable' and
+`find-face-definition'; the eev variants support pos-spec-lists.
+Try:
+
+  (find-efunction 'find-fline)
+  (find-function  'find-fline)
+  (find-evariable 'ee-hyperlink-prefix)
+  (find-variable  'ee-hyperlink-prefix)
+  (find-eface           'eepitch-star-face)
+  (find-face-definition 'eepitch-star-face)
+
+The Emacs functions are defined here:
+
+  (find-efile \"emacs-lisp/find-func.el\")
+
+Their inner workings are quite complex. They use `symbol-file',
+that works on the variable `load-history'. Here are some links to
+documentation and tests:
+
+  (find-efunctiondescr 'symbol-file)
+  (find-elnode \"Where Defined\")
+  (symbol-file 'find-fline          'defun)
+  (symbol-file 'ee-hyperlink-prefix 'defvar)
+  (symbol-file 'eepitch-star-face   'defface)
+  (find-epp (assoc (locate-library \"eepitch\") load-history))
+
+The functions in \"find-func.el\" use `symbol-file' to find the
+file where a given symbol was defined, and then search a defun,
+defvar of defface in it that _may be_ the definition that we are
+looking for. The eev variants use the functions
+`find-function-noselect', `find-variable-noselect' and
+`find-definition-noselect' from \"find-func.el\", that return a
+pair (BUFFER . POS). Try:
+
+  (find-efunctiondescr 'find-function-noselect)
+  (find-efunctiondescr 'find-variable-noselect)
+  (find-efunctiondescr 'find-definition-noselect)
+
+  (find-ebufferandpos (find-function-noselect 'find-fline)
+   )
+  (find-ebufferandpos (find-variable-noselect 'ee-hyperlink-prefix)
+   )
+  (find-ebufferandpos (find-definition-noselect 'eepitch-star-face 'defface)
+   )
+
+These `find-*-select' functions work quite well but are not 100%
+reliable - for example, if an elisp file has several definitions
+for the same function, variable, or face, the `find-*-select's
+don't know which ones were executed, neither which one was
+executed last, overriding the other ones... and it may return the
+position of a defun, defvar, or defface that is not the
+\"active\" one.
+
+
+
+
+10.3. Why eev avoids byte-compilation
+-------------------------------------
+All the source files of eev have a \"no-byte-compile: t\" in
+them. See:
+
+  (find-eevgrep \"grep --color -nH -e no-byte-compile: *.el\")
+  (find-elnode \"Byte Compilation\" \"no-byte-compile: t\")
+
+This is non-standard, but it is a deliberate design choice.
+
+(TODO: explain the three main reasons: it is easier to teach
+emacs to beginners if they see lots of lambda expressions and few
+byte-codes; `code-c-d' and friends define functions dynamically
+and `find-efunction' don't work on them; in a distribution with
+only the \".elc\"s of eev users wouldn't have access to the
+documentation and examples in the comments of the source files.)
+
+
+
+
+
+
+
+11. What else?
+==============
 Eev-mode defines several other key sequences similar to `M-h
 M-i'. You can get the full list here:
 
@@ -6180,120 +6388,159 @@ Is is meant as both a tutorial and a sandbox.
 
 Recent versions with Emacs come with two IRC clients built-in:
 Rcirc and ERC. I never understood ERC well enough, and I found
-Rcirc quite easy to understand and to hack, so eev has some
-support for Rcirc (and no support for ERC).
+rcirc quite easy to understand and to hack, so eev has some
+support for rcirc (and no support for ERC).
 
+  (find-node \"(rcirc)Top\")
+  (find-node \"(erc)Top\")
 
+The eev support for rcirc consists mainly of three high-level
+functions that connect to Freenode (the IRC server where most
+discussion of free software projects happen), called
+`find-freenode', `find-freenode-2a' and `find-freenode-3a'.
 
-1. The server buffer and the channel buffers
-============================================
-If you type `M-6 M-6 M-j' - or `M-e' on the line below - then eev
-runs this,
 
-  (find-freenode-3a \"#eev\")
 
-which tells Emacs to connect to Freenode and to the channel #eev,
-using this window setting:
-
-   _________________________
-  |           |             |
-  |           |   Freenode  |
-  |           |    server   |
-  |           |   messages  |
-  |  current  |_____________|    
-  |  buffer   |             |
-  |           |    #eev     |
-  |           |   channel   |
-  |           |             |
-  |___________|_____________|
-
-You will then be able to watch the process of connecting to
-Freenode, which takes about 20s on my machine, by the messages
-that will appear at the Freenode server buffer; at some point
-rcirc will be allowed by the server to connect to channels, it
-will request to connect to the channel #eev, and some login
-messages, plus at list of all users connected to #eev and a
-prompt, will appear at the #eev channel buffer.
-
-`M-66j' is mostly for establishing a connection to an IRC server
-and watching if any errors occur; once we know that we are
-connected we can use `M-6j' - with just one `M-6' - which just
-takes us to the #eev channel without changing the current window
-configuration. A mnemonic: `M-66j', which is one keypress longer,
-is to be used less often - essentially only once per session, or
-when we want to check the status of our connection to Freenode.
-
-
-
-
-2. Messages and commands
-========================
-IRC is a command-line-ish protocol, in which lines starting with
-\"/\" are treated as commands and other lines as messages. A
-message typed at the #eev channel buffer is broadcast to all
-other users also connected to #eev; some commands, like
 
-  /join #emacs
+1. The example the I use in workshops
+=====================================
+Let's start with an example. In
 
-work in the same way no matter where they are typed, while
-others, like for example \"/part\", work differently when typed
-in #eev than when in #emacs. See:
+  (setq rcirc-default-nick \"hakuryo\")
+  (setq ee-freenode-ichannels \"#eev\")
+  (find-freenode-3a \"#eev\")
 
+the first sexp tells rcirc to use the nickname \"hakuryo\" when
+connecting to an IRC server; the second sets the set of \"initial
+channels\" on Freenode to just one channel, #eev - a channel that
+is usually empty, but that doesn't require authentication; the
+third sexp is a \"sexp hyperlink to the Freenode channel #eev\".
+The third sexp:
+
+  1) creates a window setting like this,
+
+       _________________________
+      |           |             |
+      |           |   Freenode  |
+      |           |    server   |
+      |           |   messages  |
+      |  current  |_____________|    
+      |  buffer   |             |
+      |           |    #eev     |
+      |           |   channel   |
+      |           |             |
+      |___________|_____________|
+
+  2) tells rcirc to connect to Freenode and to the channel #eev
+     in it,
+
+  3) makes the window at the left - window \"A\" in the
+     terminology of eev-multiwindow.el - the active window. See:
+
+       (find-multiwindow-intro \"3. High-level words\")
+       (find-multiwindow-intro \"3. High-level words\" \"find-3a\")
+
+The connection process takes time - about 20 seconds at my
+machine - but you will be able to see in window \"B\" the server
+messages as they appear, and in window \"C\" the messages of the
+#eev channel. You can then use the window \"C\" to interact with
+the other users in #eev, and to experiment with commands. See:
+
+  (find-rcircnode \"Internet Relay Chat\" \"Once you have joined a channel\")
+  (find-rcircnode \"Getting started with rcirc\" \"To talk in a channel\")
   (find-rcircnode \"rcirc commands\" \"/join #emacs\")
-  (find-rcircnode \"rcirc commands\" \"/part\")
 
 
 
-3. Other channels
-=================
 
-where `find-freenode-3a' is based on `find-3a', described here:
+2. The two-window setting
+=========================
+Try this:
+
+  (find-freenode-2a \"#eev\")
 
-  (find-multiwindow-intro \"High-level words\")
+It creates a window setting like
 
-  (find-eev \"eev-rcirc.el\")
+   _________ ________
+  |         |        |
+  |         |        |
+  | current |  irc   |
+  | buffer  | buffer |
+  |         |        |
+  |_________|________|
 
+which is nice for when you don't want to follow the irc server
+messages.
 
 
-4. If you are new to IRC
-========================
-Most of the discussions between Free Software developers still
-happen in IRC channels, and mostly at Freenode. The best way to
-understand what IRC is - for modern people, I mean - is probably
-to try this first:
 
-  http://webchat.freenode.net/
 
-IRC is a command-line-ish protocol, in which lines starting with
-\"/\" are treated as commands and other lines are messages to be
-broadcast. Try to \"/join\" the channels \"#emacs\" and \"#eev\",
-with \"/join #emacs\" and \"/join #eev\"; in that webchat, try to
-switch between the channels you're connected to by clicking on
-the tabs at the top - and note that there is also a tab for a
-channel-ish thing that has only messages from the server. Try
-also to leave these channels with \"/part\", \"/part #emacs\",
-\"/part #eev\".
+3. Tracking activity
+====================
+TODO: explain this:
 
-In Rcirc each one of these channels, including the server
-channel, becomes an Emacs buffer. The names of these buffers will
-be:
+  (find-rcircnode \"Channels\" \"M-x rcirc-track-minor-mode\")
 
-  *irc.freenode.net*
-  address@hidden
-  address@hidden
+and how to use it as a one-window setting. Also:
 
-  (defun eejump-66 () (find-freenode-3a \"#eev\"))
+  (find-efunctiondescr 'rcirc-track-minor-mode)
+  (find-efunction      'rcirc-track-minor-mode)
+  (find-evariable      'rcirc-track-minor-mode-map)
+  (find-ekeymapdescr    rcirc-track-minor-mode-map)
 
-For more information see:
+  (find-efunctiondescr 'rcirc-next-active-buffer)
+  (find-efunction      'rcirc-next-active-buffer)
 
-  (find-node \"(rcirc)Top\")
-  (find-node \"(rcirc)Internet Relay Chat\")
-  (find-node \"(rcirc)rcirc commands\")
-  httpa://www.emacswiki.org/emacs/RcIrc
-  http://www.irchelp.org/
+  (global-set-key [f2] 'rcirc-next-active-buffer)
 
-  (find-node \"(erc)Top\")
-  http://www.emacswiki.org/emacs/ErC
+
+
+
+4. Commands with very short names
+=================================
+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,
+#emacs, #git and #ruby, you can run this, or put these lines in
+your .emacs:
+
+  (setq rcirc-default-nick \"hakuryo\")
+  (defun e2 () (interactive) (find-freenode-2a \"#eev\"))
+  (defun e3 () (interactive) (find-freenode-3a \"#eev\"))
+  (defun m2 () (interactive) (find-freenode-2a \"#emacs\"))
+  (defun m3 () (interactive) (find-freenode-3a \"#emacs\"))
+  (defun g2 () (interactive) (find-freenode-2a \"#git\"))
+  (defun g3 () (interactive) (find-freenode-3a \"#git\"))
+  (defun r2 () (interactive) (find-freenode-2a \"#ruby\"))
+  (defun r3 () (interactive) (find-freenode-3a \"#ruby\"))
+
+
+
+
+5. `find-freenode-links'
+========================
+You can generate lines like the ones above by running
+`find-freenode-links'. For example:
+
+  (find-freenode-links \"e\" \"#eev\")
+  (find-freenode-links \"r\" \"#ruby\")
+
+
+
+6. Other servers
+================
+TODO: explain how to use find-rcirc-buffer and how to adapt
+find-freenode-* to other servers. Example:
+
+  (find-rcirc-buffer-2a \"irc.debian.org\" \"#debian-live\" nil 
\"#debian-live\")
+  (find-rcirc-buffer-3a \"irc.debian.org\" \"#debian-live\" nil 
\"#debian-live\")
+
+See:
+
+  (find-eev \"eev-rcirc.el\" \"find-freenode\")
 
 " pos-spec-list)))
 
diff --git a/eev-mode.el b/eev-mode.el
index 0756d5e..76a6dc2 100644
--- a/eev-mode.el
+++ b/eev-mode.el
@@ -315,6 +315,5 @@ Other commands:
 
 ;; Local Variables:
 ;; coding:            utf-8-unix
-;; ee-anchor-format:  "«%s»"
 ;; no-byte-compile:   t
 ;; End:
diff --git a/eev-plinks.el b/eev-plinks.el
index 3488456..c473085 100644
--- a/eev-plinks.el
+++ b/eev-plinks.el
@@ -287,6 +287,5 @@
 
 ;; Local Variables:
 ;; coding:            utf-8-unix
-;; ee-anchor-format:  "«%s»"
 ;; no-byte-compile:   t
 ;; End:
diff --git a/eev-prepared.el b/eev-prepared.el
index 2649ba0..a024b7d 100644
--- a/eev-prepared.el
+++ b/eev-prepared.el
@@ -250,6 +250,5 @@ See `eev' for more about $EE and the temporary script file."
 
 ;; Local Variables:
 ;; coding:            utf-8-unix
-;; ee-anchor-format:  "«%s»"
 ;; no-byte-compile:   t
 ;; End:
diff --git a/eev-rcirc.el b/eev-rcirc.el
index 7df7fde..f104b38 100644
--- a/eev-rcirc.el
+++ b/eev-rcirc.el
@@ -19,7 +19,7 @@
 ;;
 ;; Author:     Eduardo Ochs <address@hidden>
 ;; Maintainer: Eduardo Ochs <address@hidden>
-;; Version:    2019mar13
+;; Version:    2019apr14
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://angg.twu.net/eev-current/eev-rcirc.el>
@@ -28,8 +28,81 @@
 ;;                 <http://angg.twu.net/eev-intros/find-rcirc-intro.html>
 ;;                                                (find-rcirc-intro)
 
+;; «.low-level»                        (to "low-level")
+;; «.find-rcirc-buffer»                (to "find-rcirc-buffer")
+;; «.find-rcirc-buffer-2a»     (to "find-rcirc-buffer-2a")
+;; «.find-rcirc-buffer-3a»     (to "find-rcirc-buffer-3a")
+;; «.find-freenode»            (to "find-freenode")
+;; «.find-freenode-links»      (to "find-freenode-links")
+
 ;;; Commentary:
 
+;; This file - eev-rcirc.el - implements elisp hyperlinks for rcirc in
+;; a way that lets several important actions be expressed as
+;; one-liners.
+;; 
+;; 
+;; 1. Convention on channels
+;; =========================
+;; The rcirc convention for naming buffers is that if we are
+;; connected to the server irc.foobar.net then:
+;; 
+;;         *irc.foobar.net*     is the "server buffer" (with server messages),
+;;   address@hidden      is the buffer for the channel #emacs,
+;;    address@hidden      is the buffer for chatting with the user fsbot.
+;; 
+;; Note that in IRC we "/join" channels but we "/query" users. See:
+;; 
+;;   (find-node "(rcirc)rcirc commands" "/join #emacs")
+;;   (find-node "(rcirc)rcirc commands" "/query fsbot")
+;; 
+;; The eev-rcirc convention treats the "server" and the "channel" as
+;; separate parameters. The main conversion function is
+;; `ee-rcirc-buffer':
+;; 
+;;   (ee-rcirc-buffer "irc.foobar.net" nil)
+;;         -->       "*irc.foobar.net*"
+;;   (ee-rcirc-buffer "irc.foobar.net" "#emacs")
+;;         --> "address@hidden"
+;;   (ee-rcirc-buffer "irc.foobar.net" "fsbot")
+;;         -->  "address@hidden"
+;; 
+;; In IRC channel names can't have spaces, and neither can user names.
+;; Some programming languages use the term "word" for a non-empty
+;; string without spaces. The function `ee-split' accepts both strings
+;; and lists:
+;; 
+;;   (ee-split   "#emacs   fsbot   #git   gitinfo")
+;;       -->    ("#emacs" "fsbot" "#git" "gitinfo")
+;;   (ee-split '("#emacs" "fsbot" "#git" "gitinfo"))
+;;       -->    ("#emacs" "fsbot" "#git" "gitinfo")
+;; 
+;; If it receives a string it splits it into a list of words, and if
+;; it receives a list it return it unchanged.
+;; 
+;; Eev-rcirc treats channels and users in a uniform way, as words, and
+;; it accepts lists of channels and users to be given either as
+;; strings or as lists. More precisely,
+;; 
+;;   1) all the functions defined here that have an argument called
+;;      "channel" accept both a channel name and a user name,
+;; 
+;;   2) all the functions defined here that accept an argument called
+;;      "channels" accept both a string and a list; they use
+;;      `ee-split' internally to convert it to a list.
+;;
+;; and also:
+;;
+;;   3) some functions have arguments called "ichannels" and
+;;      "achannels". "Ichannels" means "initial channels": the
+;;      channels that we connect to when we connect to the server.
+;;      "Achannels" means "always channels": the channels that we
+;;      always reconnect. TODO: define precisely this "always".
+
+
+
+
+
 ;; Most of the _comments_ below are obsolete. The recommended way to
 ;; use this is now by running, for example,
 ;;
@@ -51,35 +124,6 @@
 ;; create a two-window setup with just the current buffer and the
 ;; #emacs buffer.
 
-;; OBSOLETE COMMENTS:
-;;
-;; Here we implement a very thin eev-ish layer on top of rcirc. The
-;; main goal is:
-;;
-;;   instant gratification and irc-ing for late-night zombie-mode
-;;   half-brain-dead hackers
-;;
-;; which, in practical terms, means the following. Suppose that we
-;; want to ask something on the channel #foobar of Freenode; we run
-;; `M-x find-freenode-links', adjust the intended channel name to
-;; #foobar, and set `M-99j' and `M-9j' to the right hyperlinks. Then,
-;; if we are in a buffer called "stuff", `M-99j' would create this
-;; window setting:
-;;
-;;     _____________________
-;;    |          |          |
-;;    |          | freenode |
-;;    |          |  server  |
-;;    |  stuff   |  buffer  |
-;;    |          |__________|
-;;    |          |          |
-;;    |          | #foobar  |
-;;    |__________|__________|
-;;
-;; which is great for following in real-time the connection being
-;; established - I find this essential for when it is very late at
-;; night and I am half-brain-dead -, and `M-9j' just switches to the
-;; buffer of the channel #foobar.
 
 ;; Conventions on arguments:
 ;; CHANNELS can be a list ("#foo" "#bar") or a string like "#foo #bar";
@@ -88,22 +132,36 @@
 ;; if CHANNEL is nil, that means to use the server buffer.
 
 
-;; Building blocks:
-;;
+
+
+;;;                           _                    
+;;;   ___  ___       _ __ ___(_)_ __ ___     __/\__
+;;;  / _ \/ _ \_____| '__/ __| | '__/ __|____\    /
+;;; |  __/  __/_____| | | (__| | | | (_|_____/_  _\
+;;;  \___|\___|     |_|  \___|_|_|  \___|      \/  
+;;;                                                
+;; «low-level» (to ".low-level")
+;; Low-level functions. These functions have very bad names and they
+;; WILL BE TOTALLY REWRITTEN AT SOME POINT IN THE FUTURE.
+
 (defun ee-rcirc-buffer (server &optional channel)
-  "Return the name of an rcirc server (or channel, or chat) buffer."
+  "Return the name of an rcirc server buffer, or channel, or chat buffer."
   (if channel (format "address@hidden" channel server) (format "*%s*" server)))
 
 (defun ee-rcirc-process (server)
+  "If we are connected to SERVER then return its network connection process.
+SERVER must be the name of an irc server, like \"irc.freenode.net\"."
   (get-buffer-process (ee-rcirc-buffer server)))
 
 (defun ee-rcirc-connected (server)
-  "Return non-nil if we are already connected to SERVER."
+  "Return non-nil if we are already connected to irc server SERVER.
+SERVER must be the name of an irc server, like \"irc.freenode.net\"."
   (and (get-buffer           (ee-rcirc-buffer server))
        (rcirc-buffer-process (ee-rcirc-buffer server))))
 
 (defun ee-rcirc-connect (server channels)
-"Connect to the irc server SERVER, if not already connected, and join 
CHANNELS."
+"If we are not already connected to the irc server SERVER then connect to it
+and join the channels CHANNELS."
   (if (not (ee-rcirc-connected server))
       (rcirc-connect server nil nil nil nil (ee-split channels))))
 
@@ -121,25 +179,29 @@ CHANNEL can also be nil, meaning the server buffer, or a 
nick to /query."
        (rcirc-cmd-query channel))))
 
 
-;; Medium-level words without window setup.
-;; Tests:
-;; (find-rcirc-buffer "irc.freenode.net" "#eev #emacs")
-;; (find-rcirc-buffer "irc.freenode.net" "#eev #emacs" nil           "#eev")
-;; (find-rcirc-buffer "irc.freenode.net" "#eev #emacs" "#eev #emacs")
-;; (find-rcirc-buffer "irc.freenode.net" "#eev #emacs" "#eev #emacs" "#eev")
-;;
+
+;;;   __ _           _                _                    
+;;;  / _(_)_ __   __| |      _ __ ___(_)_ __ ___     __/\__
+;;; | |_| | '_ \ / _` |_____| '__/ __| | '__/ __|____\    /
+;;; |  _| | | | | (_| |_____| | | (__| | | | (_|_____/_  _\
+;;; |_| |_|_| |_|\__,_|     |_|  \___|_|_|  \___|      \/  
+;;;                                                        
+;; «find-rcirc-buffer» (to ".find-rcirc-buffer")
+;; Medium-level functions - two that only change the current buffer,
+;; then two that create window setups.
+
 (defun find-rcirc-buffer0
   (server &optional channel &rest pos-spec-list)
   "Switch to the buffer for CHANNEL on SERVER. Make no attempt to (re)connect."
   (apply 'find-ebuffer (ee-rcirc-buffer server channel) pos-spec-list))
 
+;; Test: (find-rcirc-buffer "irc.freenode.net" "#eev #emacs" nil "#eev")
 (defun find-rcirc-buffer
   (server ichannels &optional achannels channel &rest pos-spec-list)
   "Switch to the buffer for CHANNEL on SERVER.
-When not connected connect to SERVER, taking the initial list of
-channels from ICHANNELS; always make sure that we are connected
-to ACHANNELS and to CHANNEL, and switch to the buffer for
-CHANNEL.
+When not connected to SERVER connect to it, taking the initial
+list of channels from ICHANNELS; always make sure that we are
+connected to ACHANNELS and to CHANNEL.
 
 If ACHANNELS is nil (not \"\") then use the list in ICHANNELS.
 If CHANNEL is nil then switch to the server buffer."
@@ -150,12 +212,8 @@ If CHANNEL is nil then switch to the server buffer."
 
 
 
-
-;; Medium-level words with window setup
-;; Tests:
-;; (find-rcirc-buffer-2a "irc.freenode.net" "#eev" nil "#libreboot")
-;; (find-rcirc-buffer-3a "irc.freenode.net" "#eev" nil "#libreboot")
-;;
+;; «find-rcirc-buffer-2a» (to ".find-rcirc-buffer-2a")
+;; Test: (find-rcirc-buffer-2a "irc.freenode.net" "#eev" nil "#libreboot")
 (defun find-rcirc-buffer-2a
   (server ichannels &optional achannels channel &rest pos-spec-list)
   "Connect to the irc server SERVER and create this window setup:
@@ -168,13 +226,15 @@ If CHANNEL is nil then switch to the server buffer."
 ICHANNELS is the list of initial channels (used when connecting
 to the server for the first time). ACHANNELS is the list of
 channels to always (re)connect to; if nil it defaults to
-ICHANNELS. CHANNEL selects what to display in the irc buffer at
+ICHANNELS. CHANNEL selects what to display in the window at
 the right - nil means the server buffer, \"#foo\" means channel
 \"#foo\", \"nick\" means query \"nick\"."
   (find-2a
    nil
    `(find-rcirc-buffer server ichannels achannels channel ,@pos-spec-list)))
 
+;; «find-rcirc-buffer-3a» (to ".find-rcirc-buffer-3a")
+;; Test: (find-rcirc-buffer-3a "irc.freenode.net" "#eev" nil "#libreboot")
 (defun find-rcirc-buffer-3a
   (server ichannels achannels channel &rest pos-spec-list)
   "Connect to the irc server SERVER and create this window setup:
@@ -191,8 +251,8 @@ the right - nil means the server buffer, \"#foo\" means 
channel
 ICHANNELS is the list of initial channels (used when connecting
 to the server for the first time). ACHANNELS is the list of
 channels to always (re)connect to; if nil it defaults to
-ICHANNELS. CHANNEL selects what to display in the irc channel at
-the right - \"#foo\" means channel \"#foo\", \"nick\" means query
+ICHANNELS. CHANNEL selects what to display in the lower right
+window - \"#foo\" means channel \"#foo\", \"nick\" means query
 \"nick\"."
   (find-3a
    nil
@@ -208,32 +268,83 @@ the right - \"#foo\" means channel \"#foo\", \"nick\" 
means query
 
 ;; (find-find-links-links "{k}" "freenode" "channel")
 ;;
-(defun ee-irc-channel-around-point ()
-  (ee-stuff-around-point "#A-Za-z0-9_"))
+;; (defun ee-irc-channel-around-point ()
+;;   (ee-stuff-around-point "#A-Za-z0-9_"))
+;; 
+;; (defun ee-buffer-freenode-channel-name ()
+;;   (replace-regexp-in-string
+;;    "^\\(.*\\).irc\\.freenode\\.net" "\\1"
+;;    (buffer-name)))
 
-(defun ee-buffer-freenode-channel-name ()
-  (replace-regexp-in-string
-   "^\\(.*\\).irc\\.freenode\\.net" "\\1"
-   (buffer-name)))
 
-;; High-level
-;;
+
+
+
+;;;  _____                              _      
+;;; |  ___| __ ___  ___ _ __   ___   __| | ___ 
+;;; | |_ | '__/ _ \/ _ \ '_ \ / _ \ / _` |/ _ \
+;;; |  _|| | |  __/  __/ | | | (_) | (_| |  __/
+;;; |_|  |_|  \___|\___|_| |_|\___/ \__,_|\___|
+;;;                                            
+;; «find-freenode» (to ".find-freenode")
+
 (defvar ee-freenode-server "irc.freenode.net")
-(defvar ee-freenode-ichannels "#eev #rcirc")
-(defvar ee-freenode-achannels "#eev #rcirc")
+
+(defvar ee-freenode-ichannels "#eev #rcirc"
+  "The list of initial channels to connect to at freenode.")
+
+(defvar ee-freenode-achannels nil
+  "The list of channels that `find-freenode' always reconnects to.
+When this is nil act as if this was a copy of `ee-freenode-ichannels'.")
 
 (defun find-freenode (&optional channel &rest pos-spec-list)
+  "Connect to freenode and switch to the buffer for channel CHANNEL.
+This is like `find-rcirc-buffer', but uses the variables
+`ee-freenode-ichannels' and `ee-freenode-achannels'."
   (apply 'find-rcirc-buffer
          ee-freenode-server
-         ee-freenode-ichannels 
+         ee-freenode-ichannels
          ee-freenode-achannels channel pos-spec-list))
 
 (defun find-freenode-2a (channel)
+  "Connect to freenode and create this window setup:
+   _________ ________
+  |         |        |
+  | current |  irc   |
+  | buffer  | buffer |
+  |_________|________|
+
+This is like `find-rcirc-buffer-2a' but uses
+`ee-freenode-ichannels' and `ee-freenode-achannels'."
   (find-2a nil '(find-freenode channel)))
 
 (defun find-freenode-3a (channel)
+  "Connect to freenode and create this window setup:
+   _________ _________
+  |         |         |
+  |         |   irc   |
+  |         |  server |
+  | current |_________|
+  | buffer  |         |
+  |         |   irc   |
+  |         | channel |
+  |_________|_________|
+
+This is like `find-rcirc-buffer-3a' but uses
+`ee-freenode-ichannels' and `ee-freenode-achannels'."
   (find-3a nil '(find-freenode) '(find-freenode channel)))
 
+
+
+
+;;;   __                               _            _ _       _        
+;;;  / _|_ __ ___  ___ _ __   ___   __| | ___      | (_)_ __ | | _____ 
+;;; | |_| '__/ _ \/ _ \ '_ \ / _ \ / _` |/ _ \_____| | | '_ \| |/ / __|
+;;; |  _| | |  __/  __/ | | | (_) | (_| |  __/_____| | | | | |   <\__ \
+;;; |_| |_|  \___|\___|_| |_|\___/ \__,_|\___|     |_|_|_| |_|_|\_\___/
+;;;                                                                    
+;; «find-freenode-links» (to ".find-freenode-links")
+
 (defun find-freenode-links (&optional c channel &rest pos-spec-list)
 "Visit a temporary buffer containing code for connecting to a freenode 
channel."
   (interactive)
@@ -241,15 +352,16 @@ the right - \"#foo\" means channel \"#foo\", \"nick\" 
means query
   (setq channel (or channel "{channel}"))
   (apply 'find-elinks
    `((find-freenode-links ,c ,channel)
-     (find-freenode-links "{e}" "{#eev}")
      (find-freenode-links "e" "#eev")
+     (find-freenode-links)
      ;; Convention: the first sexp always regenerates the buffer.
      (find-efunction 'find-freenode-links)
      (find-efunction 'find-freenode-2a)
      ""
      ,(ee-template0 "\
+(setq rcirc-default-nick \"hakuryo\")
+(setq rcirc-default-nick \"{(user-login-name)}\")
 (setq ee-freenode-ichannels {(ee-pp0 ee-freenode-ichannels)})
-(setq ee-freenode-achannels {(ee-pp0 ee-freenode-achannels)})
 (setq ee-freenode-achannels nil)
 (defun {c}2 () (interactive) (find-freenode-2a \"{channel}\"))
 (defun {c}3 () (interactive) (find-freenode-3a \"{channel}\"))
@@ -267,6 +379,5 @@ the right - \"#foo\" means channel \"#foo\", \"nick\" means 
query
 
 ;; Local Variables:
 ;; coding:            utf-8-unix
-;; ee-anchor-format:  "defun %s "
 ;; no-byte-compile:   t
 ;; End:
diff --git a/eev-template0.el b/eev-template0.el
index 491cfca..65ca663 100644
--- a/eev-template0.el
+++ b/eev-template0.el
@@ -126,6 +126,5 @@ Example:  (ee-template0 \"{<} a{(+ 2 3)} {>}\")
 
 ;; Local Variables:
 ;; coding:            utf-8-unix
-;; ee-anchor-format:  "«%s»"
 ;; no-byte-compile:   t
 ;; End:
diff --git a/eev-tlinks.el b/eev-tlinks.el
index c99282c..06b0fcc 100644
--- a/eev-tlinks.el
+++ b/eev-tlinks.el
@@ -1873,6 +1873,5 @@ dofile \"{fname0}\"
 
 ;; Local Variables:
 ;; coding:            utf-8-unix
-;; ee-anchor-format:  "«%s»"
 ;; no-byte-compile:   t
 ;; End:
diff --git a/eev.el b/eev.el
index 36d1bb0..1e2e904 100644
--- a/eev.el
+++ b/eev.el
@@ -6,7 +6,7 @@
 ;; Package-Requires: ((emacs "24.3"))
 ;; Keywords: lisp e-scripts
 ;; URL: http://angg.twu.net/#eev
-;; Version: 20190401
+;; Version: 20190410
 
 ;; This program is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by



reply via email to

[Prev in Thread] Current Thread [Next in Thread]