4 Commits ba0313b33b ... d734a2811b

Auteur SHA1 Message Date
  Fred Gilham d734a2811b Add regex and multiword search il y a 4 semaines
  Fred Gilham b471226cdf Enable search ranges il y a 4 semaines
  Fred Gilham 70c418d3d8 Fix search results not showing results from III John il y a 4 semaines
  Fred Gilham 5857bf0a54 Add TODO item: search ranges il y a 4 semaines
2 fichiers modifiés avec 32 ajouts et 19 suppressions
  1. 3 2
      TODO
  2. 29 17
      bible-mode.el

+ 3 - 2
TODO

@@ -1,5 +1,5 @@
 #+COMMENT: -*- Mode: org -*-
-#+COMMENT: Time-stamp: <2024-09-27 07:59:58 fred>
+#+COMMENT: Time-stamp: <2025-08-16 10:45:57 fred>
 * DONE Make lookups be relative to the specified book, not to Genesis. (internal)
 * DONE Make tabs work in Hebrew mode
 * DONE Make tabs skip past verse number at the beginning
@@ -46,8 +46,9 @@
 * DONE Cross references in Abbott lexicon display are not right
   - I.e. Mk 3:7, 4:11, 15; should refer to Mark 3:7, Mark 4:11 and Mark 4:15.
     Do this with overlapping text properties.
-* TODO Search results don't show III John.     
+* DONE Search results don't show III John.     
   - Apparently this is the only instance of the problem since III John
     is the only book with the III prefix.
 * TODO It would be nice to be able to enter either I, II or II or 1, 2 or 3 when referencing books.
 * TODO Move book/chapter/verse to status line (saves room in the display)
+* TODO Add search ranges

+ 29 - 17
bible-mode.el

@@ -55,11 +55,6 @@
 ;; with lexical information will display that informatio in a "term"
 ;; buffer.
 
-
-;;;
-;;; "bm-" is used as shorthand (see Local Variables) for "bible-mode-"
-;;; Names of the form "bm--" are intended to be "unexported".
-
 ;;; Code:
 
 ;;;; Requirements
@@ -238,7 +233,9 @@ which are of the form
   "Search query associated with the buffer.")
 
 (defvar-local bible-mode-search-mode "phrase"
-  "Search mode: either `lucene' or `phrase'.")
+  "Search mode: either `lucene', `phrase', `regex' or `multiword'.")
+
+(defvar bible-mode-search-range nil)
 
 (defvar-local bible-mode-has-strongs nil
   "Set if the module being displayed has strongs numbers availabile.")
@@ -319,7 +316,7 @@ which are of the form
 	    '("Bible Search" . bible-search))
 
 ;;;; Not yet
-;;;(define-key bible-mode-map "r" 'bible-mode-set-search-range)
+(define-key bible-mode-map "r" 'bible-mode-set-search-range)
 ;;;;; Misc
 (define-key bible-mode-map "m" 'bible-mode-select-module)
 (define-key bible-mode-map "w" 'bible-mode-toggle-word-study)
@@ -566,6 +563,17 @@ Genesis 1:1 is used."
     (when chapter
       (bible-mode--set-location bible-mode-current-book chapter))))
 
+(defun bible-mode-set-search-range ()
+  "Ask user for a new text module for the current `bible-mode' buffer."
+  (interactive)
+  (let ((range (read-string "Range (<return> to clear): ")))
+    (if (string-equal range "")
+	(setq bible-mode-search-range nil)
+      (setq bible-mode-search-range range))
+;;    (bible-mode--display)
+))
+
+
 ;;;###autoload
 (defun bible-mode-select-module ()
   "Ask user for a new text module for the current `bible-mode' buffer."
@@ -603,12 +611,12 @@ Genesis 1:1 is used."
 ;;;###autoload
 (defun bible-search (query)
   "Prompts the user for a Bible search query: word or phrase and type of
-search: either `lucene' or `phrase'. `lucene' mode requires an index
-to be built using the `mkfastmod' program. `lucene' is the default
-search."
+search: either `lucene', `phrase', `regex' or `multiword'. `lucene' mode
+requires an index to be built using the `mkfastmod' program. `lucene' is
+the default search."
   (interactive "sBible Search: ")
   (when (> (length query) 0)
-    (let* ((searchmode (completing-read "Search Mode: " '("lucene" "phrase") nil t "lucene")))
+    (let* ((searchmode (completing-read "Search Mode: " '("lucene" "phrase" "regex" "multiword") nil t "lucene")))
       (bible-mode--open-search query searchmode bible-mode-module))))
 
 ;;;###autoload
@@ -650,7 +658,6 @@ OT/NT etc. If that module doesn't have that verse...???"
 	(setq book-abbrev (car verse-ref))
 	(setq chapter-verse (split-string (cadr verse-ref) ":"))))
 
-    ;;    (setq book (cdr (assoc book-abbrev bible-mode-book-name-abbreviations-alist)))
     (setq book (car verse-ref))
     (setq chapter (car chapter-verse)
 	  verse (cadr chapter-verse))
@@ -698,7 +705,8 @@ OT/NT etc. If that module doesn't have that verse...???"
 	(if searchtype
 	    (progn
 	      (setq filter nil) ; search is not compatible with filters XXX
-	      (setq args (append args (list "-s" (pcase searchtype ("lucene" "lucene") ("phrase" "phrase"))))))
+	      (setq args (append args (list "-s" (pcase searchtype ("lucene" "lucene") ("phrase" "phrase") ("regex" "regex") ("multiword" "multiword")))))
+	      (when bible-mode-search-range (setq args (append args (list "-r" bible-mode-search-range)))))
 	  (progn
 	    (if filter
 		(setq filter (concat filter diatheke-filter-options))
@@ -1283,13 +1291,14 @@ Module MOD is used for the query."
 
 	  (when match
 	    (push
-	     ;; Massage match to make it more sortable, get rid of
-	     ;; some characters.
+	     ;; Massage match to make it more sortable, get rid of some characters.
 	     (replace-regexp-in-string 
 	      "I " "1"
 	      (replace-regexp-in-string
 	       "II " "2"
-	       (replace-regexp-in-string ".+; " "" matchstr)))
+	       (replace-regexp-in-string
+		"III " "3"
+		(replace-regexp-in-string ".+; " "" matchstr))))
 	     verses)))
 
 	(setq match 0)
@@ -1309,7 +1318,10 @@ Module MOD is used for the query."
 	  (while (search-forward (concat "(" mod ")") nil t)
 	    (replace-match "")))))
 
-    (setq mode-name (concat "Bible Search (" mod ")"))
+    (setq mode-name (concat "Bible Search (" mod))
+    (when bible-mode-search-range
+      (setq mode-name (concat mode-name " [" bible-mode-search-range "]")))
+    (setq mode-name (concat mode-name ")"))
     (setq buffer-read-only t)
     (setq-local bible-mode-search-query query)
     (setq-local bible-mode-search-mode searchmode)