forked from Github/emacs
Compare commits
1 commit
master
...
scratch/re
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7c0d312bcb |
2 changed files with 45 additions and 66 deletions
|
|
@ -485,19 +485,13 @@ function to control that."
|
|||
(c-hungry-delete-forward)
|
||||
(c-hungry-delete-backwards)))
|
||||
|
||||
(defvar c--disable-fix-of-bug-33794 nil
|
||||
"If non-nil disable alans controversional fix of 33794.
|
||||
This fix breaks most features of `electric-pair-mode' by
|
||||
incompletely reimplementing in in this mode.")
|
||||
|
||||
(defmacro c--with-post-self-insert-hook-maybe (&rest body)
|
||||
`(let ((post-self-insert-hook
|
||||
(if c--disable-fix-of-bug-33794
|
||||
post-self-insert-hook
|
||||
;; Acording to AM: Disable random functionality to get
|
||||
;; defined functionality from `self-insert-command'
|
||||
nil)))
|
||||
,@body))
|
||||
(defun c-self-insert-command (arg)
|
||||
;; If `c-auto-newline' is on we use our own implementation of
|
||||
;; `electric-pair-mode' and `electric-layout-mode' doesn't make
|
||||
;; sense.
|
||||
(let ((electric-layout-mode (not c-auto-newline))
|
||||
(electric-pair-mode (not c-auto-newline)))
|
||||
(self-insert-command arg)))
|
||||
|
||||
(defun c-electric-pound (arg)
|
||||
"Insert a \"#\".
|
||||
|
|
@ -518,8 +512,7 @@ inside a literal or a macro, nothing special happens."
|
|||
(eq (char-before) ?\\))))
|
||||
(c-in-literal)))
|
||||
;; do nothing special
|
||||
(c--with-post-self-insert-hook-maybe
|
||||
(self-insert-command (prefix-numeric-value arg)))
|
||||
(c-self-insert-command (prefix-numeric-value arg))
|
||||
;; place the pound character at the left edge
|
||||
(let ((pos (- (point-max) (point)))
|
||||
(bolp (bolp)))
|
||||
|
|
@ -871,37 +864,35 @@ settings of `c-cleanup-list' are done."
|
|||
|
||||
;; Insert the brace. Note that expand-abbrev might reindent
|
||||
;; the line here if there's a preceding "else" or something.
|
||||
(c--with-post-self-insert-hook-maybe
|
||||
(self-insert-command (prefix-numeric-value arg)))
|
||||
(c-self-insert-command (prefix-numeric-value arg))
|
||||
|
||||
;; Emulate `electric-pair-mode'.
|
||||
(unless c--disable-fix-of-bug-33794
|
||||
(when (and (boundp 'electric-pair-mode)
|
||||
electric-pair-mode)
|
||||
(let ((size (buffer-size))
|
||||
(c-in-electric-pair-functionality t)
|
||||
post-self-insert-hook)
|
||||
(electric-pair-post-self-insert-function)
|
||||
(setq got-pair-} (and at-eol
|
||||
(eq (c-last-command-char) ?{)
|
||||
(eq (char-after) ?}))
|
||||
electric-pair-deletion (< (buffer-size) size))))
|
||||
|
||||
;; Perform any required CC Mode electric actions.
|
||||
(cond
|
||||
((or literal arg (not c-electric-flag) active-region))
|
||||
((not at-eol)
|
||||
(c-indent-line))
|
||||
(electric-pair-deletion
|
||||
(c-indent-line)
|
||||
(c-do-brace-electrics 'ignore nil))
|
||||
(t (c-do-brace-electrics nil nil)
|
||||
(when got-pair-}
|
||||
(save-excursion
|
||||
(forward-char)
|
||||
(c-do-brace-electrics 'assume 'ignore))
|
||||
(c-indent-line)))))
|
||||
(when (and (boundp 'electric-pair-mode)
|
||||
electric-pair-mode
|
||||
c-auto-newline)
|
||||
(let ((size (buffer-size))
|
||||
(c-in-electric-pair-functionality t)
|
||||
post-self-insert-hook)
|
||||
(electric-pair-post-self-insert-function)
|
||||
(setq got-pair-} (and at-eol
|
||||
(eq (c-last-command-char) ?{)
|
||||
(eq (char-after) ?}))
|
||||
electric-pair-deletion (< (buffer-size) size))))
|
||||
|
||||
;; Perform any required CC Mode electric actions.
|
||||
(cond
|
||||
((or literal arg (not c-electric-flag) active-region))
|
||||
((not at-eol)
|
||||
(c-indent-line))
|
||||
(electric-pair-deletion
|
||||
(c-indent-line)
|
||||
(c-do-brace-electrics 'ignore nil))
|
||||
(t (c-do-brace-electrics nil nil)
|
||||
(when got-pair-}
|
||||
(save-excursion
|
||||
(forward-char)
|
||||
(c-do-brace-electrics 'assume 'ignore))
|
||||
(c-indent-line))))
|
||||
|
||||
|
||||
;; blink the paren
|
||||
|
|
@ -960,8 +951,7 @@ is inhibited."
|
|||
c-electric-flag
|
||||
(eq (c-last-command-char) ?/)
|
||||
(eq (char-before) (if literal ?* ?/))))
|
||||
(c--with-post-self-insert-hook-maybe
|
||||
(self-insert-command (prefix-numeric-value arg)))
|
||||
(c-self-insert-command (prefix-numeric-value arg))
|
||||
(if indentp
|
||||
(indent-according-to-mode))))
|
||||
|
||||
|
|
@ -974,8 +964,7 @@ supplied, point is inside a literal, or `c-syntactic-indentation' is nil,
|
|||
this indentation is inhibited."
|
||||
|
||||
(interactive "*P")
|
||||
(c--with-post-self-insert-hook-maybe
|
||||
(self-insert-command (prefix-numeric-value arg)))
|
||||
(c-self-insert-command (prefix-numeric-value arg))
|
||||
;; if we are in a literal, or if arg is given do not reindent the
|
||||
;; current line, unless this star introduces a comment-only line.
|
||||
(if (c-save-buffer-state ()
|
||||
|
|
@ -1022,8 +1011,7 @@ settings of `c-cleanup-list'."
|
|||
(setq lim (c-most-enclosing-brace (c-parse-state))
|
||||
literal (c-in-literal lim)))
|
||||
|
||||
(c--with-post-self-insert-hook-maybe
|
||||
(self-insert-command (prefix-numeric-value arg)))
|
||||
(c-self-insert-command (prefix-numeric-value arg))
|
||||
|
||||
(if (and c-electric-flag (not literal) (not arg))
|
||||
;; do all cleanups and newline insertions if c-auto-newline is on.
|
||||
|
|
@ -1092,8 +1080,7 @@ reindented unless `c-syntactic-indentation' is nil.
|
|||
newlines is-scope-op
|
||||
;; shut this up
|
||||
(c-echo-syntactic-information-p nil))
|
||||
(c--with-post-self-insert-hook-maybe
|
||||
(self-insert-command (prefix-numeric-value arg)))
|
||||
(c-self-insert-command (prefix-numeric-value arg))
|
||||
;; Any electric action?
|
||||
(if (and c-electric-flag (not literal) (not arg))
|
||||
;; Unless we're at EOL, only re-indentation happens.
|
||||
|
|
@ -1186,8 +1173,7 @@ numeric argument is supplied, or the point is inside a literal."
|
|||
(let ((c-echo-syntactic-information-p nil)
|
||||
final-pos found-delim case-fold-search)
|
||||
|
||||
(c--with-post-self-insert-hook-maybe
|
||||
(self-insert-command (prefix-numeric-value arg)))
|
||||
(c-self-insert-command (prefix-numeric-value arg))
|
||||
(setq final-pos (point))
|
||||
|
||||
;;;; 2010-01-31: There used to be code here to put a syntax-table text
|
||||
|
|
@ -1252,8 +1238,7 @@ newline cleanups are done if appropriate; see the variable `c-cleanup-list'."
|
|||
;; shut this up
|
||||
(c-echo-syntactic-information-p nil)
|
||||
case-fold-search)
|
||||
(c--with-post-self-insert-hook-maybe
|
||||
(self-insert-command (prefix-numeric-value arg)))
|
||||
(c-self-insert-command (prefix-numeric-value arg))
|
||||
|
||||
(if (and (not arg) (not literal))
|
||||
(let* ( ;; We want to inhibit blinking the paren since this will
|
||||
|
|
@ -1303,11 +1288,11 @@ newline cleanups are done if appropriate; see the variable `c-cleanup-list'."
|
|||
(insert-and-inherit "} catch (")))
|
||||
|
||||
;; Apply `electric-pair-mode' stuff.
|
||||
(unless c--disable-fix-of-bug-33794
|
||||
(when (and (boundp 'electric-pair-mode)
|
||||
electric-pair-mode)
|
||||
(let (post-self-insert-hook)
|
||||
(electric-pair-post-self-insert-function))))
|
||||
(when (and c-auto-newline
|
||||
(boundp 'electric-pair-mode)
|
||||
electric-pair-mode)
|
||||
(let (post-self-insert-hook)
|
||||
(electric-pair-post-self-insert-function)))
|
||||
|
||||
;; Check for clean-ups at function calls. These two DON'T need
|
||||
;; `c-electric-flag' or `c-syntactic-indentation' set.
|
||||
|
|
|
|||
|
|
@ -47,14 +47,10 @@
|
|||
(declare (indent defun) (debug t))
|
||||
`(call-with-saved-electric-modes #'(lambda () ,@body)))
|
||||
|
||||
;; Defined in lisp/progmodes/cc-cmds.el
|
||||
(defvar c--disable-fix-of-bug-33794 t)
|
||||
|
||||
(defun electric-pair-test-for (fixture where char expected-string
|
||||
expected-point mode bindings fixture-fn)
|
||||
(with-temp-buffer
|
||||
(funcall mode)
|
||||
(setq-local c--disable-fix-of-bug-33794 t)
|
||||
(insert fixture)
|
||||
(save-electric-modes
|
||||
(let ((last-command-event char)
|
||||
|
|
@ -825,7 +821,6 @@ baz\"\""
|
|||
(electric-layout-local-mode 1)
|
||||
(electric-pair-local-mode 1)
|
||||
(electric-indent-local-mode 1)
|
||||
(setq-local c--disable-fix-of-bug-33794 t)
|
||||
(setq-local electric-layout-rules
|
||||
'((?\{ . (after-stay after))))
|
||||
(insert "int main () ")
|
||||
|
|
@ -839,7 +834,6 @@ baz\"\""
|
|||
(electric-layout-local-mode 1)
|
||||
(electric-pair-local-mode 1)
|
||||
(electric-indent-local-mode 1)
|
||||
(setq-local c--disable-fix-of-bug-33794 t)
|
||||
(setq-local electric-layout-rules
|
||||
'((?\{ . (before after-stay after))))
|
||||
(insert "int main () ")
|
||||
|
|
|
|||
Loading…
Reference in a new issue