Parcourir la source

Fix problem with search following verse

Following verse or xref would not use the right module if the search module was different from the default module.
Fred Gilham il y a 2 semaines
Parent
commit
b69a30cca6
1 fichiers modifiés avec 47 ajouts et 30 suppressions
  1. 47 30
      bible-mode.el

+ 47 - 30
bible-mode.el

@@ -78,7 +78,7 @@
   "Book module for Diatheke to query."
   :type '(choice (const :tag "None" nil)
                  (string :tag "Module abbreviation (e.g. \"KJV\")"))
-  :local t
+;;  :local t
   :group 'bible-mode)
 
 ;;;
@@ -583,25 +583,27 @@ Genesis 1:1 is used."
 (defun bible-mode-select-module ()
   "Ask user for a new text module for the current `bible-mode' buffer."
   (interactive)
-  (let ((module (completing-read "Module: " bible-mode-modules)))
-    (setq-local bible-mode-module module)
-    (bible-mode--display)))
+;;  (let* ((bible-mode-module (completing-read "Module: " bible-mode-modules)))
+;;    (bible-mode--display))
+
+  (setq-default bible-mode-module (completing-read "Module: " bible-mode-modules))
+  (bible-mode--display))
 
 ;;;###autoload
-(defun bible-mode-toggle-word-study()
+(defun bible-mode-toggle-word-study ()
   "Toggle the inclusion of word study for the active `bible-mode' buffer."
   (interactive)
   (setq bible-mode-word-study-enabled (not bible-mode-word-study-enabled))
   (if (equal major-mode 'bible-search-mode)
-      (bible-mode--display-search bible-mode-search-query bible-mode-search-mode bible-mode-module)
+      (bible-mode--display-search bible-mode-search-query bible-mode-search-mode)
     (bible-mode--display)))
 
-(defun bible-mode-toggle-red-letter()
+(defun bible-mode-toggle-red-letter ()
   "Toggle red letter mode for the active `bible-mode' buffer."
   (interactive)
   (setq bible-mode-red-letter-enabled (not bible-mode-red-letter-enabled))
   (if (equal major-mode 'bible-search-mode)
-      (bible-mode--display-search bible-mode-search-query bible-mode-search-mode bible-mode-module)
+      (bible-mode--display-search bible-mode-search-query bible-mode-search-mode)
     (bible-mode--display)))
 
 ;;;###autoload
@@ -621,8 +623,9 @@ 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" "regex" "multiword") nil t "lucene")))
-      (bible-mode--open-search query searchmode bible-mode-module))))
+    (let* ((bible-mode-module (buffer-local-value 'bible-mode-module (current-buffer)))
+	   (searchmode (completing-read "Search Mode: " '("lucene" "phrase" "regex" "multiword") nil t "lucene")))
+      (bible-mode--open-search query searchmode))))
 
 ;;;###autoload
 (defun bible-search-mode-follow-verse ()
@@ -929,13 +932,23 @@ Note: compiler warns about unused `window' argument."
       (puthash query (bible-mode--morph-query query database) hash)))
 
 (defvar bible-mode-outline-strings
-  '((" I." .  "\n    I.")
-    (" 1." . "\n 1.")
-    (" 2." . "\n 2.")
-    (" 3." . "\n 3.")
-    (" a." . "\n   a.")
-    (" b." . "\n   b.")
-    (" c." . "\n   c.")    
+  '((" I." . "\n I.")
+    (" II." . "\n II.")
+    (" III." . "\n III.")
+    (" IV." . "\n IV.")
+    (" V." . "\n V.")
+    (" 1." . "\n  1.")
+    (" 2." . "\n  2.")
+    (" 3." . "\n  3.")
+    (" 4." . "\n  4.")
+    (" 5." . "\n  5.")
+    (" 6." . "\n  6.")
+    (" 7." . "\n  7.")
+    (" 8." . "\n  8.")
+    (" 9." . "\n  9.")
+    (" a." . "\n    a.")
+    (" b." . "\n    b.")
+    (" c." . "\n    c.")    
     (". ." . ".")
     (" . " . ". ")))
 
@@ -1132,12 +1145,15 @@ XXX In processing subnodes, each case will prepend a space if it needs it."
 	       (add-face-text-property (- (point) (length word)) (point) '(:foreground "gray50"))))))))
 
 
-(defvar bible-mode-debugme nil)
+;;(defvar bible-mode-debugme nil)
 
 (defun bible-mode--display (&optional verse)
   "Render text for `bible-mode'. 
 If VERSE is supplied, set cursor at verse."
 
+  ;; Display buffers can have different modules.
+  (setq-local bible-mode-module (default-value 'bible-mode-module))
+
   ;; Clear buffer and insert the result of calling bible-mode--exec-diatheke.
   (setq buffer-read-only nil)
   (erase-buffer)
@@ -1229,7 +1245,7 @@ If VERSE is supplied, set cursor at verse."
   "Keymap action function---select module user chooses."
   (interactive)
   (let ((item (get-text-property (point) 'module)))
-    (setq-default bible-mode-module item)
+     (setq-default bible-mode-module item)
     (bible-open)))
     
 
@@ -1266,29 +1282,28 @@ If VERSE is supplied, set cursor at verse."
 
 ;;;;; Bible Searching
 
-(defun bible-mode--open-search (query searchmode mod)
+(defun bible-mode--open-search (query searchmode)
   "Open a search buffer of QUERY using SEARCHMODE in module MOD."
-  (let ((buf (get-buffer-create (concat "*bible-search-" (downcase mod) "-" query "*"))))
+  (let ((buf (get-buffer-create (concat "*bible-search-" (downcase bible-mode-module) "-" query "*")))) 
     (set-buffer buf)
     (bible-search-mode)
-    (bible-mode--display-search query searchmode mod)
+    (bible-mode--display-search query searchmode)
     (pop-to-buffer buf nil t)))
 
-(defun bible-mode--display-search (query searchmode mod)
-  "Render results of search QUERY from SEARCHMODE.
-Module MOD is used for the query."
+(defun bible-mode--display-search (query searchmode)
+  "Render results of search QUERY from SEARCHMODE."
   (setq buffer-read-only nil)
   (erase-buffer)
   
   (let* ((result (string-trim (replace-regexp-in-string 
 			       "Entries .+?--" "" 
-			       (bible-mode--exec-diatheke query nil "plain" searchmode mod))))
+			       (bible-mode--exec-diatheke query nil "plain" searchmode bible-mode-module))))
 	 (match 0)
 	 (matchstr "")
 	 (verses nil)
 	 (query-verses "")
 	 fullverses)
-    (if (equal result (concat "none (" mod ")"))
+    (if (equal result (concat "none (" bible-mode-module ")"))
 	(insert "No results found."
 		(if (equal searchmode "lucene")
 		    " Verify index has been build with mkfastmod."
@@ -1316,7 +1331,8 @@ Module MOD is used for the query."
 	  (if query-verses
 	      (setq query-verses (concat query-verses ";" verse))
 	    (setq query-verses verse)))
-	(setq fullverses (let ((bible-mode-show-diatheke-exec nil)) (bible-mode--exec-diatheke query-verses nil nil nil mod)))
+	(setq fullverses (let ((bible-mode-show-diatheke-exec nil)) 
+			   (bible-mode--exec-diatheke query-verses nil nil nil bible-mode-module)))
 
 	(insert fullverses)
 	    
@@ -1324,10 +1340,10 @@ Module MOD is used for the query."
 	  (erase-buffer)
 	  (bible-mode--insert-domnode-recursive (dom-by-tag html-dom-tree 'body) nil nil)
 	  (goto-char (point-min))
-	  (while (search-forward (concat "(" mod ")") nil t)
+	  (while (search-forward (concat "(" bible-mode-module ")") nil t)
 	    (replace-match "")))))
 
-    (setq mode-name (concat "Bible Search (" mod))
+    (setq mode-name (concat "Bible Search (" bible-mode-module))
     (when bible-mode-search-range
       (setq mode-name (concat mode-name " [" bible-mode-search-range "]")))
     (setq mode-name (concat mode-name ")"))
@@ -1425,6 +1441,7 @@ left-to-right. XXX Why doesn't this work for the tooltips?"
 
 (defun bible-mode--set-location (book chapter &optional verse)
   "Set the BOOK, CHAPTER and optionally VERSE of the active `bible-mode' buffer."
+  (setq-local bible-mode-module (default-value 'bible-mode-module))
   (setq-local bible-mode-current-book book)
   (setq-local bible-mode-current-book-name (car book))
   (setq-local bible-mode-current-chapter chapter)