diff options
Diffstat (limited to 'elpa/auctex-13.1.3/tex-bar.el')
-rw-r--r-- | elpa/auctex-13.1.3/tex-bar.el | 509 |
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 |