summaryrefslogtreecommitdiff
path: root/elpa/auctex-13.1.3/tex-bar.el
diff options
context:
space:
mode:
Diffstat (limited to 'elpa/auctex-13.1.3/tex-bar.el')
-rw-r--r--elpa/auctex-13.1.3/tex-bar.el509
1 files changed, 509 insertions, 0 deletions
diff --git a/elpa/auctex-13.1.3/tex-bar.el b/elpa/auctex-13.1.3/tex-bar.el
new file mode 100644
index 0000000..a9863f8
--- /dev/null
+++ b/elpa/auctex-13.1.3/tex-bar.el
@@ -0,0 +1,509 @@
+;;; tex-bar.el --- toolbar icons on AUCTeX in GNU emacs. -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+
+;; 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 the Free Software Foundation; either version 3 of
+;; the License, or (at your option) any later version.
+
+;; This program 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 this program; if not, write to the Free
+;; Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+;; MA 02110-1301 USA
+
+;; Author: Miguel V. S. Frasson <frasson@math.leidenuniv.nl>
+;; Keywords: tool-bar, tex, latex
+
+;;; Commentary:
+;;
+
+;; This package also needs `toolbar-x.el', and `latex.el' for the
+;; symbol-toolbar.
+
+;;; Use of this preliminary version:
+
+;; - Add `LaTeX-install-toolbar' to `LaTeX-mode-hook'.
+
+;; Special requirements for the use of experimental symbol-toolbar:
+
+;; - Customize `TeX-bar-LaTeX-buttons', adding the label
+;; `LaTeX-symbols-experimental' at the end.
+
+;; - You should have a folder called "symb-pics" with the pics of the
+;; symbols (xpm format is a good one), and the *parent* of this
+;; folder should be in `load-path'.
+;; Did you read carefully this item? I will say again: the folder
+;; "symb-pics" should *not* be in `load-path', but its *parent*.
+
+;; - each image file is named after the command that it represents in
+;; the following rules: the base name is the name of the command
+;; without the escape character "\", like \delta -> "delta.xpm";
+;; however, since in some OS filenames are case insensitive, all
+;; occurences of capital letter should be replaced by the letter
+;; plus a dash: \Rightarrow -> "R-ightarrow.xpm" --- actually, for
+;; the correct name, apply `TeX-bar-img-filename' to "Rightarrow"
+;; (TeX-bar-img-filename "Rightarrow")
+;; --> "R-ightarrow"
+;; The function `TeX-bar-img-filename' also treats special commands
+;; like `\{', `\|', etc.
+
+;; You can get the symbol images on (temporary solution)
+;; http://www.math.leidenuniv.nl/~frasson/symb-pics.tar.gz
+
+;;; Code:
+
+(require 'custom)
+
+(require 'toolbar-x)
+
+(require 'tex)
+
+;; For the symbol toolbar
+(require 'latex)
+
+;;; Standard buttons
+
+;; help strings
+(defun TeX-bar-help-from-command-list (item)
+ "Return the help string of ITEM in `TeX-command-list'.
+If there is no help, the empty string is returned."
+ (let ((help (nth 1 (memq :help (assoc item TeX-command-list)))))
+ (if help help "")))
+
+(defgroup TeX-tool-bar nil
+ "Tool bar support in AUCTeX."
+ :group 'AUCTeX)
+
+(defcustom TeX-bar-TeX-buttons
+ '(new-file open-file dired kill-buffer save-buffer cut copy paste undo
+ separator tex next-error view bibtex spell)
+ "List of buttons available in `tex-mode'.
+It should be a list in the same format of the BUTTONS parameter
+in function `toolbarx-install-toolbar', often a symbol that
+labels a button.
+
+Type `\\[TeX-bar-TeX-buttons]' for a list of available buttons.
+
+Buttons are defined in alists (labels associated to properties
+that define a button). For a list of variables that hold such
+alists, see variable `TeX-bar-TeX-all-button-alists'."
+ :type '(list (set :inline t
+ (const new-file)
+ (const open-file)
+ (const dired)
+ (const kill-buffer)
+ (const save-buffer)
+ (const write-file)
+ (const undo)
+ (const cut)
+ (const copy)
+ (const paste)
+ (const search-forward)
+ (const print-buffer)
+ (const separator)
+ (const tex)
+ (const next-error)
+ (const view)
+ (const file)
+ (const bibtex)
+ (const clean)
+ (const spell))
+ ;; (const latex-symbols-experimental)
+ (repeat (choice (symbol :tag "Label")
+ (sexp :tag "General element"))))
+ :group 'TeX-tool-bar)
+
+(defgroup TeX-tool-bar-button-definitions nil
+ "Collections of button definitions."
+ :group 'TeX-tool-bar)
+
+(defcustom TeX-bar-TeX-all-button-alists
+ '(TeX-bar-TeX-button-alist
+ toolbarx-default-toolbar-meaning-alist)
+ "List of variables that hold buttons properties.
+Each element should be a symbol bound to list in the format of
+the argument BUTTON-ALIST in function `toolbarx-install-toolbar'."
+ :type '(repeat variable)
+ :group 'TeX-tool-bar-button-definitions)
+
+(defcustom TeX-bar-TeX-button-alist
+ '((tex :image (lambda nil (if TeX-PDF-mode "pdftex" "tex"))
+ :command (progn
+ (TeX-save-document #'TeX-master-file)
+ (TeX-command "TeX" #'TeX-master-file -1))
+ :help (lambda (&rest ignored)
+ (TeX-bar-help-from-command-list "TeX")))
+ (pdftex :image "pdftex"
+ :command (progn
+ (TeX-save-document #'TeX-master-file)
+ (TeX-command "PDFTeX" #'TeX-master-file -1))
+ :help (lambda (&rest ignored)
+ (TeX-bar-help-from-command-list "PDFTeX")))
+ (next-error :image "error"
+ :command TeX-next-error
+ :enable (TeX-error-report-has-errors-p)
+ :visible (TeX-error-report-has-errors-p))
+ (view :image (lambda nil (if TeX-PDF-mode "viewpdf" "viewdvi"))
+ :command (TeX-command "View" #'TeX-master-file -1)
+ :help (lambda (&rest ignored)
+ (TeX-bar-help-from-command-list "View")))
+ (file :image "dvips"
+ :command (TeX-command "File" #'TeX-master-file -1)
+ :visible (not TeX-PDF-mode)
+ :help (lambda (&rest ignored)
+ (TeX-bar-help-from-command-list "File")))
+ (bibtex :image "bibtex"
+ :command (TeX-command "BibTeX" #'TeX-master-file -1)
+ :help (lambda (&rest ignored)
+ (TeX-bar-help-from-command-list "BibTeX")))
+ (clean :image "delete"
+ :command (TeX-command "Clean" #'TeX-master-file -1)
+ :help (lambda (&rest ignored)
+ (TeX-bar-help-from-command-list "Clean")))
+ (spell :image "spell"
+ :command (TeX-command "Spell" #'TeX-master-file -1)
+ :help (lambda (&rest ignored)
+ (TeX-bar-help-from-command-list "Spell"))))
+ ;; latex-symbols-experimental?
+ "Alist for button definitions in TeX bar.
+Value should le a list where each element is of format (KEY .
+PROPS), where KEY is a symbol that labels the button and PROPS is
+a list of properties of the button. For a description of the
+format of PROPS, please see documentation of function
+`toolbarx-install-toolbar'. This custom variable is in the same
+format of the argument MEANING-ALIST in the mentioned function."
+ :type '(alist :key-type symbol :value-type sexp)
+ :group 'TeX-tool-bar-button-definitions)
+
+(defun TeX-bar-TeX-buttons ()
+ "Display in a buffer a list of buttons for `tex-bar.el'."
+ (interactive)
+ (let ((assqs-button-alists)
+ (labels))
+ (dolist (m-alist TeX-bar-TeX-all-button-alists)
+ (setq labels nil)
+ (dolist (as (eval m-alist t))
+ (setq labels (cons (car as) labels)))
+ (setq assqs-button-alists (cons (cons m-alist (nreverse labels))
+ assqs-button-alists)))
+ (setq assqs-button-alists (nreverse assqs-button-alists))
+ ;; displaying results
+ (with-current-buffer (get-buffer-create "*TeX tool bar buttons*")
+ (erase-buffer)
+ (insert "Available buttons for TeX mode
+================================")
+ (dolist (i assqs-button-alists)
+ (insert (format "\n\n`%s' provides the following buttons:\n " (car i)))
+ (dolist (j (cdr i))
+ (insert (format " %s" j)))
+ (fill-region (point-at-bol) (point-at-eol))))
+ (display-buffer "*TeX tool bar buttons*" t)))
+
+;;; Installation of the tool bar
+;;;###autoload
+(defun TeX-install-toolbar ()
+ "Install toolbar buttons for TeX mode."
+ (interactive)
+ (add-to-list 'toolbarx-image-path
+ (expand-file-name "images" TeX-data-directory))
+ (add-hook 'TeX-PDF-mode-hook #'toolbarx-refresh nil t)
+ (toolbarx-install-toolbar TeX-bar-TeX-buttons
+ (let ((append-list))
+ (dolist (elt TeX-bar-TeX-all-button-alists)
+ (setq append-list (append append-list
+ (eval elt t))))
+ append-list)))
+
+(defcustom TeX-bar-LaTeX-buttons
+ '(new-file open-file dired kill-buffer save-buffer cut copy paste undo
+ separator latex next-error view bibtex spell)
+ "List of buttons available in `latex-mode'.
+It should be a list in the same format of the BUTTONS parameter
+in function `toolbarx-install-toolbar', often a symbol that
+labels a button.
+
+Type `\\[TeX-bar-LaTeX-buttons]' for a list of available buttons.
+
+Buttons are defined in alists (labels associated to properties
+that define a button). For a list of variables that hold such
+alists, see variable `TeX-bar-LaTeX-all-button-alists'."
+ :type '(list (set :inline t
+ (const new-file)
+ (const open-file)
+ (const dired)
+ (const kill-buffer)
+ (const save-buffer)
+ (const write-file)
+ (const undo)
+ (const cut)
+ (const copy)
+ (const paste)
+ (const search-forward)
+ (const print-buffer)
+ (const separator)
+ (const latex)
+ (const next-error)
+ (const view)
+ (const file)
+ (const bibtex)
+ (const clean)
+ (const spell)
+ (const latex-symbols-experimental))
+ (repeat (choice (symbol :tag "Label")
+ (sexp :tag "General element"))))
+ :group 'TeX-tool-bar)
+
+(defcustom TeX-bar-LaTeX-all-button-alists
+ '(TeX-bar-LaTeX-button-alist
+ toolbarx-default-toolbar-meaning-alist)
+ "List of variables that hold buttons properties.
+Each element should be a symbol bound to list in the format of
+the argument BUTTON-ALIST in function `toolbarx-install-toolbar'."
+ :type '(repeat variable)
+ :group 'TeX-tool-bar-button-definitions)
+
+(defcustom TeX-bar-LaTeX-button-alist
+ '((latex :image (lambda nil (if TeX-PDF-mode "pdftex" "tex"))
+ :command (progn
+ (TeX-save-document #'TeX-master-file)
+ (TeX-command "LaTeX" #'TeX-master-file -1))
+ :help (lambda (&rest ignored)
+ (TeX-bar-help-from-command-list "LaTeX")))
+ (pdflatex :image "pdftex"
+ :command (progn
+ (TeX-save-document #'TeX-master-file)
+ (TeX-command "PDFLaTeX" #'TeX-master-file -1))
+ :help (lambda (&rest ignored)
+ (TeX-bar-help-from-command-list "PDFLaTeX")))
+ (next-error :image "error"
+ :command TeX-next-error
+ :enable (TeX-error-report-has-errors-p)
+ :visible (TeX-error-report-has-errors-p))
+ (view :image (lambda nil (if TeX-PDF-mode "viewpdf" "viewdvi"))
+ :command (TeX-command "View" #'TeX-master-file -1)
+ :help (lambda (&rest ignored)
+ (TeX-bar-help-from-command-list "View")))
+ (file :image "dvips"
+ :command (TeX-command "File" #'TeX-master-file -1)
+ :visible (not TeX-PDF-mode)
+ :help (lambda (&rest ignored)
+ (TeX-bar-help-from-command-list "File")))
+ (bibtex :image "bibtex"
+ :command (TeX-command (if LaTeX-using-Biber "Biber" "BibTeX")
+ #'TeX-master-file -1)
+ :help (lambda (&rest ignored)
+ (TeX-bar-help-from-command-list
+ (if LaTeX-using-Biber "Biber" "BibTeX"))))
+ (clean :image "delete"
+ :command (TeX-command "Clean" #'TeX-master-file -1)
+ :help (lambda (&rest ignored)
+ (TeX-bar-help-from-command-list "Clean")))
+ (spell :image "spell"
+ :command (TeX-command "Spell" #'TeX-master-file -1)
+ :help (lambda (&rest ignored)
+ (TeX-bar-help-from-command-list "Spell")))
+ (latex-symbols-experimental . (:alias :eval-group
+ LaTeX-symbols-toolbar-switch-contents
+ LaTeX-symbols-toolbar-contents)))
+ "Alist for button definitions in TeX bar.
+Value should le a list where each element is of format (KEY .
+PROPS), where KEY is a symbol that labels the button and PROPS is
+a list of properties of the button. For a description of the
+format of PROPS, please see documentation of function
+`toolbarx-install-toolbar'. This custom variable is in the same
+format of the argument MEANING-ALIST in the mentioned function."
+ :type '(alist :key-type symbol :value-type sexp)
+ :group 'TeX-tool-bar-button-definitions)
+
+(defun TeX-bar-LaTeX-buttons ()
+ "Display in a buffer a list of buttons for `tex-bar.el'."
+ (interactive)
+ (let ((assqs-button-alists)
+ (labels))
+ (dolist (m-alist TeX-bar-LaTeX-all-button-alists)
+ (setq labels nil)
+ (dolist (as (eval m-alist t))
+ (setq labels (cons (car as) labels)))
+ (setq assqs-button-alists (cons (cons m-alist (nreverse labels))
+ assqs-button-alists)))
+ (setq assqs-button-alists (nreverse assqs-button-alists))
+ ;; displaying results
+ (with-current-buffer (get-buffer-create "*TeX tool bar buttons*")
+ (erase-buffer)
+ (insert "Available buttons for LaTeX mode
+================================")
+ (dolist (i assqs-button-alists)
+ (insert (format "\n\n`%s' provides the following buttons:\n " (car i)))
+ (dolist (j (cdr i))
+ (insert (format " %s" j)))
+ (fill-region (point-at-bol) (point-at-eol))))
+ (display-buffer "*TeX tool bar buttons*" t)))
+
+;;; Installation of the tool bar
+;;;###autoload
+(defun LaTeX-install-toolbar ()
+ "Install toolbar buttons for LaTeX mode."
+ (interactive)
+ (add-to-list 'toolbarx-image-path
+ (expand-file-name "images" TeX-data-directory))
+ (add-hook 'TeX-PDF-mode-hook #'toolbarx-refresh nil t)
+ ;; Refresh the toolbar after styles update because `LaTeX-using-Biber' value
+ ;; could have been changed. Append the refresh to the hook so it is run after
+ ;; the other styles-related changes.
+ (add-hook 'TeX-update-style-hook #'toolbarx-refresh t t)
+ (toolbarx-install-toolbar TeX-bar-LaTeX-buttons
+ (let ((append-list))
+ (dolist (elt TeX-bar-LaTeX-all-button-alists)
+ (setq append-list (append append-list
+ (eval elt t))))
+ append-list)))
+
+;;; Experimental Symbol Toolbar
+
+;;; symbol toolbar
+(defun TeX-bar-img-filename (tex-command)
+ "Return the filename (no extension) for the image button of TEX-COMMAND."
+ (let ((str-list (append tex-command nil))
+ (str-result))
+ (dolist (i str-list)
+ (cond
+ ;; capital letter -> letter + "-"
+ ((and (>= i ?A) (<= i ?Z))
+ (setq str-result (cons ?- (cons i str-result))))
+ ;; lowercase letter -> letter
+ ((and (>= i ?a) (<= i ?z))
+ (setq str-result (cons i str-result)))
+ ;; open curly brackets `{' -> "ocb--"
+ ((eq i ?{)
+ (setq str-result (cons ?o str-result))
+ (setq str-result (cons ?c str-result))
+ (setq str-result (cons ?b str-result))
+ (setq str-result (cons ?- str-result))
+ (setq str-result (cons ?- str-result)))
+ ;; close curly brackets `}' -> "ccb--"
+ ((eq i ?})
+ (setq str-result (cons ?c str-result))
+ (setq str-result (cons ?c str-result))
+ (setq str-result (cons ?b str-result))
+ (setq str-result (cons ?- str-result))
+ (setq str-result (cons ?- str-result)))
+ ;; vertical bar `|' -> "v--"
+ ((eq i ?|)
+ (setq str-result (cons ?v str-result))
+ (setq str-result (cons ?- str-result))
+ (setq str-result (cons ?- str-result)))
+ ;; slash `/' -> "s--"
+ ((eq i ?/)
+ (setq str-result (cons ?s str-result))
+ (setq str-result (cons ?- str-result))
+ (setq str-result (cons ?- str-result)))))
+ (concat (nreverse str-result))))
+
+(let* ((menu-strings-buttons-alist
+ ;; make a alist os strings with the symbol classes and store it in
+ ;; `menu-strings-alist'
+ (let* ((menu-strings-alist-temp))
+ (dolist (item-external (cdr LaTeX-math-menu)
+ (nreverse menu-strings-alist-temp))
+ (when (listp item-external)
+ ;; if first element is vector, I am supposing that all are
+ ;; vectors as well
+ (if (vectorp (cadr item-external))
+ (let* ((menu-str (car item-external))
+ (menu-buttons))
+ (dolist (button (cdr item-external))
+ (setq menu-buttons
+ (cons (list (intern (TeX-bar-img-filename
+ (aref button 0)))
+ :image
+ (concat "symb-pics/"
+ (TeX-bar-img-filename
+ (aref button 0)))
+ :help (aref button 0)
+ :command (aref button 1))
+ menu-buttons)))
+ (setq menu-buttons (nreverse menu-buttons))
+ (setq menu-strings-alist-temp
+ (cons (cons menu-str (list menu-buttons))
+ menu-strings-alist-temp)))
+ ;; if another list (therefore, up to second level menu)
+ (let ((parent-str (concat (car item-external) " ")))
+ (dolist (item-internal (cdr item-external))
+ (unless (equal (car item-internal) "Special")
+ (let* ((menu-str (concat parent-str
+ (car item-internal)))
+ (menu-buttons))
+ (dolist (button (cdr item-internal))
+ (setq menu-buttons
+ (cons (list (intern (aref button 0))
+ :image
+ (concat "symb-pics/"
+ (TeX-bar-img-filename
+ (aref button 0)))
+ :help (aref button 0)
+ :command (aref button 1))
+ menu-buttons)))
+ (setq menu-buttons (nreverse menu-buttons))
+ (setq menu-strings-alist-temp
+ (cons (cons menu-str (list menu-buttons))
+ menu-strings-alist-temp)))))))))))
+ (list-strings (let* ((list-str-temp))
+ (dolist (i menu-strings-buttons-alist
+ (nreverse list-str-temp))
+ (setq list-str-temp (cons (car i)
+ list-str-temp))))))
+ (defvar LaTeX-symbols-toolbar-visible-flag nil
+ "Non-nil means that the LaTeX symbols on toolbar are visible.
+Internal variable.")
+ (defconst LaTeX-symbols-toolbar-switch-contents
+ `(;; the on-off switch button
+ (latex-symbols-switch
+ :image (lambda nil (if LaTeX-symbols-toolbar-visible-flag
+ "ltx-symb-turn-off"
+ "ltx-symb-turn-on"))
+ :command (progn
+ (setq LaTeX-symbols-toolbar-visible-flag
+ (not LaTeX-symbols-toolbar-visible-flag))
+ (toolbarx-refresh))
+ ;; help message depends on if symb-toolbar is on or off, and in
+ ;; the name of the current class of symbols
+ :help (lambda (&rest ignore)
+ (concat "Turn "
+ (if LaTeX-symbols-toolbar-visible-flag "off " "on ")
+ "the toolbar of LaTeX symbols (current class: "
+ (nth (1- LaTeX-symbols-active-menuitem)
+ (quote ,list-strings))
+ ")")))
+ ;; the dropdown button, that also switch on the symbols
+ ,(append '(:dropdown-group)
+ list-strings
+ '(:variable
+ LaTeX-symbols-active-menuitem
+ :save offer
+ :dropdown-prepend-command
+ (setq LaTeX-symbols-toolbar-visible-flag t)
+ :dropdown-help "Select a class of symbols to be displayed"))))
+ (defconst LaTeX-symbols-toolbar-contents
+ (let* ((ltx-symb)
+ (count 0))
+ (dolist (i menu-strings-buttons-alist
+ (append (nreverse ltx-symb)
+ '(:insert
+ LaTeX-symbols-toolbar-visible-flag
+ :toolbar (bottom . top))))
+ (setq count (1+ count))
+ (setq ltx-symb
+ (cons (append (cdr i)
+ `(:insert (eq LaTeX-symbols-active-menuitem
+ ,count)))
+ ltx-symb))))))
+
+(provide 'tex-bar)
+
+;;; tex-bar.el ends here