]> git.eshelyaron.com Git - emacs.git/commitdiff
Char-fold quotation characters in *info* and *Help*
authorLars Ingebrigtsen <larsi@gnus.org>
Fri, 6 May 2022 11:28:20 +0000 (13:28 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Fri, 6 May 2022 11:28:20 +0000 (13:28 +0200)
* lisp/info.el (Info-mode):
* lisp/help-mode.el (help-mode): Use it.
* lisp/isearch.el (isearch-fold-quotes-mode): New minor mode
(bug#24510).

etc/NEWS
lisp/help-mode.el
lisp/info.el
lisp/isearch.el

index fa7e2c4dccaf87bde7b9d5fd25e57f94574ff202..f7dddd36de1dea9464d1a250c2c3e9aaa077c72a 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -136,6 +136,13 @@ of 'user-emacs-directory'.
 \f
 * Incompatible changes in Emacs 29.1
 
+---
+** Isearch in *Help* and *info* now char-folds quote characters by default.
+This means that you can say 'C-s `foo' (GRAVE ACCENT) if the buffer
+contains "‘foo" (LEFT SINGLE QUOTATION MARK) and the like.  These
+quotation characters look somewhat similar in some fonts.  To switch
+this off, disable the new 'isearch-fold-quotes-mode' minor mode.
+
 ---
 ** Sorting commands no longer necessarily change modification status.
 In earlier Emacs versions, commands like 'M-x sort-lines' would always
@@ -1636,6 +1643,12 @@ functions.
 \f
 * Lisp Changes in Emacs 29.1
 
+---
+*** New minor mode 'isearch-fold-quotes-mode'.
+This sets up 'search-default-mode' so that quote characters are
+char-folded into each other.  It is used, by default, in *Help* and
+*info* buffers.
+
 +++
 ** New macro 'buffer-local-set-state'.
 This is a helper macro to be used by minor modes that wish to restore
index 94bd59113114303852512c8d4544b7ac34836652..38a2f93a3c328e4977df96b91d00c8c116ea4875 100644 (file)
@@ -415,7 +415,8 @@ Commands:
               help-mode-tool-bar-map)
   (setq-local help-mode--current-data nil)
   (setq-local bookmark-make-record-function
-              #'help-bookmark-make-record))
+              #'help-bookmark-make-record)
+  (isearch-fold-quotes-mode))
 
 ;;;###autoload
 (defun help-mode-setup ()
index abfb77b05522781a3168244fad7116c7244ae340..0bdb2f2e7a33901d0b09d1a9f23c1eb03abde1a3 100644 (file)
@@ -4490,7 +4490,8 @@ Advanced commands:
   (setq-local revert-buffer-function #'Info-revert-buffer-function)
   (setq-local font-lock-defaults '(Info-mode-font-lock-keywords t t))
   (Info-set-mode-line)
-  (setq-local bookmark-make-record-function #'Info-bookmark-make-record))
+  (setq-local bookmark-make-record-function #'Info-bookmark-make-record)
+  (isearch-fold-quotes-mode))
 
 ;; When an Info buffer is killed, make sure the associated tags buffer
 ;; is killed too.
index 8397bb95c6bd96ecbe0efe676410cec89dcbd643..b404efd42a1322ee422380f523c4a842a1746c8d 100644 (file)
@@ -4466,6 +4466,23 @@ CASE-FOLD non-nil means the search was case-insensitive."
   (isearch-search)
   (isearch-update))
 
+\f
+
+(defvar isearch-fold-quotes-mode--state)
+(define-minor-mode isearch-fold-quotes-mode
+  "Minor mode to aid searching for \\=` characters in help modes."
+  :lighter ""
+  (if isearch-fold-quotes-mode
+      (setq-local isearch-fold-quotes-mode--state
+                  (buffer-local-set-state
+                   search-default-mode
+                   (lambda (string &optional _lax)
+                     (thread-last
+                       (regexp-quote string)
+                       (replace-regexp-in-string "`" "[`‘]")
+                       (replace-regexp-in-string "'" "['’]")))))
+    (buffer-local-restore-state isearch-fold-quotes-mode--state)))
+
 (provide 'isearch)
 
 ;;; isearch.el ends here