Bläddra i källkod

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 2 veckor sedan
förälder
incheckning
b69a30cca6
1 ändrade filer med 47 tillägg och 30 borttagningar
  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)