diff options
author | Blendoit <blendoit@gmail.com> | 2020-08-01 15:18:40 -0700 |
---|---|---|
committer | Blendoit <blendoit@gmail.com> | 2020-08-01 15:18:40 -0700 |
commit | 374ae3de24187512adddf01a56e5eb52c79db65f (patch) | |
tree | 847adf6824b56394f5a040ba45863e2dbdceac70 /elpa/smartparens-20200324.2147/smartparens-latex.el | |
parent | 54fbf6576cf2dd94ef5af332a6075723a9dfa8b3 (diff) |
Include contents of elpa/ sources + theme update.
Diffstat (limited to 'elpa/smartparens-20200324.2147/smartparens-latex.el')
-rw-r--r-- | elpa/smartparens-20200324.2147/smartparens-latex.el | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/elpa/smartparens-20200324.2147/smartparens-latex.el b/elpa/smartparens-20200324.2147/smartparens-latex.el new file mode 100644 index 0000000..61d9a00 --- /dev/null +++ b/elpa/smartparens-20200324.2147/smartparens-latex.el @@ -0,0 +1,192 @@ +;;; smartparens-latex.el --- Additional configuration for (La)TeX based modes. -*- lexical-binding: t; -*- + +;; Copyright (C) 2013-2016 Matus Goljer + +;; Author: Matus Goljer <matus.goljer@gmail.com> +;; Maintainer: Matus Goljer <matus.goljer@gmail.com> +;; Created: 14 Feb 2013 +;; Keywords: abbrev convenience editing +;; URL: https://github.com/Fuco1/smartparens + +;; This file is not part of GNU Emacs. + +;;; License: + +;; This file is part of Smartparens. + +;; Smartparens 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. + +;; Smartparens 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 Smartparens. If not, see <http://www.gnu.org/licenses/>. + +;;; Commentary: + +;; This file provides some additional configuration for (La)TeX based +;; modes. To use it, simply add: +;; +;; (require 'smartparens-latex) +;; +;; into your configuration. You can use this in conjunction with the +;; default config or your own configuration. + +;; If you have good ideas about what should be added please file an +;; issue on the github tracker. + +;; For more info, see github readme at +;; https://github.com/Fuco1/smartparens + +;;; Code: + +(require 'smartparens) + +(defun sp-latex-insert-spaces-inside-pair (_id action _context) + "ID, ACTION, CONTEXT." + (when (eq action 'insert) + (insert " ") + (backward-char 1)) + (when (and (eq action 'wrap) + (save-excursion + (goto-char (sp-get sp-last-wrapped-region :beg-in)) + (not (sp--looking-back-p "[[{(]")))) + (save-excursion + (goto-char (sp-get sp-last-wrapped-region :end-in)) + (insert " ") + (goto-char (sp-get sp-last-wrapped-region :beg-in)) + (insert " ")))) + +(defun sp-latex-skip-match-apostrophe (ms _mb me) + "MS, MB, ME." + (when (equal ms "'") + (save-excursion + (goto-char me) + (looking-at-p "\\sw")))) + +(defun sp-latex-skip-double-quote (_id action _context) + "ID, ACTION, CONTEXT." + (when (eq action 'insert) + (when (looking-at-p "''''") + (delete-char -2) + (delete-char 2) + (forward-char 2)))) + +(defun sp-latex-point-after-backslash (id action _context) + "Return t if point follows a backslash, nil otherwise. +This predicate is only tested on \"insert\" action. +ID, ACTION, CONTEXT." + (when (eq action 'insert) + (let ((trigger (sp-get-pair id :trigger))) + (looking-back (concat "\\\\" (regexp-quote (if trigger trigger id))) nil)))) + +(add-to-list 'sp-navigate-skip-match + '((tex-mode plain-tex-mode latex-mode) . sp--backslash-skip-match)) + +(sp-with-modes '( + tex-mode + plain-tex-mode + latex-mode + LaTeX-mode + ) + (sp-local-pair "`" "'" + :actions '(:rem autoskip) + :skip-match 'sp-latex-skip-match-apostrophe + :unless '(sp-latex-point-after-backslash sp-in-math-p)) + ;; math modes, yay. The :actions are provided automatically if + ;; these pairs do not have global definitions. + (sp-local-pair "$" "$") + (sp-local-pair "\\[" "\\]" + :unless '(sp-latex-point-after-backslash)) + + ;; disable useless pairs. + (sp-local-pair "\\\\(" nil :actions nil) + (sp-local-pair "'" nil :actions nil) + (sp-local-pair "\\\"" nil :actions nil) + + ;; quote should insert ``'' instead of double quotes. If we ever + ;; need to insert ", C-q is our friend. + (sp-local-pair "``" "''" + :trigger "\"" + :unless '(sp-latex-point-after-backslash sp-in-math-p) + :post-handlers '(sp-latex-skip-double-quote)) + + ;; add the prefix function sticking to {} pair + (sp-local-pair "{" nil :prefix "\\\\\\(\\sw\\|\\s_\\)*") + + ;; do not add more space when slurping + (sp-local-pair "{" "}") + (sp-local-pair "(" ")") + (sp-local-pair "[" "]") + + ;; pairs for big brackets. Needs more research on what pairs are + ;; useful to add here. Post suggestions if you know some. + (sp-local-pair "\\left(" "\\right)" + :trigger "\\l(" + :when '(sp-in-math-p) + :post-handlers '(sp-latex-insert-spaces-inside-pair)) + (sp-local-pair "\\left[" "\\right]" + :trigger "\\l[" + :when '(sp-in-math-p) + :post-handlers '(sp-latex-insert-spaces-inside-pair)) + (sp-local-pair "\\left\\{" "\\right\\}" + :trigger "\\l{" + :when '(sp-in-math-p) + :post-handlers '(sp-latex-insert-spaces-inside-pair)) + (sp-local-pair "\\left|" "\\right|" + :trigger "\\l|" + :when '(sp-in-math-p) + :post-handlers '(sp-latex-insert-spaces-inside-pair)) + (sp-local-pair "\\bigl(" "\\bigr)" + :post-handlers '(sp-latex-insert-spaces-inside-pair)) + (sp-local-pair "\\biggl(" "\\biggr)" + :post-handlers '(sp-latex-insert-spaces-inside-pair)) + (sp-local-pair "\\Bigl(" "\\Bigr)" + :post-handlers '(sp-latex-insert-spaces-inside-pair)) + (sp-local-pair "\\Biggl(" "\\Biggr)" + :post-handlers '(sp-latex-insert-spaces-inside-pair)) + (sp-local-pair "\\bigl[" "\\bigr]" + :post-handlers '(sp-latex-insert-spaces-inside-pair)) + (sp-local-pair "\\biggl[" "\\biggr]" + :post-handlers '(sp-latex-insert-spaces-inside-pair)) + (sp-local-pair "\\Bigl[" "\\Bigr]" + :post-handlers '(sp-latex-insert-spaces-inside-pair)) + (sp-local-pair "\\Biggl[" "\\Biggr]" + :post-handlers '(sp-latex-insert-spaces-inside-pair)) + (sp-local-pair "\\bigl\\{" "\\bigr\\}" + :post-handlers '(sp-latex-insert-spaces-inside-pair)) + (sp-local-pair "\\biggl\\{" "\\biggr\\}" + :post-handlers '(sp-latex-insert-spaces-inside-pair)) + (sp-local-pair "\\Bigl\\{" "\\Bigr\\}" + :post-handlers '(sp-latex-insert-spaces-inside-pair)) + (sp-local-pair "\\Biggl\\{" "\\Biggr\\}" + :post-handlers '(sp-latex-insert-spaces-inside-pair)) + (sp-local-pair "\\lfloor" "\\rfloor" + :post-handlers '(sp-latex-insert-spaces-inside-pair)) + (sp-local-pair "\\lceil" "\\rceil" + :post-handlers '(sp-latex-insert-spaces-inside-pair)) + (sp-local-pair "\\langle" "\\rangle" + :post-handlers '(sp-latex-insert-spaces-inside-pair)) + (sp-local-pair "\\lVert" "\\rVert" + :when '(sp-in-math-p) + :trigger "\\lVert" + :post-handlers '(sp-latex-insert-spaces-inside-pair)) + (sp-local-pair "\\lvert" "\\rvert" + :when '(sp-in-math-p) + :trigger "\\lvert" + :post-handlers '(sp-latex-insert-spaces-inside-pair)) + + ;; some common wrappings + (sp-local-tag "\"" "``" "''" :actions '(wrap)) + (sp-local-tag "\\b" "\\begin{_}" "\\end{_}") + (sp-local-tag "bi" "\\begin{itemize}" "\\end{itemize}") + (sp-local-tag "be" "\\begin{enumerate}" "\\end{enumerate}")) + +(provide 'smartparens-latex) + +;;; smartparens-latex.el ends here |