unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Emanuel Berg <incal@dataswamp.org>
To: emacs-devel@gnu.org
Subject: Re: wrap-search 3.3.5
Date: Fri, 26 Aug 2022 00:08:00 +0200	[thread overview]
Message-ID: <87lerckmdb.fsf@dataswamp.org> (raw)
In-Reply-To: jwvsflk14kz.fsf-monnier+emacs@gnu.org

Stefan Monnier wrote:

> You might want to mention `isearch-wrap-pause` and explain
> the advantage of your package over what we get with (setq
> isearch-wrap-pause 'no).

It is not incremental so it never shows you "please help" when
you search for "please her" ... there is no flash update of
what you see until you are done. If you search for something
that exists, when you are done searching for it and not
before, that and nothing else is what is displayed. So it is
very civilized and not rushed, you don't get stressed
or distracted.

> If (like me) you prefer the "[...]" format, you might like
> to use `minibuffer-electric-default-mode` and (setq
> minibuffer-eldef-shorten-default t).

It looks good to me even after that, however I have that
configured another way

  (setq minibuffer-default-prompt-format " [%s]")

> As for the paperwork, you'd want to fill the form below and
> send it as instructed so the FSF can send you the relevant
> paperwork to sign.

OK, I think I did everything you said (not the byte compiler
patch LOL), here it is:

;;; wrap-search.el --- wrapped, non-incremental search -*- lexical-binding: t -*-
;;
;; Author: Emanuel Berg <incal@dataswamp.org>
;; Created: 2021-05-23
;; Keywords: matching
;; License: GPL3+
;; URL: https://dataswamp.org/~incal/emacs-init/wrap-search.el
;; Version: 4.3.7
;;
;;; Commentary:
;;
;; The `wrap-search' package offers non-incremental search.
;; It shows hitss - hits and only hits.
;;
;; `wrap-search' searches forward by default, but it wraps
;; and continues up and until the search start position if
;; necessary. This is so one doesn't have to wonder if the
;; target is north or south in the buffer.
;;
;; The philosophy is that `wrap-search' mostly shouldn't be
;; used for searching - that is possible as well, of course,
;; using the same command - rather, it is used to quickly
;; navigate a buffer.
;;
;; To use the package without keyboard shortcuts isn't
;; recommended. Instead, do for example
;;
;;   (global-set-key "\C-s" #'wrap-search)
;;   (global-set-key "\C-r" #'wrap-search-again)
;;
;;; Code:

(let ((prev-str "unspecified search string")
      (prev-case)
      (prev-rev)
      (prev-beg)
      (prev-end) )
  (defun wrap-search-again ()
    (interactive)
    (wrap-search prev-str prev-case prev-rev prev-beg prev-end) )
  (declare-function wrap-search-again nil)

  (defun show-prev-str ()
    (let*((short (truncate-string-to-width prev-str 10))
          (str   (format "%s%s" short
                                  (when (not (string= short prev-str))
                                    "...") )))
      str) )
  (declare-function show-prev-str nil)

  (defun wrap-search (str &optional case rev beg end)
    "Search for STR.

With CASE the search is case-sensitive.
With REV the search direction is reversed, i.e. north in the buffer from point.
BEG and END, or a region, delimits the search area. (default: whole buffer)

Interactively,
\\[universal-argument] sets CASE;
\\[universal-argument] \\[universal-argument] sets REV; and
\\[universal-argument] \\[universal-argument] \\[universal-argument] sets CASE and REV.

Do \\[wrap-search-again] to repeat, with `wrap-search-again'."
    (interactive
     `(,(read-string (format-prompt "search" (show-prev-str)))
       ,(member current-prefix-arg '( (4) (64)))
       ,(member current-prefix-arg '((16) (64)))
       ,@(if (use-region-p)
             (list (region-beginning) (region-end))
           (list (point-min) (point-max)) )))
    (if (string= "" str)
        (wrap-search-again)
      (setq prev-str  str)
      (setq prev-case case)
      (setq prev-rev  rev)
      (setq prev-beg  beg)
      (setq prev-end  end)
      (pcase-let*((case-fold-search (not case))
                  (pos (point))
                  (`(,search-f ,search-beg ,search-end)
                   (if rev
                       (list #'search-backward end beg)
                     (list #'search-forward beg end) )))
        (if (funcall search-f str search-end t)
            (message "hit: %s" (point))
          (goto-char search-beg)
          (if (funcall search-f str (+ pos (if rev 0 (length str))) t)
              (if (= pos (point))
                  (message "this is the one occurrence")
                (message "hit: %s (wrap)" (point)) )
            (goto-char pos)
            (message "no hit") ))) ))
  (declare-function wrap-search nil) )

(provide 'wrap-search)
;;; wrap-search.el ends here

-- 
underground experts united
https://dataswamp.org/~incal




  reply	other threads:[~2022-08-25 22:08 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-25 18:28 wrap-search 3.3.5 Emanuel Berg
2022-08-25 18:34 ` Philip Kaludercic
2022-08-25 18:50   ` Emanuel Berg
2022-08-25 19:05     ` Philip Kaludercic
2022-08-25 19:15       ` Emanuel Berg
2022-08-25 20:48         ` Philip Kaludercic
2022-08-26 19:46           ` Emanuel Berg
2022-08-26 23:46             ` Philip Kaludercic
2022-08-27  0:06               ` Emanuel Berg
2022-08-27  8:24                 ` Philip Kaludercic
2022-08-28  0:13                   ` Emanuel Berg
2022-08-28  8:07                     ` Philip Kaludercic
2022-08-28  8:30                       ` Andreas Schwab
2022-08-28  8:43                       ` Emanuel Berg
2022-08-28  9:00                         ` Philip Kaludercic
2022-08-28 21:02                           ` Emanuel Berg
2022-08-28 21:24                             ` Gregory Heytings
2022-08-28 21:31                               ` Emanuel Berg
2022-08-28 21:33                                 ` Emanuel Berg
2022-08-29  6:28                             ` Yuri Khan
2022-08-31  2:06                               ` Emanuel Berg
2022-08-31  9:04                                 ` Philip Kaludercic
2022-08-31  9:29                                   ` Emanuel Berg
2022-08-31 10:42                                     ` Gregory Heytings
2022-08-31 11:04                                       ` Emanuel Berg
2022-08-31 12:24                                         ` Gregory Heytings
2022-08-31 15:08                                           ` Emanuel Berg
2022-08-31 15:18                                             ` Gregory Heytings
2022-08-31 21:31                                               ` Emanuel Berg
2022-08-31 21:45                                                 ` [External] : " Drew Adams
2022-09-01  4:27                                                 ` tomas
2022-08-31 21:55                                               ` Emanuel Berg
2022-08-31 22:08                                                 ` Gregory Heytings
2022-09-01  0:46                                                   ` Emanuel Berg
2022-09-01 11:21                                                     ` Gregory Heytings
2022-09-01 17:02                                                       ` Emanuel Berg
2022-09-01 18:20                                                         ` Gregory Heytings
2022-09-01 19:17                                                           ` Emanuel Berg
2022-09-01 20:01                                                             ` Gregory Heytings
2022-09-01 20:52                                                               ` Emanuel Berg
2022-09-01 21:59                                                                 ` Gregory Heytings
2022-09-01 22:20                                                                   ` Emanuel Berg
2022-09-02  8:55                                                                   ` Yuri Khan
2022-09-02  9:03                                                                     ` Gregory Heytings
2022-09-02 21:10                                                                       ` Emanuel Berg
2022-08-31 14:54                                     ` Philip Kaludercic
2022-08-31 15:09                                       ` Emanuel Berg
2022-08-25 21:46       ` [External] : " Drew Adams
2022-08-25 20:26     ` Stefan Monnier
2022-08-25 22:08       ` Emanuel Berg [this message]
2022-08-25 22:23         ` Emanuel Berg
2022-08-26  1:10           ` Stefan Monnier
2022-08-26  2:17             ` Emanuel Berg
2022-08-25 22:47         ` Emanuel Berg
2022-08-25 22:19       ` Emanuel Berg
2022-08-26 10:17         ` Emanuel Berg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87lerckmdb.fsf@dataswamp.org \
    --to=incal@dataswamp.org \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).