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

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

[elpa] externals/eev 1813b37219: Rewrote the DSL that `find-here-links'


From: ELPA Syncer
Subject: [elpa] externals/eev 1813b37219: Rewrote the DSL that `find-here-links' uses.
Date: Mon, 16 Jan 2023 16:57:44 -0500 (EST)

branch: externals/eev
commit 1813b372192556cf218c8bd6e07d1d5916f34d63
Author: Eduardo Ochs <eduardoochs@gmail.com>
Commit: Eduardo Ochs <eduardoochs@gmail.com>

    Rewrote the DSL that `find-here-links' uses.
---
 ChangeLog      |  27 +++++++
 VERSION        |   4 +-
 eev-blinks.el  |   1 +
 eev-elinks.el  |   4 +-
 eev-helpful.el |   8 +-
 eev-hlinks.el  | 240 ++++++++++++++++++++++++++++++++-------------------------
 eev-rstdoc.el  |  52 ++++++++++++-
 eev-tlinks.el  | 146 ++++++++++++++++++++++++++++++++---
 8 files changed, 352 insertions(+), 130 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index a57451050f..f13d3aa50e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,30 @@
+2023-01-16  Eduardo Ochs  <eduardoochs@gmail.com>
+
+       * eev-hlinks.el (ee-efunctiondescr-re): recognize built-in
+       functions.
+       (ee-hprog-find-here-links, ee-hlang-sexp1-result)
+       (ee-hlang-sexp1, ee-hlang-sexp2): new variables.
+       (ee-hlang-eval, ee-hlang-:lisp, ee-hlang-:or, ee-hlang-:if)
+       (ee-hlang-run): new functions.
+       (ee-detect-here): rewritten to use `ee-hlang-run' and
+       `ee-hprog-find-here-links'.
+       (ee-find-here-links): same.
+       (ee-find-here-debug-links): same.
+       (ee-fhl-main-program, ee-fhl-sexp1, ee-fhl-sexp2, ee-fhl-run)
+       (ee-fhl-eval, ee-fhl-:eval, ee-fhl-:if, ee-fhl-:or): all these
+       variables and functions were deleted and replaced by the ones that
+       have "hprog" and "hlang" in their names, that have better names,
+       docstrings, and tests.
+
+2023-01-14  Eduardo Ochs  <eduardoochs@gmail.com>
+
+       * eev-rstdoc.el (ee-rstdoc-:clhs): new variable.
+
+2023-01-11  Eduardo Ochs  <eduardoochs@gmail.com>
+
+       * eev-rstdoc.el (ee-rstdoc-htm): new function.
+       (ee-rstdoc-html, ee-rstdoc-web): use `ee-rstdoc-htm'.
+
 2023-01-10  Eduardo Ochs  <eduardoochs@gmail.com>
 
        * eev-tlinks.el (find-try-sly-links): new function.
