X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/333f9019e29e9b6de3a7ec07448be1d364ba540b..da3b328da0db9f396bcf8dc9a5ce1653c91be17d:/lisp/progmodes/cc-cmds.el diff --git a/lisp/progmodes/cc-cmds.el b/lisp/progmodes/cc-cmds.el index 686695bc83..dc6ed1348d 100644 --- a/lisp/progmodes/cc-cmds.el +++ b/lisp/progmodes/cc-cmds.el @@ -1,6 +1,6 @@ ;;; cc-cmds.el --- user level commands for CC Mode -;; Copyright (C) 1985, 1987, 1992-2011 Free Software Foundation, Inc. +;; Copyright (C) 1985, 1987, 1992-2013 Free Software Foundation, Inc. ;; Authors: 2003- Alan Mackenzie ;; 1998- Martin Stjernholm @@ -45,7 +45,6 @@ (cc-require 'cc-engine) ;; Silence the compiler. -(cc-bytecomp-defun delete-forward-p) ; XEmacs (cc-bytecomp-defvar filladapt-mode) ; c-fill-paragraph contains a kludge ; which looks at this. @@ -310,7 +309,7 @@ left out. Turning on auto-newline automatically enables electric indentation. When the auto-newline feature is enabled (indicated by \"/la\" on the -modeline after the mode name) newlines are automatically inserted +mode line after the mode name) newlines are automatically inserted after special characters such as brace, comma, semi-colon, and colon." (interactive "P") (setq c-auto-newline @@ -329,7 +328,7 @@ positive, turns it off when negative, and just toggles it when zero or left out. When the hungry-delete-key feature is enabled (indicated by \"/h\" on -the modeline after the mode name) the delete key gobbles all preceding +the mode line after the mode name) the delete key gobbles all preceding whitespace in one fell swoop." (interactive "P") (setq c-hungry-delete-key (c-calculate-state arg c-hungry-delete-key)) @@ -475,7 +474,7 @@ inside a literal or a macro, nothing special happens." (bolp (bolp))) (beginning-of-line) (delete-horizontal-space) - (insert last-command-event) + (insert (c-last-command-char)) (and (not bolp) (goto-char (- (point-max) pos))) ))) @@ -493,13 +492,16 @@ inside a literal or a macro, nothing special happens." (insert-char ?\n 1) ;; In AWK (etc.) or in a macro, make sure this CR hasn't changed ;; the syntax. (There might already be an escaped NL there.) - (when (or (c-at-vsemi-p (1- (point))) - (let ((pt (point))) - (save-excursion - (backward-char) - (and (c-beginning-of-macro) - (progn (c-end-of-macro) - (< (point) pt)))))) + (when (or + (save-excursion + (c-skip-ws-backward (c-point 'bopl)) + (c-at-vsemi-p)) + (let ((pt (point))) + (save-excursion + (backward-char) + (and (c-beginning-of-macro) + (progn (c-end-of-macro) + (< (point) pt)))))) (backward-char) (insert-char ?\\ 1) (forward-char)) @@ -679,7 +681,7 @@ settings of `c-cleanup-list' are done." ;; We want to inhibit blinking the paren since this would be ;; most disruptive. We'll blink it ourselves later on. (old-blink-paren blink-paren-function) - blink-paren-function) + blink-paren-function case-fold-search) (c-save-buffer-state () (setq safepos (c-safe-position (point) (c-parse-state)) @@ -734,7 +736,7 @@ settings of `c-cleanup-list' are done." ;; `}': clean up empty defun braces (when (c-save-buffer-state () (and (memq 'empty-defun-braces c-cleanup-list) - (eq last-command-event ?\}) + (eq (c-last-command-char) ?\}) (c-intersect-lists '(defun-close class-close inline-close) syntax) (progn @@ -750,14 +752,14 @@ settings of `c-cleanup-list' are done." ;; `}': compact to a one-liner defun? (save-match-data (when - (and (eq last-command-event ?\}) + (and (eq (c-last-command-char) ?\}) (memq 'one-liner-defun c-cleanup-list) (c-intersect-lists '(defun-close) syntax) (c-try-one-liner)) (setq here (- (point-max) pos)))) ;; `{': clean up brace-else-brace and brace-elseif-brace - (when (eq last-command-event ?\{) + (when (eq (c-last-command-char) ?\{) (cond ((and (memq 'brace-else-brace c-cleanup-list) (re-search-backward @@ -811,7 +813,7 @@ settings of `c-cleanup-list' are done." )))) ;; blink the paren - (and (eq last-command-event ?\}) + (and (eq (c-last-command-char) ?\}) (not executing-kbd-macro) old-blink-paren (save-excursion @@ -848,7 +850,7 @@ is inhibited." (when (and (not arg) (eq literal 'c) (memq 'comment-close-slash c-cleanup-list) - (eq last-command-event ?/) + (eq (c-last-command-char) ?/) (looking-at (concat "[ \t]*\\(" (regexp-quote comment-end) "\\)?$")) ; (eq c-block-comment-ender "*/") ; C-style comments ALWAYS end in */ @@ -864,7 +866,7 @@ is inhibited." (setq indentp (and (not arg) c-syntactic-indentation c-electric-flag - (eq last-command-event ?/) + (eq (c-last-command-char) ?/) (eq (char-before) (if literal ?* ?/)))) (self-insert-command (prefix-numeric-value arg)) (if indentp @@ -938,10 +940,10 @@ settings of `c-cleanup-list'." (let ((pos (- (point-max) (point)))) (if (c-save-buffer-state () (and (or (and - (eq last-command-event ?,) + (eq (c-last-command-char) ?,) (memq 'list-close-comma c-cleanup-list)) (and - (eq last-command-event ?\;) + (eq (c-last-command-char) ?\;) (memq 'defun-close-semi c-cleanup-list))) (progn (forward-char -1) @@ -1086,7 +1088,7 @@ numeric argument is supplied, or the point is inside a literal." (interactive "*P") (let ((c-echo-syntactic-information-p nil) - final-pos close-paren-inserted found-delim) + final-pos close-paren-inserted found-delim case-fold-search) (self-insert-command (prefix-numeric-value arg)) (setq final-pos (point)) @@ -1098,7 +1100,7 @@ numeric argument is supplied, or the point is inside a literal." ;; Indent the line if appropriate. (when (and c-electric-flag c-syntactic-indentation c-recognize-<>-arglists) (setq found-delim - (if (eq last-command-event ?<) + (if (eq (c-last-command-char) ?<) ;; If a <, basically see if it's got "template" before it ..... (or (and (progn (backward-char) @@ -1172,7 +1174,8 @@ newline cleanups are done if appropriate; see the variable `c-cleanup-list'." (interactive "*P") (let ((literal (c-save-buffer-state () (c-in-literal))) ;; shut this up - (c-echo-syntactic-information-p nil)) + (c-echo-syntactic-information-p nil) + case-fold-search) (self-insert-command (prefix-numeric-value arg)) (if (and (not arg) (not literal)) @@ -1191,7 +1194,7 @@ newline cleanups are done if appropriate; see the variable `c-cleanup-list'." ;; clean up brace-elseif-brace (when (and (memq 'brace-elseif-brace c-cleanup-list) - (eq last-command-event ?\() + (eq (c-last-command-char) ?\() (re-search-backward (concat "}" "\\([ \t\n]\\|\\\\\n\\)*" @@ -1209,7 +1212,7 @@ newline cleanups are done if appropriate; see the variable `c-cleanup-list'." ;; clean up brace-catch-brace (when (and (memq 'brace-catch-brace c-cleanup-list) - (eq last-command-event ?\() + (eq (c-last-command-char) ?\() (re-search-backward (concat "}" "\\([ \t\n]\\|\\\\\n\\)*" @@ -1230,7 +1233,7 @@ newline cleanups are done if appropriate; see the variable `c-cleanup-list'." ;; space-before-funcall clean-up? ((and (memq 'space-before-funcall c-cleanup-list) - (eq last-command-event ?\() + (eq (c-last-command-char) ?\() (save-excursion (backward-char) (skip-chars-backward " \t") @@ -1248,7 +1251,7 @@ newline cleanups are done if appropriate; see the variable `c-cleanup-list'." ;; compact-empty-funcall clean-up? ((c-save-buffer-state () (and (memq 'compact-empty-funcall c-cleanup-list) - (eq last-command-event ?\)) + (eq (c-last-command-char) ?\)) (save-excursion (c-safe (backward-char 2)) (when (looking-at "()") @@ -1277,7 +1280,7 @@ keyword on the line, the keyword is not inserted inside a literal, and (when (c-save-buffer-state () (and c-electric-flag c-syntactic-indentation - (not (eq last-command-event ?_)) + (not (eq (c-last-command-char) ?_)) (= (save-excursion (skip-syntax-backward "w") (point)) @@ -1585,7 +1588,7 @@ defun." ; structure with other users of c-state-cache. (orig-point-min (point-min)) (orig-point-max (point-max)) lim ; Position of { which has been widened to. - where pos) + where pos case-fold-search) (save-restriction (if (eq c-defun-tactic 'go-outward) @@ -1709,7 +1712,8 @@ the open-parenthesis that starts a defun; see `beginning-of-defun'." ; structure with other users of c-state-cache. (orig-point-min (point-min)) (orig-point-max (point-max)) lim - where pos) + where pos case-fold-search) + (save-restriction (if (eq c-defun-tactic 'go-outward) (setq lim (c-widen-to-enclosing-decl-scope ; e.g. class, namespace @@ -1769,8 +1773,8 @@ with a brace block." (interactive) (c-save-buffer-state (beginning-of-defun-function end-of-defun-function - where pos name-end) - + where pos name-end case-fold-search) + (save-restriction (widen) (save-excursion @@ -1824,6 +1828,17 @@ with a brace block." ;; DEFFLAGSET(syslog_opt_flags,LOG_PID ...) ==> syslog_opt_flags (match-string-no-properties 1)) + ;; Objc selectors. + ((assq 'objc-method-intro (c-guess-basic-syntax)) + (let ((bound (save-excursion (c-end-of-statement) (point))) + (kw-re (concat "\\(?:" c-symbol-key "\\)?:")) + (stretches)) + (when (c-syntactic-re-search-forward c-symbol-key bound t t t) + (push (match-string-no-properties 0) stretches) + (while (c-syntactic-re-search-forward kw-re bound t t t) + (push (match-string-no-properties 0) stretches))) + (apply 'concat (nreverse stretches)))) + (t ;; Normal function or initializer. (when (c-syntactic-re-search-forward "[{(]" nil t) @@ -1958,13 +1973,18 @@ with a brace block." (defun c-mark-function () "Put mark at end of the current top-level declaration or macro, point at beginning. -If point is not inside any then the closest following one is chosen. +If point is not inside any then the closest following one is +chosen. Each successive call of this command extends the marked +region by one function. + +A mark is left where the command started, unless the region is already active +\(in Transient Mark mode). As opposed to \\[c-beginning-of-defun] and \\[c-end-of-defun], this function does not require the declaration to contain a brace block." (interactive) - (let (decl-limits) + (let (decl-limits case-fold-search) (c-save-buffer-state nil ;; We try to be line oriented, unless there are several ;; declarations on the same line. @@ -1974,17 +1994,34 @@ function does not require the declaration to contain a brace block." (if (not decl-limits) (error "Cannot find any declaration") - (goto-char (car decl-limits)) - (push-mark (cdr decl-limits) nil t)))) + (let* ((extend-region-p + (and (eq this-command 'c-mark-function) + (eq last-command 'c-mark-function))) + (push-mark-p (and (eq this-command 'c-mark-function) + (not extend-region-p) + (not (and transient-mark-mode mark-active))))) + (if push-mark-p (push-mark (point))) + (if extend-region-p + (progn + (exchange-point-and-mark) + (setq decl-limits (c-declaration-limits t)) + (when (not decl-limits) + (exchange-point-and-mark) + (error "Cannot find any declaration")) + (goto-char (cdr decl-limits)) + (exchange-point-and-mark)) + (goto-char (car decl-limits)) + (push-mark (cdr decl-limits) nil t)))))) (defun c-cpp-define-name () "Return the name of the current CPP macro, or NIL if we're not in one." (interactive) - (save-excursion - (and c-opt-cpp-macro-define-start - (c-beginning-of-macro) - (looking-at c-opt-cpp-macro-define-start) - (match-string-no-properties 1)))) + (let (case-fold-search) + (save-excursion + (and c-opt-cpp-macro-define-start + (c-beginning-of-macro) + (looking-at c-opt-cpp-macro-define-start) + (match-string-no-properties 1))))) ;; Movement by statements. @@ -2867,7 +2904,8 @@ See `c-indent-comment-alist' for a description." (eq (match-end 0) eot)) 'cpp-end-block) (t - 'other)))) + 'other))) + case-fold-search) (if (and (memq line-type '(anchored-comment empty-line)) c-indent-comments-syntactically-p) (let ((c-syntactic-context (c-guess-basic-syntax))) @@ -3003,7 +3041,7 @@ are treated as conditional clause limits. Normally they are ignored." (let* ((forward (> count 0)) (increment (if forward -1 1)) (search-function (if forward 're-search-forward 're-search-backward)) - new) + new case-fold-search) (unless (integerp target-depth) (setq target-depth (if target-depth -1 0))) (save-excursion @@ -3205,7 +3243,7 @@ balanced expression is found." In the macro case this also has the effect of realigning any line continuation backslashes, unless `c-auto-align-backslashes' is nil." (interactive "*") - (let ((here (point-marker)) decl-limits) + (let ((here (point-marker)) decl-limits case-fold-search) (unwind-protect (progn (c-save-buffer-state nil @@ -4382,11 +4420,8 @@ Optional prefix ARG means justify paragraph as well." (let ((fill-paragraph-function ;; Avoid infinite recursion. (if (not (eq fill-paragraph-function 'c-fill-paragraph)) - fill-paragraph-function)) - (start-point (point-marker))) - (c-mask-paragraph - t nil (lambda () (fill-region-as-paragraph (point-min) (point-max) arg))) - (goto-char start-point)) + fill-paragraph-function))) + (c-mask-paragraph t nil 'fill-paragraph arg)) ;; Always return t. This has the effect that if filling isn't done ;; above, it isn't done at all, and it's therefore effectively ;; disabled in normal code. @@ -4620,7 +4655,8 @@ inside a preprocessor directive." (interactive "*") (let* (c-lit-limits c-lit-type - (c-macro-start c-macro-start)) + (c-macro-start c-macro-start) + case-fold-search) (c-save-buffer-state () (setq c-lit-limits (c-literal-limits nil nil t)