# HG changeset patch # User Alan Mackenzie # Date 1176115889 0 # Node ID e8bd3e011b646c3be5a3345f1e33769faac472f0 # Parent 32c1980a1285bbdba4fbc5bd2308265e3df31532 Changes to make `narrow-to-defun' and `mark-defun' work properly in CC Mode: cc-defs.el (c-beginning-of-defun-1): cc-cmds.el (c-beginning-of-defun, c-end-of-defun): bind beginning/end-of-defun-function to nil around calls to beginning/end-of-defun. cc-langs.el (beginning-of-defun-function, end-of-defun-function): new c-lang-setvar's. cc-awk.el (c-awk-beginning-of-defun): Add "(or arg (setq arg 1))" to enable non-interactive call. diff -r 32c1980a1285 -r e8bd3e011b64 lisp/progmodes/cc-awk.el --- a/lisp/progmodes/cc-awk.el Mon Apr 09 10:46:15 2007 +0000 +++ b/lisp/progmodes/cc-awk.el Mon Apr 09 10:51:29 2007 +0000 @@ -988,6 +988,7 @@ Note that this function might do hidden buffer changes. See the comment at the start of cc-engine.el for more info." (interactive "p") + (or arg (setq arg 1)) (save-match-data (c-save-buffer-state ; ensures the buffer is writable. nil diff -r 32c1980a1285 -r e8bd3e011b64 lisp/progmodes/cc-cmds.el --- a/lisp/progmodes/cc-cmds.el Mon Apr 09 10:46:15 2007 +0000 +++ b/lisp/progmodes/cc-cmds.el Mon Apr 09 10:51:29 2007 +0000 @@ -1511,7 +1511,8 @@ (or arg (setq arg 1)) (c-save-buffer-state - ((start (point)) + (beginning-of-defun-function end-of-defun-function + (start (point)) where paren-state pos) ;; Move back out of any macro/comment/string we happen to be in. @@ -1613,7 +1614,8 @@ (or arg (setq arg 1)) (c-save-buffer-state - ((start (point)) + (beginning-of-defun-function end-of-defun-function + (start (point)) where paren-state pos) ;; Move back out of any macro/comment/string we happen to be in. diff -r 32c1980a1285 -r e8bd3e011b64 lisp/progmodes/cc-defs.el --- a/lisp/progmodes/cc-defs.el Mon Apr 09 10:46:15 2007 +0000 +++ b/lisp/progmodes/cc-defs.el Mon Apr 09 10:51:29 2007 +0000 @@ -74,12 +74,12 @@ ; (eval-after-load "font-lock" ; 2006-07-09. font-lock is now preloaded ; ' (if (and (not (featurep 'cc-fix)) ; only load the file once. - (featurep 'xemacs) ; There is now (2005/12) code in GNU Emacs CVS - ; to make the call to f-l-c-k throw an error. - (let (font-lock-keywords) - (font-lock-compile-keywords '("\\<\\>")) - font-lock-keywords)) ; did the previous call foul this up? - (load "cc-fix")) ;) + (featurep 'xemacs) ; There is now (2005/12) code in GNU Emacs CVS + ; to make the call to f-l-c-k throw an error. + (let (font-lock-keywords) + (font-lock-compile-keywords '("\\<\\>")) + font-lock-keywords)) ; did the previous call foul this up? + (load "cc-fix")) ;) ;; The above takes care of the delayed loading, but this is necessary ;; to ensure correct byte compilation. @@ -708,7 +708,8 @@ ;; c-parse-state to between 3 and 60 times faster when ;; braces are hung. It can also degrade performance by ;; about as much when braces are not hung. - '(let (pos) + '(let (beginning-of-defun-function end-of-defun-function + pos) (while (not pos) (save-restriction (widen) @@ -731,7 +732,8 @@ )) (goto-char pos))) ;; Emacs, which doesn't have buffer-syntactic-context-depth - (beginning-of-defun)) + (let (beginning-of-defun-function end-of-defun-function) + (beginning-of-defun))) ;; if defun-prompt-regexp is non-nil, b-o-d won't leave us at the ;; open brace. (and defun-prompt-regexp diff -r 32c1980a1285 -r e8bd3e011b64 lisp/progmodes/cc-langs.el --- a/lisp/progmodes/cc-langs.el Mon Apr 09 10:46:15 2007 +0000 +++ b/lisp/progmodes/cc-langs.el Mon Apr 09 10:51:29 2007 +0000 @@ -221,11 +221,6 @@ ;; with the group symbol for each group and should return non-nil ;; if that group is to be included. ;; - ;; OP-FILTER filters the individual operators in each group. It - ;; can be t to choose all operators, a regexp to test against each - ;; operator, or a function which will be called for each operator - ;; and should return non-nil for those to include. - ;; ;; If XLATE is given, it's a function which is called for each ;; matching operator and its return value is collected instead. ;; If it returns a list, the elements are spliced directly into @@ -1376,6 +1371,26 @@ (c-lang-const c-vsemi-status-unknown-p-fn)) +;;; Defun functions + +;; The Emacs variables beginning-of-defun-function and +;; end-of-defun-function will be set so that commands like +;; `mark-defun' and `narrow-to-defun' work right. The key sequences +;; C-M-a and C-M-e are, however, bound directly to the CC Mode +;; functions, allowing optimisation for large n. +(c-lang-defconst beginning-of-defun-function + "Function to which beginning-of-defun-function will be set." + t 'c-beginning-of-defun + awk 'c-awk-beginning-of-defun) +(c-lang-setvar beginning-of-defun-function + (c-lang-const beginning-of-defun-function)) + +(c-lang-defconst end-of-defun-function + "Function to which end-of-defun-function will be set." + t 'c-end-of-defun + awk 'c-awk-end-of-defun) +(c-lang-setvar end-of-defun-function (c-lang-const end-of-defun-function)) + ;;; In-comment text handling. (c-lang-defconst c-paragraph-start