emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master 27774a5: Recover from search head pointing to a killed buf


From: Michael Heerdegen
Subject: [elpa] master 27774a5: Recover from search head pointing to a killed buffer
Date: Sun, 29 Oct 2017 09:54:24 -0400 (EDT)

branch: master
commit 27774a575cbb074d2fab4acbed50c276739783db
Author: Michael Heerdegen <address@hidden>
Commit: Michael Heerdegen <address@hidden>

    Recover from search head pointing to a killed buffer
    
    Try to resume from the associated buffer file; alternatively restart
    the search.
---
 packages/el-search/el-search.el | 27 ++++++++++++++++++++++++---
 1 file changed, 24 insertions(+), 3 deletions(-)

diff --git a/packages/el-search/el-search.el b/packages/el-search/el-search.el
index 11610dd..23f1abe 100644
--- a/packages/el-search/el-search.el
+++ b/packages/el-search/el-search.el
@@ -338,8 +338,6 @@
 ;;
 ;; - The default keys are not available in the terminal
 ;;
-;; - Handle buffers killed/files closed when resuming a search
-;;
 ;; - Make searching work in comments, too? (->
 ;;   `parse-sexp-ignore-comments').  Related: should the pattern
 ;;   `symbol' also match strings that contain matches for a symbol so
@@ -1911,7 +1909,30 @@ that the current search."
            (current-head (el-search-object-head search))
            (current-search-buffer (el-search-head-buffer current-head)))
       (if (not (buffer-live-p current-search-buffer))
-          (user-error "Search head points to a killed buffer")
+          (let* ((head-file-name (el-search-head-file current-head))
+                 (search (el-search-reset-search search))
+                 (buffer-stream (el-search-head-buffers (el-search-object-head 
search)))
+                 (buffer-stream-from-head-file
+                  (let ((inhibit-message t))
+                    (and head-file-name
+                         (cadr (stream-divide-with-get-rest-fun
+                                buffer-stream
+                                (lambda (s)
+                                  (while (and (not (stream-empty-p s))
+                                              (or (not (stringp (stream-first 
s)))
+                                                  (not (file-equal-p 
(stream-first s) head-file-name))))
+                                    (stream-pop s))
+                                  s)))))))
+            (message "Search head points to a killed buffer...")
+            (sit-for 1)
+            (if (or (not head-file-name)
+                    (stream-empty-p buffer-stream-from-head-file))
+                (el-search--message-no-log "Restarting search...")
+              (setf (el-search-head-buffers (el-search-object-head search))
+                    buffer-stream-from-head-file)
+              (message "Restarting from %s..." (file-name-nondirectory 
head-file-name)))
+            (sit-for 2)
+            (el-search-continue-search))
         (setq this-command 'el-search-pattern)
         (pop-to-buffer current-search-buffer 
el-search-display-buffer-popup-action)
         (let ((last-match (el-search-object-last-match search)))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]