(defvar vmacs-killed-file-list nil
"List of recently killed files.")
(defun vmacs-add-to-killed-file-list ()
"If buffer is associated with a file name, add that file to the
`vmacs-killed-file-list' when killing the buffer."
(when buffer-file-name
(unless (or (string-match-p "COMMIT_EDITMSG" buffer-file-name)
(string-match-p "/cache/recentf" buffer-file-name))
(push buffer-file-name vmacs-killed-file-list))))
(add-hook 'kill-buffer-hook #'vmacs-add-to-killed-file-list)
(defun vmacs-undo-kill-buffer ()
"Reopen the most recently killed file, if one exists."
(interactive)
(when vmacs-killed-file-list
(message "reopen file: %s" (find-file (pop vmacs-killed-file-list)))))
1 个赞
如果用 recentf-mode
的话:
(defun my-reopen-closed-file ()
(interactive)
(find-file (car recentf-list)))
这先试了recentf这种方法, 但是有问题,比如我先打开a ,后打开b, 我再切换到a 把a kill掉,用你这种方法,打开的应该是b
1 个赞
删除文件的时候.运行hook,更新recentf的数据库不就可以了
我的观念是: 能依赖emacs内置的工具,尽量不要自己造轮子
确实有这个问题。用下面的方法或许可以解决这个问题,但是这个文件的顺序对 Recentf Mode 自身或许也有意义,Open File History 跟 Last Closed File 逻辑似乎有不同,不用 Recenf Mode 也挺好。
(add-hook 'kill-buffer-hook #'recentf-track-opened-file)
我自己还尝试过实现“重现打开上次关闭的 Buffer”,但这个功能看似简单,但实现起来却复杂,我还没写完就失去了兴趣。把对象限制在文件上面会让问题变得简单,实现起来也比较容易,应该也更有实用价值。
需求越简单,实现越容易,方案越实用。
只知道desktop-file的路过
你有没有在melpa里面找,看有没有类似的包,如果没有,恭喜你,这就是你的包了
似乎和 escreen
是类似的。
不了解。这个功能我最早是从 Chrome 上的 “Reopen Closed Tab” 了解到的,其它的地方也有类似的。
感觉是个挺有用的小功能,我已经加到自己的配置里了
spacemacs 里“打开最近关闭的 buffer”的默认绑定是SPCbu。
2 个赞
这个功能在李杀的 xah-fly-keys 里面有一些对应的实现。对实他的两个函数:
xah-close-current-buffer
xah-open-last-closed
xah-open-recently-closed
...
我是直接拿过来用了