diff --git a/VERSION b/VERSION
index 85b83667dd..75e23ebc6c 100644
--- a/VERSION
+++ b/VERSION
@@ -1,2 +1,2 @@
-Tue Jan 10 04:39:51 GMT 2023
-Tue Jan 10 01:39:51 -03 2023
+Mon Jan 16 21:12:35 GMT 2023
+Mon Jan 16 18:12:35 -03 2023
diff --git a/eev-blinks.el b/eev-blinks.el
index d03c0d8c08..9ab9eb4f86 100644
--- a/eev-blinks.el
+++ b/eev-blinks.el
@@ -930,6 +930,7 @@ newlines, as \"big strings\". This is a bit childish, I 
know..."
 ;; Test:
 ;;
 ;;   (find-epp (macroexpand ' (cl-defstruct mypoint x y) ))
+;;   (find-eppm             ' (cl-defstruct mypoint x y) )
 ;;  
 ;;   (cl-defstruct mypoint x y)
 ;;   (cl-defstruct (mypoint-colored (:include point)) color)
diff --git a/eev-elinks.el b/eev-elinks.el
index ada72eedb3..babc56db51 100644
--- a/eev-elinks.el
+++ b/eev-elinks.el
@@ -524,8 +524,8 @@ This is an internal function used by `find-ekey-links' and
 ;; (find-eev "eev-mode.el" "eev-mode-map-set" "\\M-h\\M-i")
 ;;
 ;; See:
-;; (find-eev "eev-hlinks.el" "ee-fhl-main-program")
-;; (find-eev "eev-hlinks.el" "ee-fhl-main-program" "(ee-find-info-links)")
+;; (find-eev "eev-hlinks.el" "hprog")
+;; (find-eev "eev-hlinks.el" "hprog" "(ee-find-info-links)")
 ;; (find-eev-quick-intro "10.2. Generating short hyperlinks to info nodes")
 
 (defvar ee-info-file "")
diff --git a/eev-helpful.el b/eev-helpful.el
index 16ce74e4db..9e4d0794ec 100644
--- a/eev-helpful.el
+++ b/eev-helpful.el
@@ -1,6 +1,6 @@
 ;;; eev-helpful.el -- eev support for helpful.  -*- lexical-binding: nil; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2023 Free Software Foundation, Inc.
 ;;
 ;; This file is part of GNU eev.
 ;;
@@ -19,7 +19,7 @@
 ;;
 ;; Author:     Eduardo Ochs <eduardoochs@gmail.com>
 ;; Maintainer: Eduardo Ochs <eduardoochs@gmail.com>
-;; Version:    20220318
+;; Version:    20230116
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://angg.twu.net/eev-current/eev-helpful.el>
@@ -47,8 +47,8 @@
 ;; Note that `find-here-links' calls functions from this file
 ;; when the major mode is `helpful-mode' - see:
 ;;
-;;   (find-eev "eev-hlinks.el" "ee-fhl-main-program")
-;;   (find-eev "eev-hlinks.el" "ee-fhl-main-program" "helpful")
+;;   (find-eev "eev-hlinks.el" "hprog")
+;;   (find-eev "eev-hlinks.el" "hprog" "helpful")
 ;;
 ;; Also, `find-efunction-links' and `find-evariable-links' now include
 ;; links with `find-hfunction' and `find-hvariable' in the temporary
diff --git a/eev-hlinks.el b/eev-hlinks.el
index 78cfcb638a..9725b677c7 100644
--- a/eev-hlinks.el
+++ b/eev-hlinks.el
@@ -1,6 +1,6 @@
 ;;; eev-hlinks.el --- `find-here-links' and variants.  -*- lexical-binding: 
nil; -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 ;;
 ;; This file is part of GNU eev.
 ;;
@@ -19,7 +19,7 @@
 ;;
 ;; Author:     Eduardo Ochs <eduardoochs@gmail.com>
 ;; Maintainer: Eduardo Ochs <eduardoochs@gmail.com>
-;; Version:    20221218
+;; Version:    20230116
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://angg.twu.net/eev-current/eev-hlinks.el>
@@ -111,9 +111,10 @@
 ;; «.find-here-links»          (to "find-here-links")
 ;; «.ee-find-here-links»       (to "ee-find-here-links")
 ;; «.ee-find-here-debug-links» (to "ee-find-here-debug-links")
-;; «.ee-find-here-links-tests» (to "ee-find-here-links-tests")
-;; «.ee-fhl-main-program»      (to "ee-fhl-main-program")
-;; «.ee-fhl-run»               (to "ee-fhl-run")
+;; «.hprog»                    (to "hprog")
+;; «.ee-hprog-find-here-links» (to "ee-hprog-find-here-links")
+;; «.hlang»                    (to "hlang")
+;; «.ee-hlang-run»             (to "ee-hlang-run")
 ;;
 ;; «.ee-find-here-links-old»   (to "ee-find-here-links-old")
 ;;
@@ -176,15 +177,15 @@ See: (find-here-links-intro)"
 (defun ee-find-here-links (&optional arg)
   "Generate the non-header part of the \"*(find-here-links)*\" buffer.
 This function runs `(ee-fhl-run ee-fhl-main-program)', that runs
-the program in `ee-fhl-main-program' with `ee-fhl-run' until an
-expression like this in it
+the program in `ee-hprog-find-here-links' with `ee-hlang-run'
+until an expression like this in it
 
   (:if SEXP1 SEXP2)
 
 succeeds. When the successful `(:if ___ ___)' is found its SEXP1
-is stored in the global variable `ee-fhl-sexp1' and its SEXP2 is
-stored in the global variable `ee-fhl-sexp2'. Their values will
-be things like:
+is stored in the global variable `ee-hlang-sexp1' and its SEXP2
+is stored in the global variable `ee-hlang-sexp2'. Their values
+will be things like:
 
   SEXP1  =>  (ee-<kind>-bufferp)
   SEXP2  =>  (ee-find-<kind>-links)
@@ -203,7 +204,7 @@ which kind \"here\" the current buffer is."
   (ee-detect-here)
   (if arg
       (cons "" (ee-find-here-debug-links))
-    (cons "" (eval ee-fhl-sexp2))))
+    (cons "" (eval ee-hlang-sexp2))))
 
 ;; «ee-find-here-debug-links»  (to ".ee-find-here-debug-links")
 ;; See: (find-eevfile "eev-hlinks.el" "Debug mode")
@@ -213,62 +214,56 @@ which kind \"here\" the current buffer is."
   `("# The last call to"
     "#     '(find-here-links ARG)"
     "#  -> '(ee-detect-here)"
-    "#  -> '(ee-fhl-run ee-fhl-main-program)"
+    "#  -> '(ee-hlang-run ee-hprog-find-here-links)"
     "# produced this:"
-    ,(format "#   ee-fhl-sexp1  =>  %s" (ee-S ee-fhl-sexp1))
-    ,(format "#   ee-fhl-sexp2  =>  %s" (ee-S ee-fhl-sexp2))
+    ,(format "#   ee-hlang-sexp1  =>  %s" (ee-S ee-hlang-sexp1))
+    ,(format "#   ee-hlang-sexp2  =>  %s" (ee-S ee-hlang-sexp2))
     "# See:"
-    "#   ee-fhl-sexp1"
-    "#   ee-fhl-sexp2"
-    ,(format "#   (find-efunction '%s)" (car ee-fhl-sexp1))
-    ,(format "#   (find-efunction '%s)" (car ee-fhl-sexp2))
+    "#   ee-hlang-sexp1"
+    "#   ee-hlang-sexp2"
+    ,(format "#   (find-efunction '%s)" (car ee-hlang-sexp1))
+    ,(format "#   (find-efunction '%s)" (car ee-hlang-sexp2))
     "#   (find-eev \"eev-hlinks.el\" \"find-here-links\")"
     "#   (find-eev \"eev-hlinks.el\" \"find-here-links\" \"If ARG\")"
     "#   (find-eev \"eev-hlinks.el\" \"ee-find-here-links\")"
     "#   (find-eev \"eev-hlinks.el\" \"ee-find-here-debug-links\")"
-    "#   (find-eev \"eev-hlinks.el\" \"ee-fhl-run\")"
-    "#   (find-eev \"eev-hlinks.el\" \"ee-fhl-run\" \"ee-detect-here\")"
-    "#   (find-eev \"eev-hlinks.el\" \"ee-fhl-main-program\")"
+    "#   (find-eev \"eev-hlinks.el\" \"ee-hlang-run\")"
+    "#   (find-eev \"eev-hlinks.el\" \"ee-hlang-run\" \"ee-detect-here\")"
+    "#   (find-eev \"eev-hlinks.el\" \"ee-hprog-find-here-links\")"
     ))
 
 
-
-;; «ee-find-here-links-tests»  (to ".ee-find-here-links-tests")
-;; Low-level tests (old, written before `ee-find-here-debug-links'):
-;;
-;;   (find-2a nil                 '(find-here-links))
-;;   (find-2a nil '(find-elinks (ee-find-here-links)))
-;;           (ee-fhl-run ee-fhl-main-program)
-;;                 (list ee-fhl-sexp1 ee-fhl-sexp2)
-;;                                    ee-fhl-sexp2
-;;   (find-2a nil '(find-elinks (eval ee-fhl-sexp2)))
-
+;; 2023jan16: removed all the functions and variables with "fhl" in
+;; their names, and replaced them with "hprog"s and "hlang"s.
+;; An old comment:
+;; 
+;; ;; Note the _AT THIS MOMENT_ the easiest way to add support for a new
+;; ;; kind of "here" in `ee-fhl-main-program' is to override this
+;; ;; variable by setq-ing it in your init file... this is just because
+;; ;; I've been lazy and I haven't implemented YET a way to make
+;; ;; `ee-fhl-main-program' call "subprograms". If you need to extend
+;; ;; this please get in touch with me and I'll implement the missing
+;; ;; parts!!!
 
 
 
 
-;;;                  _                                                   
-;;;  _ __ ___   __ _(_)_ __    _ __  _ __ ___   __ _ _ __ __ _ _ __ ___  
-;;; | '_ ` _ \ / _` | | '_ \  | '_ \| '__/ _ \ / _` | '__/ _` | '_ ` _ \ 
-;;; | | | | | | (_| | | | | | | |_) | | | (_) | (_| | | | (_| | | | | | |
-;;; |_| |_| |_|\__,_|_|_| |_| | .__/|_|  \___/ \__, |_|  \__,_|_| |_| |_|
-;;;                           |_|              |___/                     
-;;
-;; «ee-fhl-main-program»  (to ".ee-fhl-main-program")
-;; `ee-find-here-links' runs this "program" with `ee-fhl-run'.
-;;
-;; Try: (find-eppp ee-fhl-main-program)
-;;     (ee-fhl-run ee-fhl-main-program)
+;;;  _                           
+;;; | |__  _ __  _ __ ___   __ _ 
+;;; | '_ \| '_ \| '__/ _ \ / _` |
+;;; | | | | |_) | | | (_) | (_| |
+;;; |_| |_| .__/|_|  \___/ \__, |
+;;;       |_|              |___/ 
 ;;
-;; Note the _AT THIS MOMENT_ the easiest way to add support for a new
-;; kind of "here" in `ee-fhl-main-program' is to override this
-;; variable by setq-ing it in your init file... this is just because
-;; I've been lazy and I haven't implemented YET a way to make
-;; `ee-fhl-main-program' call "subprograms". If you need to extend
-;; this please get in touch with me and I'll implement the missing
-;; parts!!!
+;; «hprog»  (to ".hprog")
+;; An "hprogram" is a program that identifies what we have "here" and
+;; decides how to handle that. My main example of an "hprogram" is the
+;; one that is used by `find-here-links' to produce a temporary buffer
+;; with hyperlinks to "here". It is here, and my _current_ interpreter
+;; for the "hlanguage" in which "hprograms" are written is below.
 
-(defvar ee-fhl-main-program
+;; «ee-hprog-find-here-links»  (to ".ee-hprog-find-here-links")
+(defvar ee-hprog-find-here-links
  '(:or
    ;; By major mode:
    (:if (ee-info-bufferp)       (ee-find-info-links))
@@ -309,71 +304,104 @@ which kind \"here\" the current buffer is."
    )
  "See `ee-find-here-links'.")
 
+;; Two e-mails about using an hprogram to detect the thing at point:
+;; https://lists.gnu.org/archive/html/help-gnu-emacs/2023-01/msg00027.html
+;; https://lists.gnu.org/archive/html/help-gnu-emacs/2023-01/msg00047.html
 
-;;;  ____  ____  _     
-;;; |  _ \/ ___|| |    
-;;; | | | \___ \| |    
-;;; | |_| |___) | |___ 
-;;; |____/|____/|_____|
-;;;                    
-;; «ee-fhl-run»  (to ".ee-fhl-run")
-;; Here we define the interpreter for the DSL that is used in
-;; `ee-fhl-main-program'.
-;; TODO: implement (:subprogram-in VARNAME).
-
-(defvar ee-fhl-sexp1 nil
-  "When `ee-fhl-run' finds an (ee-fhl-:if SEXP1 SEXP2)
-   that succeeds it stores the SEXP1 in this variable.")
-
-(defvar ee-fhl-sexp2 nil
-  "When `ee-fhl-run' finds an (ee-fhl-:if SEXP1 SEXP2)
-   that succeeds it stores the SEXP2 in this variable.")
-
-(defun ee-fhl-run (fhl-program)
-  "See `ee-fhl-main-program'."
-  (setq ee-fhl-sexp1 nil)
-  (setq ee-fhl-sexp2 nil)
-  (ee-fhl-eval fhl-program)
-  (list ee-fhl-sexp1 ee-fhl-sexp2))
 
+
+
+;;;  _     _                   
+;;; | |__ | | __ _ _ __   __ _ 
+;;; | '_ \| |/ _` | '_ \ / _` |
+;;; | | | | | (_| | | | | (_| |
+;;; |_| |_|_|\__,_|_| |_|\__, |
+;;;                      |___/ 
+;;
+;; «hlang»  (to ".hlang")
+;; An interpreter for the "hlanguage" in which "hprograms" are
+;; written. This interpreter treats "hsexps" of the form (:if ...) in
+;; a very atypical way to make everything easy to debug - see the
+;; docstrings of the functions `ee-hlang-:if' and `ee-hlang-run'.
+;;
 ;; Tests:
-;; (ee-fhl-eval  '(:eval (+ 20 3)))
-;; (ee-fhl-eval  '(:if (< 1 2) (list 3 4)))
-;; (ee-fhl-:eval '(+ 1 2) '(+ 3 4))
-;; (ee-fhl-:if   '(< 1 2) '(list 3 4))
-;; (ee-fhl-:if   '(> 1 2) '(list 3 4))
-;; (ee-fhl-:or   '(:eval nil) '(:eval nil) '(:eval 42) '(:eval 99))
-;;
-(defun ee-fhl-eval (fhl-sexp)
-  (let* ((f (ee-intern "ee-fhl-%s" (car fhl-sexp)))
-        (rest (cdr fhl-sexp)))
-    (apply f rest)))
-
-(defun ee-fhl-:eval (&rest sexps)
+;; (ee-hlang-:lisp '(+ 20 3) '(+ 40 5))
+;; (ee-hlang-:or   '(:lisp nil) '(:lisp nil) '(:lisp 42) '(:lisp 99))
+;; (ee-hlang-:if   '(< 1 2) '(list 'lt))
+;; (ee-hlang-:if   '(> 1 2) '(list 'gt))
+;;
+;; (ee-hlang-eval  '(:lisp (+ 20 3) (+ 40 5)))
+;; (ee-hlang-eval  '(:or (:lisp nil) (:lisp nil) (:lisp 42) (:lisp 99)))
+;; (ee-hlang-eval  '(:if (< 1 2) (list 'lt)))
+;; (ee-hlang-eval  '(:if (> 1 2) (list 'gt)))
+;; (ee-hlang-eval  '(:or (:if (< 1 2) (list 'lt)) (:if (> 1 2) (list 'gt))))
+;; (ee-hlang-eval  '(:or (:if (> 1 2) (list 'gt)) (:if (< 1 2) (list 'lt))))
+
+;; The Three Variables.
+(defvar ee-hlang-sexp1-result nil "See `ee-hlang-:if'.")
+(defvar ee-hlang-sexp1        nil "See `ee-hlang-:if'.")
+(defvar ee-hlang-sexp2        nil "See `ee-hlang-:if'.")
+
+(defun ee-hlang-eval (hsexp)
+  "If HSEXP is (:foo bar plic ploc), run (ee-hlang-:foo bar plic ploc)."
+  (let* ((kw   (car hsexp))
+        (args (cdr hsexp))
+        (f    (ee-intern "ee-hlang-%s" kw)))
+    (apply f args)))
+
+(defun ee-hlang-:lisp (&rest sexps)
+  "Eval (progn . SEXPS) and return the result. This is mainly for tests."
   (eval (cons 'progn sexps)))
 
-(defun ee-fhl-:if (sexp1 sexp2)
-  (when (eval sexp1)
-    (setq ee-fhl-sexp1 sexp1)
-    (setq ee-fhl-sexp2 sexp2)
-    sexp2))
-
-(defun ee-fhl-:or (&rest fhl-sexps)
-  (cl-loop for fhl-sexp in fhl-sexps
-          for fhl-result = (ee-fhl-eval fhl-sexp)
-          until fhl-result
-           finally return fhl-result))
+(defun ee-hlang-:or (&rest hsexps)
+  "Run `ee-hlang-eval' on each hsexp in HSEXPS until on succeeds.
+On success return the result of that hsexp. On failure return nil."
+  (cl-loop for hsexp in hsexps
+          for hresult = (ee-hlang-eval hsexp)
+          until hresult
+           finally return hresult))
+
+(defun ee-hlang-:if (sexp1 sexp2)
+  "If (eval SEXP1) is true, return (list SEXP1 SEXP2).
+Note that on success:
+  a) we save the result of SEXP1 into `ee-hlang-sexp1-result',
+  b) we save SEXP1 into `ee-hlang-sexp1',
+  c) we save SEXP2 into `ee-hlang-sexp2',
+  d) we DO NOT evaluate SEXP2,
+  e) we return (list SEXP1 SEXP2) instead of (eval SEXP2).
+This semantics is weird but it makes debugging of hprograms very easy."
+  (let ((result (eval sexp1)))
+    (when result
+      (setq ee-hlang-sexp1-result result)
+      (setq ee-hlang-sexp1 sexp1)
+      (setq ee-hlang-sexp2 sexp2)
+      (list sexp1 sexp2))))
+
+;; «ee-hlang-run»  (to ".ee-hlang-run")
+(defun ee-hlang-run (hprogram)
+  "Clear the Three Variables and run (ee-hlang-eval HPROGRAM).
+HPROGRAM is usually an hsexp of the form (:or hsexp1 ... hsexpn).
+This is my preferred way of running an hprogram: the first (:if
+sexp1 sexp2) in the hprogram that succeeds will have its sexp1,
+sexp2 and the result of sexp1 stored in the Three Variables, and
+it will make the hprogram abort. If no (:if)s in the hprogram
+succeed then the Three Variables will be nil, and this returns
+nil."
+  (setq ee-hlang-sexp1-result nil)
+  (setq ee-hlang-sexp1 nil)
+  (setq ee-hlang-sexp2 nil)
+  (ee-hlang-eval hprogram))
 
 (defun ee-detect-here ()
   "To understand this, run `find-here-links' with a prefix argument.
-This is the standard high-level way to call `ee-fhl-run'."
-  (ee-fhl-run ee-fhl-main-program))
+This is the standard high-level way to call `ee-hlang-run'."
+  (ee-hlang-run ee-hprog-find-here-links))
 
 
 
 
 ;; «ee-find-here-links-old»  (to ".ee-find-here-links-old")
-;; Old version:
+;; Old version - hard to debug:
 ;; (defun ee-find-here-links ()
 ;;   (cond ;; by major mode
 ;;         ((ee-info-bufferp)      (cons "" (ee-find-info-links)))      ; M-h 
M-i
@@ -493,8 +521,8 @@ a single whitespace character, and the results are 
`concat'-ed."
 (defvar ee-efunctiondescr-re
   (ee-underlinewsp-re
    "^\\([^ \t\n]+\\)_is_an?"
-   "\\(_autoloaded\\|_interactive\\|_compiled\\|_byte-compiled\\)*"
-   "\\(_Lisp_function\\|_macro\\|_special_form\\)"))
+   "\\(_autoloaded\\|_interactive\\|_compiled\\|_byte-compiled\\|_built-in\\)*"
+   "\\(_Lisp_function\\|_function\\|_macro\\|_special_form\\)"))
 (defun  ee-efunctiondescr-bufferp () (ee-buffer-help ee-efunctiondescr-re 1))
 (defun  ee-find-efunctiondescr-links ()
   (let ((f (ee-efunctiondescr-bufferp)))
diff --git a/eev-rstdoc.el b/eev-rstdoc.el
index c76cc7e602..d68e59dbe1 100644
--- a/eev-rstdoc.el
+++ b/eev-rstdoc.el
@@ -1,6 +1,6 @@
 ;;; eev-rstdoc.el -- links to documentation generated from RST files.  -*- 
lexical-binding: nil; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 ;;
 ;; This file is part of GNU eev.
 ;;
@@ -19,7 +19,7 @@
 ;;
 ;; Author:     Eduardo Ochs <eduardoochs@gmail.com>
 ;; Maintainer: Eduardo Ochs <eduardoochs@gmail.com>
-;; Version:    20221204
+;; Version:    20230111
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://angg.twu.net/eev-current/eev-rstdoc.el>
@@ -33,6 +33,8 @@
 ;;   «.ee-rstdoc-:py»          (to "ee-rstdoc-:py")
 ;;   «.ee-rstdoc-:sympy»       (to "ee-rstdoc-:sympy")
 ;;   «.ee-rstdoc-:mpl»         (to "ee-rstdoc-:mpl")
+;; «.other-defvars»            (to "other-defvars")
+;;   «.ee-rstdoc-:clhs»                (to "ee-rstdoc-:clhs")
 ;; «.basic-ops»                        (to "basic-ops")
 ;; «.around-point»             (to "around-point")
 ;; «.code-rstdoc»              (to "code-rstdoc")
@@ -316,6 +318,43 @@
       "See: (find-code-rstdoc :mpl)")
 
 
+;;;   ___  _   _                     _       __                     
+;;;  / _ \| |_| |__   ___ _ __    __| | ___ / _|_   ____ _ _ __ ___ 
+;;; | | | | __| '_ \ / _ \ '__|  / _` |/ _ \ |_\ \ / / _` | '__/ __|
+;;; | |_| | |_| | | |  __/ |    | (_| |  __/  _|\ V / (_| | |  \__ \
+;;;  \___/ \__|_| |_|\___|_|     \__,_|\___|_|   \_/ \__,_|_|  |___/
+;;;                                                                 
+;; «other-defvars»  (to ".other-defvars")
+
+;; «ee-rstdoc-:clhs»  (to ".ee-rstdoc-:clhs")
+;; The Common Lisp Hyperspec.
+;; The Debian package "hyperspec" installs a local copy
+;; of the CLHS in /usr/share/doc/hyperspec/. To use this,
+;; put these two lines in your ~/.emacs:
+;;
+;; ;; (find-code-rstdoc :clhs)
+;;         (code-rstdoc :clhs)
+;;
+(defvar ee-rstdoc-:clhs
+      '(:base      "Front/Contents"
+        :base-web  "http://clhs.lisp.se/";
+                  ;; "http://www.lispworks.com/documentation/HyperSpec/";
+        :base-html "file:///usr/share/doc/hyperspec/"
+        :base-rst  "/BASE-RST/"
+        :rst       ".rst"
+        :htm       ".htm"
+        :res       ("#.*$" "\\?.*$" ".html?$" ".txt$" ".rst$" "^file://"
+                   "http://clhs.lisp.se/";
+                   "http://www.lispworks.com/documentation/HyperSpec/";
+                   
"http://www.cs.cmu.edu/afs/cs/project/ai-repository/ai/html/hyperspec/HyperSpec/";
+                   
"http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/";
+                   "/usr/share/doc/hyperspec/")
+        :kill      clk
+       )
+      "See: (find-code-rstdoc :clhs)")
+
+
+
 ;;;  ____            _                        
 ;;; | __ )  __ _ ___(_) ___    ___  _ __  ___ 
 ;;; |  _ \ / _` / __| |/ __|  / _ \| '_ \/ __|
@@ -384,20 +423,25 @@
          (ee-rstdoc-stem kw str)
          (ee-rstdoc-hashanchor str)))
 
+(defun ee-rstdoc-htm (kw)
+  (or (ee-rstdoc-getfield0 kw :htm) ".html"))
+
 (defun ee-rstdoc-html (kw &optional str)
   (if (not str)
       (setq str (ee-rstdoc-getfield kw :base)))
-  (format "%s%s.html%s"
+  (format "%s%s%s%s"
          (ee-rstdoc-getfield kw :base-html)
          (ee-rstdoc-stem kw str)
+         (ee-rstdoc-htm kw)
          (ee-rstdoc-hashanchor str)))
 
 (defun ee-rstdoc-web (kw &optional str)
   (if (not str)
       (setq str (ee-rstdoc-getfield kw :base)))
-  (format "%s%s.html%s"
+  (format "%s%s%s%s"
          (ee-rstdoc-getfield kw :base-web)
          (ee-rstdoc-stem kw str)
+         (ee-rstdoc-htm kw)
          (ee-rstdoc-hashanchor str)))
 
 (defun ee-rstdoc-rst (kw &optional str)
diff --git a/eev-tlinks.el b/eev-tlinks.el
index 7f19a6540a..96b31b2dba 100644
--- a/eev-tlinks.el
+++ b/eev-tlinks.el
@@ -3925,23 +3925,32 @@ N should be either a number or a symbol; SEXP should be 
a sexp."
      ,(ee-template0 (ee-adjust-red-stars "\
  This script is incomplete!!!
 
- Make sure that sbcl is installed.
- Note: this block only works on Debian.
+ 1. Install some Debian packages
+ ===============================
+ Note that the package \"hyperspec\" will install
+ a local copy of the Common Lisp Hyperspec here:
+   (find-fline \"/usr/share/doc/hyperspec/\")
 
  (eepitch-shell)
  (eepitch-kill)
  (eepitch-shell)
-sudo apt-get install sbcl
+sudo apt-get install sbcl hyperspec maxima
 
- Install sly. Use low-level sexps instead of `M-x list-packages'.
+
+ 2. Install some elisp packages
+ ==============================
+ Here we use low-level sexps instead of `M-x list-packages'.
  Note that some of the sexps below take several seconds to run.
 
  (package-initialize)
  (add-to-list 'package-archives '(\"melpa\" . 
\"https://melpa.org/packages/\";))
  (package-refresh-contents)
  (package-install 'sly)
+ (package-install 'clhs)
+
 
- Download quicklisp.lisp.
+ 3. Download quicklisp.lisp
+ ==========================
 
  (eepitch-shell)
  (eepitch-kill)
@@ -3950,13 +3959,13 @@ mkdir -p $S/https/beta.quicklisp.org/
 cd       $S/https/beta.quicklisp.org/
 ls -lAF
 rm -fv quicklisp.lisp
-rm -fv quicklisp.lisp.asc
-wget -nc 'https://beta.quicklisp.org/quicklisp.lisp'
-wget -nc 'https://beta.quicklisp.org/quicklisp.lisp.asc'
+wget -nc https://beta.quicklisp.org/quicklisp.lisp
 # (find-fline \"$S/https/beta.quicklisp.org/\")
 # (find-fline \"$S/https/beta.quicklisp.org/quicklisp.lisp\")
 
- Run quicklisp.lisp.
+
+ 4. Run quicklisp.lisp
+ =====================
  Ask it to install slynk and to change ~/.sbclrc.
 
  (eepitch-shell)
@@ -3970,16 +3979,129 @@ sbcl --load quicklisp.lisp
   (ql:add-to-init-file)
 
   ;; Inspect the changes in ~/.sbclrc:
-  ;; (find-fline \"~/.sbclrc\")
-  ;; (find-fline \"~/.sbclrc\" \"added by ql:add-to-init-file:\")
+  ;;   (find-fline \"~/.sbclrc\")
+  ;;   (find-fline \"~/.sbclrc\" \"added by ql:add-to-init-file:\")
+  ;; Inspect the ~/quicklisp/ directory:
+  ;;   (code-c-d \"ql\" \"~/quicklisp/\")
+  ;;   (find-qlfile \"\")
+  ;;   (find-qlsh \"find * | sort\")
+
+
+
+ 5. Change your ~/.emacs
+ =======================
+ Copy the block below to your ~/.emacs:
+
+;; From: (find-try-sly-links)
+;; Skel: (find-rstdoc-links :clhs)
+(setq ee-rstdoc-:clhs
+      '(:base      \"Front/Contents\"
+        :base-web  \"http://clhs.lisp.se/\";
+                  ;; \"http://www.lispworks.com/documentation/HyperSpec/\";
+        :base-html \"file:///usr/share/doc/hyperspec/\"
+        :base-rst  \"/BASE-RST/\"
+        :rst       \".rst\"
+        :htm       \".htm\"
+        :res       (\"#.*$\" \"\\\\?.*$\" \".html?$\" \".txt$\" \".rst$\" 
\"^file://\"
+                   \"http://clhs.lisp.se/\";
+                   \"http://www.lispworks.com/documentation/HyperSpec/\";
+                   
\"http://www.cs.cmu.edu/afs/cs/project/ai-repository/ai/html/hyperspec/HyperSpec/\";
+                   
\"http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/\";
+                   \"/usr/share/doc/hyperspec/\")
+        :kill      clk
+       ))
 
- Start Sly.
+;; (find-code-rstdoc :clhs)
+        (code-rstdoc :clhs)
+
+;; See:   (find-status   \"hyperspec\")
+;;        (find-vldifile \"hyperspec.list\")
+;;        (find-udfile   \"hyperspec/\")
+;;        (find-evardescr 'clhs-root)
+;;        (find-evariable 'clhs-root)
+;;        (find-ehashtable clhs-symbols)
+;; Tests: (find-clhsdoc)
+;;        (find-clhsdoc \"Body/m_loop\")
+;;        (find-clhsdoci        \"loop\")
+;;        (ee-clhs-lookup-index \"loop\")
+;;
+(setq clhs-root \"file:///usr/share/doc/hyperspec/\")
+
+(defun ee-clhs-lookup-index (name)
+  (require 'clhs)
+  (gethash (upcase name) (clhs-symbols)))
+
+(defun find-clhsdoci (name &rest rest)
+  (let* ((str0 (ee-clhs-lookup-index name))
+        (str (replace-regexp-in-string \"\\\\.html?$\" \"\" str0)))
+    (find-clhsdoc str)))
+
+(code-c-d \"sbcl\" \"/usr/share/sbcl-source/\" \"sbcl\")
+(code-c-d \"ql\" \"~/quicklisp/\")
+;; (find-qlfile \"\")
+;; (find-qlsh \"find * | sort\")
+
+
+
+ 6. Test Sly
+ ===========
  One of its messages will (should?) be:
  [sly] Connecting to Slynk on port 45477.
 
  (eepitch-sly)
  (eepitch-kill)
  (eepitch-sly)
+;; From: (find-es \"lisp\" \"sharpsign-P\")
+(apropos \"PATHNAME\")
+(make-pathname :name \"FOO\")
+(inspect (make-pathname :name \"FOO\"))
+(macroexpand '(defstruct mypoint x y))
+
+(defvar o)
+(setq o (macroexpand '(defstruct mypoint x y)))
+ (eepitch-eval-at-target-window '(sly-inspect \"o\"))
+
+
+
+ 7. Tell Maxima how to load Sly
+ ==============================
+ Run this,
+   (mkdir \"~/.maxima/\" t)
+ and then copy the block below to:
+   (find-fline \"~/.maxima/startsly.lisp\")
+ Note that it contains a \"test block\". See:
+   http://angg.twu.net/eepitch.html#test-blocks
+
+;; From: (find-try-sly-links)
+;; Based on: (find-angg \".maxima/startsly.lisp\")
+;;
+(load #P\"~/quicklisp/setup.lisp\")
+(ql:quickload :slynk)
+(slynk:create-server :port 56789 :dont-close t)
+
+#|
+ (eepitch-sbcl)
+ (eepitch-kill)
+ (eepitch-sbcl)
+(load #P\"~/quicklisp/setup.lisp\")
+(ql:quickload :slynk)
+
+ (eepitch-maxima)
+ (eepitch-kill)
+ (eepitch-maxima)
+load(\"startsly\");
+ (sly-connect \"localhost\" 56789)
+ (eepitch-sly)
+
+|#
+
+
+ See:
+ https://gigamonkeys.com/book/lather-rinse-repeat-a-tour-of-the-repl.html
+
+
+
+
 
 "))
      )



reply via email to

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