summaryrefslogtreecommitdiff
path: root/rust-mode.el
diff options
context:
space:
mode:
authorNathan Moreau <nathan.moreau@m4x.org>2019-10-31 19:46:26 +0100
committerGitHub <noreply@github.com>2019-10-31 19:46:26 +0100
commit70ff9a027c51118ebba07c9be832c3efa7a7df67 (patch)
tree8ee2d1f5f7d7b70a15a485335098c1bf9e46387d /rust-mode.el
parentc0cc6dc75754fd607572a6fd72945d87729d0174 (diff)
downloadrust-mode-70ff9a027c51118ebba07c9be832c3efa7a7df67.tar.gz
electric-pair-mode: prevent self-insert of `>' when already inserted. (#337)
Diffstat (limited to 'rust-mode.el')
-rw-r--r--rust-mode.el9
1 files changed, 9 insertions, 0 deletions
diff --git a/rust-mode.el b/rust-mode.el
index 5c68640..dd50f18 100644
--- a/rust-mode.el
+++ b/rust-mode.el
@@ -21,6 +21,7 @@
(require 'json)
(defvar electric-pair-inhibit-predicate)
+(defvar electric-pair-skip-self)
(defvar electric-indent-chars)
(defvar rust-buffer-project)
@@ -1049,6 +1050,13 @@ This wraps the default defined by `electric-pair-inhibit-predicate'."
(rust-is-lt-char-operator)))
(funcall (default-value 'electric-pair-inhibit-predicate) char)))
+(defun rust-electric-pair-skip-self-wrap (char)
+ "Skip CHAR instead of inserting a second closing character.
+This wraps the default defined by `electric-pair-skip-self'."
+ (or
+ (= ?> char)
+ (funcall (default-value 'electric-pair-skip-self) char)))
+
(defun rust-ordinary-lt-gt-p ()
"Test whether the `<' or `>' at point is an ordinary operator of some kind.
@@ -1625,6 +1633,7 @@ Return the created process."
(setq-local end-of-defun-function 'rust-end-of-defun)
(setq-local parse-sexp-lookup-properties t)
(setq-local electric-pair-inhibit-predicate 'rust-electric-pair-inhibit-predicate-wrap)
+ (setq-local electric-pair-skip-self 'rust-electric-pair-skip-self-wrap)
(add-hook 'before-save-hook 'rust-before-save-hook nil t)
(add-hook 'after-save-hook 'rust-after-save-hook nil t)