mirror of
https://git.savannah.gnu.org/git/emacs/org-mode.git
synced 2024-11-26 07:33:39 +00:00
Merge branch 'maint'
This commit is contained in:
commit
8127b3c30d
48
lisp/org.el
48
lisp/org.el
@ -7204,9 +7204,11 @@ show that drawer instead."
|
||||
|
||||
(defun org-first-headline-recenter ()
|
||||
"Move cursor to the first headline and recenter the headline."
|
||||
(goto-char (point-min))
|
||||
(when (re-search-forward (concat "^\\(" org-outline-regexp "\\)") nil t)
|
||||
(set-window-start (selected-window) (point-at-bol))))
|
||||
(let ((window (get-buffer-window)))
|
||||
(when window
|
||||
(goto-char (point-min))
|
||||
(when (re-search-forward (concat "^\\(" org-outline-regexp "\\)") nil t)
|
||||
(set-window-start window (line-beginning-position))))))
|
||||
|
||||
;;; Saving and restoring visibility
|
||||
|
||||
@ -13866,14 +13868,18 @@ as well.")
|
||||
|
||||
(defun org-occur (regexp &optional keep-previous callback)
|
||||
"Make a compact tree which shows all matches of REGEXP.
|
||||
The tree will show the lines where the regexp matches, and all higher
|
||||
headlines above the match. It will also show the heading after the match,
|
||||
to make sure editing the matching entry is easy.
|
||||
If KEEP-PREVIOUS is non-nil, highlighting and exposing done by a previous
|
||||
call to `org-occur' will be kept, to allow stacking of calls to this
|
||||
command.
|
||||
If CALLBACK is non-nil, it is a function which is called to confirm
|
||||
that the match should indeed be shown."
|
||||
|
||||
The tree will show the lines where the regexp matches, and any other context
|
||||
defined in `org-show-context-detail', which see.
|
||||
|
||||
When optional argument KEEP-PREVIOUS is non-nil, highlighting and exposing
|
||||
done by a previous call to `org-occur' will be kept, to allow stacking of
|
||||
calls to this command.
|
||||
|
||||
Optional argument CALLBACK can be a function of no argument. In this case,
|
||||
it is called with point at the end of the match, match data being set
|
||||
accordingly. Current match is shown only if the return value is non-nil.
|
||||
The function must neither move point nor alter narrowing."
|
||||
(interactive "sRegexp: \nP")
|
||||
(when (equal regexp "")
|
||||
(user-error "Regexp cannot be empty"))
|
||||
@ -13883,12 +13889,11 @@ that the match should indeed be shown."
|
||||
(let ((cnt 0))
|
||||
(save-excursion
|
||||
(goto-char (point-min))
|
||||
(when (or (not keep-previous) ; do not want to keep
|
||||
(not org-occur-highlights)) ; no previous matches
|
||||
(when (or (not keep-previous) ; do not want to keep
|
||||
(not org-occur-highlights)) ; no previous matches
|
||||
;; hide everything
|
||||
(org-overview))
|
||||
(while (re-search-forward regexp nil t)
|
||||
(backward-char) ;; FIXME: Match timestamps at the end of a headline
|
||||
(when (or (not callback)
|
||||
(save-match-data (funcall callback)))
|
||||
(setq cnt (1+ cnt))
|
||||
@ -17507,7 +17512,10 @@ both scheduled and deadline timestamps."
|
||||
(lambda ()
|
||||
(let ((match (match-string 1)))
|
||||
(and (if (memq ts-type '(active inactive all))
|
||||
(eq (org-element-type (org-element-context)) 'timestamp)
|
||||
(eq (org-element-type (save-excursion
|
||||
(backward-char)
|
||||
(org-element-context)))
|
||||
'timestamp)
|
||||
(org-at-planning-p))
|
||||
(time-less-p
|
||||
(org-time-string-to-time match)
|
||||
@ -17526,7 +17534,10 @@ both scheduled and deadline timestamps."
|
||||
(lambda ()
|
||||
(let ((match (match-string 1)))
|
||||
(and (if (memq ts-type '(active inactive all))
|
||||
(eq (org-element-type (org-element-context)) 'timestamp)
|
||||
(eq (org-element-type (save-excursion
|
||||
(backward-char)
|
||||
(org-element-context)))
|
||||
'timestamp)
|
||||
(org-at-planning-p))
|
||||
(not (time-less-p
|
||||
(org-time-string-to-time match)
|
||||
@ -17547,7 +17558,10 @@ both scheduled and deadline timestamps."
|
||||
(let ((match (match-string 1)))
|
||||
(and
|
||||
(if (memq type '(active inactive all))
|
||||
(eq (org-element-type (org-element-context)) 'timestamp)
|
||||
(eq (org-element-type (save-excursion
|
||||
(backward-char)
|
||||
(org-element-context)))
|
||||
'timestamp)
|
||||
(org-at-planning-p))
|
||||
(not (time-less-p
|
||||
(org-time-string-to-time match)
|
||||
|
@ -4318,6 +4318,27 @@ Paragraph<point>"
|
||||
(search-forward "H2")
|
||||
(org-invisible-p2))))
|
||||
|
||||
(ert-deftest test-org/occur ()
|
||||
"Test `org-occur' specifications."
|
||||
;; Count number of matches.
|
||||
(should
|
||||
(= 1
|
||||
(org-test-with-temp-text "* H\nA\n* H2"
|
||||
(org-occur "A"))))
|
||||
(should
|
||||
(= 2
|
||||
(org-test-with-temp-text "* H\nA\n* H2\nA"
|
||||
(org-occur "A"))))
|
||||
;; Test CALLBACK optional argument.
|
||||
(should
|
||||
(= 0
|
||||
(org-test-with-temp-text "* H\nA\n* H2"
|
||||
(org-occur "A" nil (lambda () (equal (org-get-heading) "H2"))))))
|
||||
(should
|
||||
(= 1
|
||||
(org-test-with-temp-text "* H\nA\n* H2\nA"
|
||||
(org-occur "A" nil (lambda () (equal (org-get-heading) "H2")))))))
|
||||
|
||||
|
||||
;;; Tags
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user