[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/el-search 3699425 246/332: [el-search] Add command 'el-
From: |
Stefan Monnier |
Subject: |
[elpa] externals/el-search 3699425 246/332: [el-search] Add command 'el-search-last-buffer-match' |
Date: |
Tue, 1 Dec 2020 15:48:55 -0500 (EST) |
branch: externals/el-search
commit 36994259b1ad9a248ae785d7fe78807a0a60f1a3
Author: Michael Heerdegen <michael_heerdegen@web.de>
Commit: Michael Heerdegen <michael_heerdegen@web.de>
[el-search] Add command 'el-search-last-buffer-match'
* packages/el-search/el-search.el
(el-search--unless-no-buffer-match): New macro.
(el-search-pattern-backward): Use it.
(el-search-last-buffer-match): New command jumping to the last of the
current buffer's matches.
(el-search-from-beginning): Let a negative prefix arg make it jump to
the last buffer match.
---
el-search.el | 68 +++++++++++++++++++++++++++++++++++++++++-------------------
1 file changed, 47 insertions(+), 21 deletions(-)
diff --git a/el-search.el b/el-search.el
index 9ee1a5f..19acf3d 100644
--- a/el-search.el
+++ b/el-search.el
@@ -2467,16 +2467,50 @@ See `el-search-defined-patterns' for a list of defined
patterns."
(lambda (search) (setf (alist-get 'is-single-buffer
(el-search-object-properties search)) t))
'from-here))))
-(defun el-search-from-beginning (&optional restart-search)
+(defmacro el-search--unless-no-buffer-match (&rest body)
+ "Execute BODY unless no match for current search in current buffer.
+In this case, ignore BODY and emit a message saying \"No matches\".
+
+The return value is the result of the last form in BODY if it is
+executed, and nil else."
+ (declare (indent 0) (debug (body)))
+ `(if (not (or el-search--success
+ (save-excursion
+ (goto-char (point-min))
+ (el-search--search-pattern-1
+ (el-search--current-matcher) t nil
(el-search--current-heuristic-matcher)))))
+ (progn
+ (ding)
+ (el-search--message-no-log "No matches")
+ (sit-for .7)
+ nil)
+ ,@body))
+
+(defun el-search-from-beginning (&optional arg)
"Go to the first of this buffer's matches.
-With prefix arg, restart the current search."
+With prefix ARG, restart the current search when positive; go to the
+last match in the current buffer when negative."
(interactive "P")
- (if (not restart-search)
+ (cond
+ ((< (prefix-numeric-value arg) 0)
+ (el-search-last-buffer-match))
+ ((not arg)
+ (el-search--unless-no-buffer-match
(setf (el-search-head-position (el-search-object-head
el-search--current-search))
(point-min))
+ (el-search-continue-search)))
+ (t
(el-search-reset-search el-search--current-search)
- (setq el-search--success nil))
- (el-search-continue-search))
+ (setq el-search--success nil)
+ (el-search-continue-search))))
+
+(defun el-search-last-buffer-match ()
+ "Go to the last of this buffer's matches."
+ (interactive)
+ (setq this-command 'el-search-pattern)
+ (el-search--unless-no-buffer-match
+ (goto-char (point-max))
+ (funcall-interactively #'el-search-pattern-backward
(el-search--current-pattern))))
(defun el-search--search-backward-1 (matcher &optional noerror bound
heuristic-matcher count)
"Like `el-search-backward' but accepts a matcher as first argument.
@@ -2608,22 +2642,14 @@ See the command `el-search-pattern' for more
information."
(unless (eq last-command 'el-search-pattern)
(el-search-hl-other-matches (el-search--current-matcher)))
(setq el-search--success t))
- (if (not (or el-search--success
- (save-excursion
- (goto-char (point-min))
- (el-search--search-pattern-1
- (el-search--current-matcher) t nil
(el-search--current-heuristic-matcher)))))
- (progn
- (ding)
- (el-search--message-no-log "No matches")
- (sit-for .7))
- (let ((keys (car (where-is-internal 'el-search-pattern-backward))))
- (el-search--message-no-log
- (if keys
- (format "No (more) match; hit %s to wrap search" (key-description
keys))
- "No (more) match")))
- (sit-for .7)
- (el-search--set-wrap-flag 'backward))))
+ (el-search--unless-no-buffer-match
+ (let ((keys (car (where-is-internal 'el-search-pattern-backward))))
+ (el-search--message-no-log
+ (if keys
+ (format "No (more) match; hit %s to wrap search" (key-description
keys))
+ "No (more) match")))
+ (sit-for .7)
+ (el-search--set-wrap-flag 'backward))))
(define-obsolete-function-alias 'el-search-previous-match
'el-search-pattern-backward "since el-search-1.3")
- [elpa] externals/el-search 8583d46 191/332: Fix resuming a single-buffer query-replace, (continued)
- [elpa] externals/el-search 8583d46 191/332: Fix resuming a single-buffer query-replace, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 365f93f 197/332: * el-search/el-search.el: Some buffer display related minor tweaks, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search c69dd52 205/332: * el-search/el-search.el: Some minor tweaks, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search c41288f 208/332: Make el-search key binding installation more flexible, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 8d20f8a 217/332: Add face `el-search-highlight-in-prompt-face', Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 75f94f9 218/332: Improve quit/error handling in el-search-query-replace, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search b278fb7 219/332: Update a variable when splicing mode is toggled, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 8175417 237/332: * el-search/el-search.el: More minor tweaks, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 1f81442 241/332: [el-search] Improve forward search functions, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 5c3bd4e 247/332: [el-search] Add bindings for first/last match jumping, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 3699425 246/332: [el-search] Add command 'el-search-last-buffer-match',
Stefan Monnier <=
- [elpa] externals/el-search cf68daf 249/332: [el-search] Avoid most calls to 'scan-sexps', Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 894f8b1 254/332: [el-search] More minor tweaks, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 6c5a6b4 265/332: [el-search] Fix an infloop in el-search--search-pattern-1, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search b830be5 263/332: [el-search] Some scrolling tweaks, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search e60f228 267/332: [el-search] Don't try to kill modified buffers, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 34f734e 258/332: [el-search] Add special scroll commands, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search d4ad652 278/332: [el-search] Implement an explicit quit command, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search fbe70bf 284/332: [el-search] Add C-h help, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search fac5586 285/332: [el-search] Improve my last commit "Add C-h help", Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 23911d1 288/332: [el-search] Add menus, Stefan Monnier, 2020/12/01