summaryrefslogtreecommitdiff
path: root/elpa/smartparens-20200324.2147/smartparens-latex.el
diff options
context:
space:
mode:
Diffstat (limited to 'elpa/smartparens-20200324.2147/smartparens-latex.el')
-rw-r--r--elpa/smartparens-20200324.2147/smartparens-latex.el192
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
Copyright 2019--2024 Marius PETER