emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] trunk r114562: * lisp/electric.el (electric-indent-inhibit


From: Stefan Monnier
Subject: [Emacs-diffs] trunk r114562: * lisp/electric.el (electric-indent-inhibit): New var.
Date: Mon, 07 Oct 2013 18:51:33 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 114562
revision-id: address@hidden
parent: address@hidden
committer: Stefan Monnier <address@hidden>
branch nick: trunk
timestamp: Mon 2013-10-07 14:51:26 -0400
message:
  * lisp/electric.el (electric-indent-inhibit): New var.
  (electric-indent-post-self-insert-function): Use it.
  * lisp/progmodes/python.el (python-mode): Set it.
modified:
  lisp/ChangeLog                 changelog-20091113204419-o5vbwnq5f7feedwu-1432
  lisp/electric.el               electric.el-20091113204419-o5vbwnq5f7feedwu-47
  lisp/progmodes/python.el       python.el-20091113204419-o5vbwnq5f7feedwu-3008
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2013-10-07 16:56:51 +0000
+++ b/lisp/ChangeLog    2013-10-07 18:51:26 +0000
@@ -1,5 +1,9 @@
 2013-10-07  Stefan Monnier  <address@hidden>
 
+       * electric.el (electric-indent-inhibit): New var.
+       (electric-indent-post-self-insert-function): Use it.
+       * progmodes/python.el (python-mode): Set it.
+
        * progmodes/ruby-mode.el (ruby-smie-rules): Tweak handling of
        open braces.
 

=== modified file 'lisp/electric.el'
--- a/lisp/electric.el  2013-09-23 02:58:02 +0000
+++ b/lisp/electric.el  2013-10-07 18:51:26 +0000
@@ -187,7 +187,7 @@
                            (eq (char-before) last-command-event)))))
       pos)))
 
-;; Electric indentation.
+;;; Electric indentation.
 
 ;; Autoloading variables is generally undesirable, but major modes
 ;; should usually set this variable by adding elements to the default
@@ -202,6 +202,11 @@
 point right after that char, and it should return t to cause indentation,
 `no-indent' to prevent indentation or nil to let other functions decide.")
 
+(defvar-local electric-indent-inhibit nil
+  "If non-nil, reindentation is not appropriate for this buffer.
+This should be set by major modes such as `python-mode' since
+Python does not lend itself to fully automatic indentation.")
+
 (defun electric-indent-post-self-insert-function ()
   ;; FIXME: This reindents the current line, but what we really want instead is
   ;; to reindent the whole affected text.  That's the current line for simple
@@ -229,12 +234,13 @@
                     (unless (eq act 'do-indent) (nth 8 (syntax-ppss))))))))
       ;; For newline, we want to reindent both lines and basically behave like
       ;; reindent-then-newline-and-indent (whose code we hence copied).
-      (when (< (1- pos) (line-beginning-position))
+      (when (<= pos (line-beginning-position))
         (let ((before (copy-marker (1- pos) t)))
           (save-excursion
-            (unless (memq indent-line-function
-                          '(indent-relative indent-to-left-margin
-                                            indent-relative-maybe))
+            (unless (or (memq indent-line-function
+                              '(indent-relative indent-to-left-margin
+                                                indent-relative-maybe))
+                        electric-indent-inhibit)
               ;; Don't reindent the previous line if the indentation function
               ;; is not a real one.
               (goto-char before)
@@ -248,7 +254,9 @@
             ;; Remove the trailing whitespace after indentation because
             ;; indentation may (re)introduce the whitespace.
             (delete-horizontal-space t))))
-      (unless (memq indent-line-function '(indent-to-left-margin))
+      (unless (or (memq indent-line-function '(indent-to-left-margin))
+                  (and electric-indent-inhibit
+                       (> pos (line-beginning-position))))
         (indent-according-to-mode)))))
 
 ;;;###autoload
@@ -281,7 +289,7 @@
                          (delq #'electric-indent-post-self-insert-function
                                (cdr bp))))))))
 
-;; Electric pairing.
+;;; Electric pairing.
 
 (defcustom electric-pair-pairs
   '((?\" . ?\"))
@@ -414,7 +422,7 @@
     (remove-hook 'self-insert-uses-region-functions
                  #'electric-pair-will-use-region)))
 
-;; Automatically add newlines after/before/around some chars.
+;;; Electric newlines after/before/around some chars.
 
 (defvar electric-layout-rules '()
   "List of rules saying where to automatically insert newlines.

=== modified file 'lisp/progmodes/python.el'
--- a/lisp/progmodes/python.el  2013-09-11 06:44:35 +0000
+++ b/lisp/progmodes/python.el  2013-10-07 18:51:26 +0000
@@ -3544,6 +3544,8 @@
       (reverse acc))))
 
 
+(defvar electric-indent-inhibit)
+
 ;;;###autoload
 (define-derived-mode python-mode prog-mode "Python"
   "Major mode for editing Python files.
@@ -3572,7 +3574,9 @@
   (set (make-local-variable 'indent-line-function)
        #'python-indent-line-function)
   (set (make-local-variable 'indent-region-function) #'python-indent-region)
-
+  ;; Because indentation is not redundant, we cannot safely reindent code.
+  (setq-local electric-indent-inhibit t)
+  
   (set (make-local-variable 'paragraph-start) "\\s-*$")
   (set (make-local-variable 'fill-paragraph-function)
        'python-fill-paragraph)


reply via email to

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