summaryrefslogtreecommitdiff
path: root/help/tex-macro-catalogue.el
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /help/tex-macro-catalogue.el
Initial commit
Diffstat (limited to 'help/tex-macro-catalogue.el')
-rw-r--r--help/tex-macro-catalogue.el349
1 files changed, 349 insertions, 0 deletions
diff --git a/help/tex-macro-catalogue.el b/help/tex-macro-catalogue.el
new file mode 100644
index 0000000000..f550ac03b4
--- /dev/null
+++ b/help/tex-macro-catalogue.el
@@ -0,0 +1,349 @@
+;;; ====================================================================
+;;; @Emacs-Lisp-file{
+;;; filename = "tex-macro-catalogue.el",
+;;; version = "2.00",
+;;; date = "15 February 1993",
+;;; time = "14:43:35 GMT",
+;;; author = "David Carlisle",
+;;; address = "Computer Science Department
+;;; Manchester University
+;;; Oxford Road
+;;; Manchester
+;;; England
+;;; M13 9PL",
+;;; telephone = "+44 61 275 6139",
+;;; FAX = "+44 61 275 6236",
+;;; email = "carlisle@cs.man.ac.uk (Internet)",
+;;; checksum = "05502 349 1299 11389",
+;;; codetable = "ISO/ASCII",
+;;; keywords = "TeX, macros,styles,index,catalogue",
+;;; supported = "yes",
+;;; docstring = "
+;;;
+;;; A GNU Emacs interface to David Jones' Catalogue of TeX macros.
+;;;
+;;; The most recent version of the catalogue is always available
+;;; from theory.lcs.mit.edu in the directory
+;;; pub/tex/tex-styles-and-macros.txt.
+;;;
+;;; Copies can also be obtained from the following locations:
+;;;
+;;; ftp.tex.ac.uk:pub/archive/help/tex-styles-and-macros.txt
+;;; ftp.th-darmstadt.de:
+;;; pub/tex/documentation/tex-styles-and-macros.txt[.Z]
+;;; ftp.uni-stuttgart.de:/soft/tex/documentation/TeX-index
+;;; ftp.SHSU.edu:[fileserv.tex-index]tex.index
+;;; ymir.claremont.edu:[anonymous.tex.documentation]tex-index.txt
+;;;
+;;; ftp.cs.ruu.nl:pub/TEX/DOC/TeX-index.Z
+;;; ftp.math.utah.edu:pub/tex/tex-index
+;;; ftp.diku.dk:pub/TeX/misc/TeX-Index.Z
+;;;
+;;;
+;;; The checksum field above was produced by
+;;; Robert Solovay's checksum utility.",
+;;; }
+;;; ====================================================================
+
+;;; tex-macro-catalogue.el
+;;; ;;;;;;;;;;;;;;;;;;;;;;
+
+;;; This is an attempt at an emacs interface to the TeX macro catalogue
+;;; produced by David Jones <dmjones@theory.lcs.mit.edu>
+
+;;; INSTALLATION
+;;;
+;;; First obtain the catalogue and install it in a suitable directory.
+;;; Then modify the setting of tmc-file below to refer to the path
+;;; name of the catalogue file.
+;;; This file may then be installed in an emacs-lisp directory, and
+;;; byte compiled.
+
+
+;;; BASIC USE
+;;;
+;;; Add the following lines (without the `;;;') to your .emacs. The
+;;; catalogue may then be searched with M-x tex-macro-catalogue
+;;;
+;;; (autoload 'tex-macro-catalogue "tex-macro-catalogue"
+;;; "TeX macro catalogue browser" t)
+;;;
+;;; The browser will start by displaying a help screen, this screen
+;;; may be recalled later by typing `?'.
+
+
+;;; CUSTOMISATION & OTHER DETAILS
+;;;
+;;; The hook tmc-mode-hook may be set in your .emacs file, to
+;;; customise the catalogue searching.
+;;;
+;;; You may wish to change the keybindings, or modify the list
+;;; tmc-latex-sections of sections that you consider latex-related.
+;;; (eg to add LAMSTeX, or remove FOILTeX.)
+;;;
+;;; The entries are returned with only the titles displayed.
+;;; The bodies are hidden by outline mode. Typing `s' by a title shows
+;;; the corresponding body. `S' shows all the returned entries.
+;;; Hiding entries is done with `h' (one entry) or `H' all entries.
+;;;
+;;; Typing `?' displays a help screen, as long as you do not abort
+;;; this with ^g, the previous contents of the tmc-entries buffer will
+;;; be redisplayed at the next keypress.
+;;;
+;;; The first time you restrict the search to LaTeX `L', there will be
+;;; a slight delay, as the positions of the LaTeX-related sections are
+;;; determined. After the first time `L' and `A' should quickly switch
+;;; between LaTeX-specific and unrestricted searching.
+;;;
+;;; If you usually require LaTeX-restricted searching, you could cause
+;;; the browser to start off in that mode by placing a hook such as
+;;; the following (without the ;;;) in your .emacs file.
+;;;
+;;; (setq tmc-mode-hook
+;;; (function
+;;; (lambda ()
+;;; (tmc-latex-only))))
+
+
+;;; David Carlisle <carlisle@cs.man.ac.uk>
+;;;
+;;; Version 1: May 1992
+;;; Version 2: 15 February 1993
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+(defconst tmc-file
+ "/usr/common/lib/tex3/doc/tex-styles-and-macros.txt"
+ "The path name for the catalogue file.
+ MUST BE SET CORRECTLY FOR YOUR SITE.")
+
+(defvar tmc-latex-sections
+ (list "AMS-LATEX" "FOILTEX" "LATEX" "SLITEX" "GENERIC MACROS")
+ "The LaTeX-related sections of the catalogue.")
+
+(defvar tmc-file-buffer nil
+ "Buffer to store the catalogue.")
+
+(defvar tmc-ranges nil
+ "The current list of ranges to search.")
+
+(defvar tmc-latex-ranges nil
+ "The list of ranges corresponding to tmc-latex-sections.")
+
+(defun tmc-all-formats ()
+ "Search the whole file, not just LaTeX-related sections."
+ (interactive)
+ (if (string= (buffer-name) "tmc-entries")
+ (progn
+ (setq mode-name "Macro Catalogue Entries")
+;; Force an update to the modeline.
+ (set-buffer-modified-p (buffer-modified-p))))
+ (set-buffer tmc-file-buffer)
+;; Set the range list to be one range, the whole file.
+ (setq tmc-ranges (list (cons (point-min) (point-max)))))
+
+(defun tmc-latex-only ()
+ "Search the whole file, not just LaTeX-related sections."
+ (interactive)
+ (if (string= (buffer-name) "tmc-entries")
+ (progn
+ (setq mode-name "Macro Catalogue Entries (LaTeX only)")
+;; Force an update to the modeline.
+ (set-buffer-modified-p (buffer-modified-p))))
+ (set-buffer tmc-file-buffer)
+;; If we have not already computed the ranges coresponding to the
+;; section titles, compute them now.
+ (setq tmc-ranges
+ (or
+ tmc-latex-ranges
+ (prog2
+ (message "Locating LaTeX sections...")
+ (setq tmc-latex-ranges
+ (mapcar 'tmc-find-section tmc-latex-sections))
+ (message "done")))))
+
+
+(defun tmc-find-section (secname)
+ "Return a cons-pair containing the markers corresponding to the start
+ and finish of the requested section"
+ (goto-char (point-min))
+;; Section titles have a blank line before and after. (To distinguish
+;; them from the list of sections at the beginning.)
+ (re-search-forward
+ (concat "\n\\s-*\n%%Section [0-9]+: " secname " *$\n\\s-*\n"))
+ (cons (point)
+ (progn (re-search-forward "\n%%Section [0-9]+:" (point-max) 1)
+ (point))))
+
+(defun tmc-list-search-section (range)
+ "Search for an entry within the specified range."
+ (set-buffer (get-buffer-create "tmc-entries"))
+ (set-buffer tmc-file-buffer)
+ (goto-char (car range))
+ (while (re-search-forward
+ (concat "^"key-type": .*\\b"key"\\b") (cdr range) t)
+ (save-excursion (tmc-get-entry)))
+ (switch-to-buffer "tmc-entries")
+ (hide-body)
+ (goto-char (point-min))
+ (forward-line 1))
+
+(defun tmc-list-search (key-type key)
+ "Search for the entry in every range in the list tmc-ranges."
+ (message "Searching...")
+ (mapcar 'tmc-list-search-section tmc-ranges)
+ (message "done"))
+
+(defun tmc-list-by-author (auth)
+ "Search for entries by author."
+ (interactive "sAuthor Name: ")
+ (tmc-list-search "Author" auth))
+
+(defun tmc-list-by-keyword (key)
+ "Search for entries by keyword."
+ (interactive "sKeyword: ")
+ (tmc-list-search "Keywords" key))
+
+(defun tmc-list-by-title (name)
+ "Search for entries by title (= name)."
+ (interactive "sTitle: ")
+ (tmc-list-search "Name" name))
+
+(defun tmc-get-entry ()
+ "Insert the found entry into the tmc-entries buffer."
+ (re-search-backward "^[ ]*$")
+ (let ((tmc-entry
+ (buffer-substring (point)
+ (progn
+ (forward-line 1)(re-search-forward "^[ ]*$") (point)))))
+ (set-buffer "tmc-entries")
+ (goto-char (point-max))
+ (insert tmc-entry)))
+
+(defvar tmc-map (make-sparse-keymap)
+ "Local keymap used in TeX macro catalogue entries buffer.")
+
+
+(defun tex-macro-catalogue ()
+ "Initialise a buffer to control searching the TeX macro catalogue.
+ The available commands are:
+\\{tmc-map}"
+ (interactive)
+;; Load the file if not already loaded,
+;; without evaluating any hooks or local variables
+ (if tmc-file-buffer
+ (set-buffer tmc-file-buffer)
+;;else
+ (setq tmc-file-buffer (create-file-buffer tmc-file))
+ (set-buffer tmc-file-buffer)
+ (insert-file-contents tmc-file))
+ (setq buffer-read-only t)
+ (switch-to-buffer (get-buffer-create "tmc-entries"))
+;; Use outline mode to hide the entry bodies.
+ (outline-mode)
+ (make-local-variable 'outline-regexp)
+ (setq outline-regexp "Name")
+ (setq major-mode 'tex-macro-catalogue)
+ (tmc-all-formats)
+ (switch-to-buffer (get-buffer-create "tmc-entries"))
+ (use-local-map tmc-map)
+;; Individual customisations.
+ (run-hooks 'tmc-mode-hook)
+;; Start off with the help screen.
+ (tmc-help))
+
+(defvar tmc-help nil "The help string")
+
+(defun tmc-help ()
+ "Help for TeX macro catalogue searches."
+ (interactive)
+ (switch-to-buffer (get-buffer-create "tmc-entries"))
+;; The help string is displayed until the next key sequence.
+;; The previous contents of the buffer are then returned, unless the
+;; help is quit with \C-g.
+ (let ((p (point))
+ (tmc-temp (buffer-string)))
+ (erase-buffer)
+;; Only initialise the help string now in case the user has changed
+;; the key bindings in tmc-mode-hook.
+ (insert (or tmc-help
+ tmc-help
+ (setq tmc-help (substitute-command-keys
+"TeX Macro Catalogue
+
+Before Searching, type:
+
+ `\\[tmc-latex-only]' \
+Restrict search to LaTeX and related formats.
+ `\\[tmc-all-formats]' \
+Allow searching over the whole catalogue. (Default.)
+
+To search, type:
+ `\\[tmc-list-by-keyword]' \
+to search the catalogue by Keyword.
+ `\\[tmc-list-by-author]' \
+to search the catalogue by Author.
+ `\\[tmc-list-by-title]' \
+to search the catalogue by Title (name) of package.
+
+After a successful search, type:
+ `\\[outline-next-visible-heading]' \
+`\\[outline-previous-visible-heading]' \
+Move to next (previous) entry.
+
+ `\\[show-subtree]' `\\[show-all]' \
+Show current entry (All entries).
+ `\\[hide-subtree]' `\\[hide-body]' \
+Hide current entry (All entries).
+
+ `\\[tmc-clear]' Clear this buffer.
+ `\\[tmc-quit]' Quit.
+
+ `\\[tmc-help]' Get this help
+ "))))
+ (goto-char (point-min))
+ (sit-for 60)
+ (erase-buffer)
+ (insert tmc-temp)
+ (goto-char p)))
+
+
+(defun tmc-clear ()
+ "Clear the tmc-entries buffer."
+ (interactive)
+ (set-buffer "tmc-entries")
+ (erase-buffer))
+
+(defun tmc-quit ()
+ "Quit searching the catalogue."
+ (interactive)
+ (tmc-clear)
+ (bury-buffer tmc-file-buffer)
+ (let ((obuf (current-buffer)))
+ (switch-to-buffer (other-buffer))
+ (bury-buffer obuf)))
+
+
+;; Set up the default key bindings.
+(define-key tmc-map "S" 'show-all)
+(define-key tmc-map "H" 'hide-body)
+(define-key tmc-map "s" 'show-subtree)
+(define-key tmc-map "h" 'hide-subtree)
+(define-key tmc-map "n" 'outline-next-visible-heading)
+(define-key tmc-map "p" 'outline-previous-visible-heading)
+
+(define-key tmc-map "k" 'tmc-list-by-keyword)
+(define-key tmc-map "a" 'tmc-list-by-author)
+(define-key tmc-map "t" 'tmc-list-by-title)
+
+(define-key tmc-map "c" 'tmc-clear)
+(define-key tmc-map "q" 'tmc-quit)
+
+(define-key tmc-map "L" 'tmc-latex-only)
+(define-key tmc-map "A" 'tmc-all-formats)
+
+(define-key tmc-map "?" 'tmc-help)
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;