emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/lua-mode debba6c 317/468: Use electric-indent-mode for per


From: Philip Kaludercic
Subject: [nongnu] elpa/lua-mode debba6c 317/468: Use electric-indent-mode for per-char electric indentation
Date: Thu, 5 Aug 2021 04:59:01 -0400 (EDT)

branch: elpa/lua-mode
commit debba6c8ffa3be85fd2d5d36045aa535e353c375
Author: immerrr <immerrr+lua@gmail.com>
Commit: immerrr <immerrr+lua@gmail.com>

    Use electric-indent-mode for per-char electric indentation
---
 lua-mode.el                | 32 +++++++++++++++++++++-----------
 test/test-electric-mode.el |  4 ++++
 2 files changed, 25 insertions(+), 11 deletions(-)

diff --git a/lua-mode.el b/lua-mode.el
index 1bed9fd..ea84ee5 100644
--- a/lua-mode.el
+++ b/lua-mode.el
@@ -313,16 +313,20 @@ Should be a list of strings."
 
 If the latter is nil, the keymap translates into `lua-mode-map' verbatim.")
 
+(defvar lua--electric-indent-chars
+  (mapcar #'string-to-char '("}" "]" ")")))
+
+
 (defvar lua-mode-map
   (let ((result-map (make-sparse-keymap))
         prefix-key)
-    (mapc (lambda (key_defn)
-            (define-key result-map (read-kbd-macro (car key_defn)) (cdr 
key_defn)))
-          ;; here go all the default bindings
-          ;; backquote enables evaluating certain symbols by comma
-          `(("}" . lua-electric-match)
-            ("]" . lua-electric-match)
-            (")" . lua-electric-match)))
+    (unless (boundp 'electric-indent-chars)
+      (mapc (lambda (electric-char)
+              (define-key result-map
+                (read-kbd-macro
+                 (char-to-string electric-char))
+                #'lua-electric-match))
+            lua--electric-indent-chars))
     (define-key result-map [menu-bar lua-mode] (cons "Lua" lua-mode-menu))
 
     ;; FIXME: see if the declared logic actually works
@@ -664,9 +668,9 @@ Groups 6-9 can be used in any of argument regexps."
   "Imenu generic expression for lua-mode.  See `imenu-generic-expression'.")
 
 (defvar lua-sexp-alist '(("then" . "end")
-                         ("function" . "end")
-                         ("do" . "end")
-                         ("repeat" . "until")))
+                      ("function" . "end")
+                      ("do" . "end")
+                      ("repeat" . "until")))
 
 (defvar lua-mode-abbrev-table nil
   "Abbreviation table used in lua-mode buffers.")
@@ -744,6 +748,11 @@ Groups 6-9 can be used in any of argument regexps."
   (with-no-warnings
     (lua--setq-local comment-use-global-state     t))
   (lua--setq-local imenu-generic-expression       lua-imenu-generic-expression)
+  (when (boundp 'electric-indent-chars)
+    ;; If electric-indent-chars is not defined, electric indentation is done
+    ;; via `lua-mode-map'.
+    (lua--setq-local electric-indent-chars
+                  (append electric-indent-chars lua--electric-indent-chars)))
 
 
   ;; setup menu bar entry (XEmacs style)
@@ -779,7 +788,8 @@ Groups 6-9 can be used in any of argument regexps."
 (defun lua-electric-match (arg)
   "Insert character and adjust indentation."
   (interactive "P")
-  (self-insert-command (prefix-numeric-value arg))
+  (let (blink-paren-function)
+   (self-insert-command (prefix-numeric-value arg)))
   (if lua-electric-flag
       (lua-indent-line))
   (blink-matching-open))
diff --git a/test/test-electric-mode.el b/test/test-electric-mode.el
index ed7b72a..dac4d05 100644
--- a/test/test-electric-mode.el
+++ b/test/test-electric-mode.el
@@ -11,6 +11,8 @@
   (it "works with curly braces"
     (with-lua-buffer
      (lua--setq-local blink-matching-paren nil)
+     (make-local-variable 'electric-indent-mode)
+     (electric-indent-mode 1)
      (execute-kbd-macro (kbd "return SPC foo SPC { M-j"))
      (execute-kbd-macro (kbd "'baz' M-j"))
      (expect (current-indentation) :to-be lua-indent-level)
@@ -21,6 +23,8 @@
   (it "works with parentheses"
     (with-lua-buffer
      (lua--setq-local blink-matching-paren nil)
+     (make-local-variable 'electric-indent-mode)
+     (electric-indent-mode 1)
      (execute-kbd-macro (kbd "return SPC foo SPC ( M-j"))
      (execute-kbd-macro (kbd "'baz' M-j"))
      (should (eq (current-indentation) lua-indent-level))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]