* lisp/emacs-lisp/lisp.el (narrow-to-defun-include-comments): New var.

(narrow-to-defun): New arg include-comments, defaulting to it.

Fixes: debbugs:16328
This commit is contained in:
Phil Sainty 2014-07-03 22:00:54 -04:00 committed by Stefan Monnier
parent 9362232cef
commit 2b13ca4d11
2 changed files with 26 additions and 4 deletions

View file

@ -522,11 +522,15 @@ it marks the next defun after the ones already marked."
(beginning-of-defun))
(re-search-backward "^\n" (- (point) 1) t)))))
(defun narrow-to-defun (&optional _arg)
(defvar narrow-to-defun-include-comments nil
"If non-nil, `narrow-to-defun' will also show comments preceding the defun.")
(defun narrow-to-defun (&optional include-comments)
"Make text outside current defun invisible.
The defun visible is the one that contains point or follows point.
Optional ARG is ignored."
(interactive)
The current defun is the one that contains point or follows point.
Preceding comments are included if INCLUDE-COMMENTS is non-nil.
Interactively, the behavior depends on `narrow-to-defun-include-comments'."
(interactive (list narrow-to-defun-include-comments))
(save-excursion
(widen)
(let ((opoint (point))
@ -562,6 +566,18 @@ Optional ARG is ignored."
(setq end (point))
(beginning-of-defun)
(setq beg (point)))
(when include-comments
(goto-char beg)
;; Move back past all preceding comments (and whitespace).
(when (forward-comment -1)
(while (forward-comment -1))
;; Move forwards past any page breaks within these comments.
(when (and page-delimiter (not (string= page-delimiter "")))
(while (re-search-forward page-delimiter beg t)))
;; Lastly, move past any empty lines.
(skip-chars-forward "[:space:]\n")
(beginning-of-line)
(setq beg (point))))
(goto-char end)
(re-search-backward "^\n" (- (point) 1) t)
(narrow-to-region beg end))))