branch: master commit 27774a575cbb074d2fab4acbed50c276739783db Author: Michael Heerdegen <michael_heerde...@web.de> Commit: Michael Heerdegen <michael_heerde...@web.de>
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)))