Commit Diff


commit - deed628864ee2f765ad8f278be075050ab7776b5
commit + 4a2b1b6cc96593fe80ccb13eccdd933bc41f21b4
blob - 2e29f7fde721051b463a47f05c6968a0e6106391
blob + e4d2c76e4526238abcdd64b08f21930827fac7b1
--- init.el
+++ init.el
@@ -12,6 +12,7 @@
  load-path)
 
 (require 'lh)
+(require 'lh-resurrect)
 (require 'iso-transl)
 
 (with-eval-after-load 'paredit
@@ -231,6 +232,7 @@
  '(inferior-lisp-program "ros run")
  '(kept-new-versions 10)
  '(kept-old-versions 5)
+ '(lh/global-resurrect-mode t)
  '(marginalia-mode t)
  '(mouse-wheel-progressive-speed nil)
  '(mouse-wheel-scroll-amount '(5 ((shift) . hscroll) ((meta)) ((control) . text-scale)))
blob - /dev/null
blob + 552275fa9244b0893f5a71a0b5862d40ada37d36 (mode 644)
--- /dev/null
+++ lisp/lh-resurrect.el
@@ -0,0 +1,33 @@
+;; -*- lexical-binding: t; -*-
+
+(defgroup lh/resurrect nil
+  "Records killed buffers and allows them to be resurrected."
+  :group 'convenience
+  :prefix "lh/resurrect")
+
+(defvar lh/resurrect-recently-killed nil)
+
+(defvar lh/resurrect-mode-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map (kbd "C-x R") #'lh/resurrect-latest)
+    map))
+
+(defun lh/resurrect--kill-buffer-hook ()
+  (when buffer-file-name
+    (push buffer-file-name lh/resurrect-recently-killed)))
+
+(defun lh/resurrect-latest ()
+  (interactive)
+  (when-let (fn (pop lh/resurrect-recently-killed))
+    (find-file fn)))
+
+(define-minor-mode lh/global-resurrect-mode
+  "Records killed buffers and allows them to be resurrected."
+  :global t
+  :group 'lh/resurrect
+  :keymap lh/resurrect-mode-map
+  (if lh/global-resurrect-mode
+      (add-hook 'kill-buffer-hook #'lh/resurrect--kill-buffer-hook)
+    (remove-hook 'kill-buffer-hook #'lh/resurrect--kill-buffer-hook)))
+
+(provide 'lh-resurrect)