Make c-mark-defun extend region when repeated, and leave a mark.
Fixes bugs #5525, #10906.
This commit is contained in:
parent
5aca4f7140
commit
9cec78342c
2 changed files with 31 additions and 3 deletions
|
@ -1,3 +1,10 @@
|
|||
2012-03-08 Alan Mackenzie <acm@muc.de>
|
||||
|
||||
* progmodes/cc-cmds.el (c-mark-function): Make it leave a mark at
|
||||
the starting position; make it extend the marked region when
|
||||
invoked repeatedly - all under appropriate circumstances.
|
||||
Fixes bugs #5525, #10906.
|
||||
|
||||
2012-03-08 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* files.el (locate-dominating-file, dir-locals-find-file):
|
||||
|
|
|
@ -1958,7 +1958,12 @@ 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."
|
||||
|
@ -1974,8 +1979,24 @@ 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."
|
||||
|
|
Loading…
Add table
Reference in a new issue