Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos Emacs可以跟踪像BBEdit这样的文件吗?_Macos_Emacs - Fatal编程技术网

Macos Emacs可以跟踪像BBEdit这样的文件吗?

Macos Emacs可以跟踪像BBEdit这样的文件吗?,macos,emacs,Macos,Emacs,引述: BBEdit在OS X上具有此功能: -在BBEdit中,打开“myfile.txt” -在Finder中,将“myfile.txt”重命名为“myfile2.txt” -现在,在BBEdit中,文档显示为“myfile2.txt”,保存文件将更新为“myfile2.txt” 这比ST2用例要好得多: -在升华文本2中,打开“myfile.txt” -在Finder中,将“myfile.txt”重命名为“myfile2.txt” -现在,将文档保存在ST2中会创建一个重复文件“myfi

引述:

BBEdit在OS X上具有此功能:
-在BBEdit中,打开“myfile.txt”
-在Finder中,将“myfile.txt”重命名为“myfile2.txt”
-现在,在BBEdit中,文档显示为“myfile2.txt”,保存文件将更新为“myfile2.txt”

这比ST2用例要好得多:
-在升华文本2中,打开“myfile.txt”
-在Finder中,将“myfile.txt”重命名为“myfile2.txt”
-现在,将文档保存在ST2中会创建一个重复文件“myfile.txt”。这导致我的工作区中同一文件有两个稍有不同的版本,导致以后的问题。 Emacs和Sublime文本也会发生类似的情况。所以,我很想找到一种方法让Emacs做BBEdit正在做的事情

我搜索了谷歌,但实际上我不确定在这里搜索什么。有专门的艺术术语吗?不管怎样,我都没发现什么有趣的东西


有没有现成的方法可以做到这一点?还是会很复杂?表示此处使用的是
NSURL
的“书签”功能。

来自最新Emacs主干的
新闻
文件(未发布)

支持文件系统通知

Emacs现在支持文件系统更改的通知,例如文件的创建、修改和删除。这需要“glib”API或“inotify”API(仅在GNU/Linux系统上)。在MS Windows系统上,Windows XP和更新版本支持此功能

因此,GNU/Linux和Windows用户可以使用您请求的功能。不幸的是,(在Emacs中)似乎不支持在OS X上生成的文件通知

下面的代码应该是您想要的(尽管它还没有经过彻底的测试)。它需要最新(未发布)的Emacs

(需要“文件通知”)
(需要“cl lib”)
(将我的文件定义为fd哈希(生成哈希表))
(取消我的文件通知添加重命名监视(&可选文件)
(let((文件名(或文件缓冲区文件名)))
(当文件名为
(puthash文件名)
(文件通知添加监视文件名)
"(更改)
'我的句柄(文件更改)
我的文件到fd散列)
(取消我的文件通知rm重命名监视(&可选文件)
文件名(或文件名)
缓冲区文件名)
(fd(gethash文件名my file to fd hash)))
停止看文件
(当fd
(文件通知rm watch fd)
(remhash文件名my file to fd hash)))
(添加到列表“查找文件挂钩”我的文件通知添加重命名监视)
(添加到列表“kill buffer hook”我的文件通知rm重命名监视)
(取消我的句柄文件更改(事件)
(让*((fd(cl第一事件))
(行动(第二事件))
(档案(cl第三事件))
(更名为(cl第四事件))
(访问缓冲区(获取文件缓冲区文件)))
;;忽略“重命名”以外的事件以及“重命名”事件
;由于emacs备份文件而生成
(何时(和(均衡器动作“重命名”)
(不是(backup-file-name-p重命名为)))
(消息(格式为“文件%s已重命名为”文件))
;如果文件未打开,则忽略通知
(访问缓冲区时)
(使用当前缓冲区访问缓冲区)
(将已访问的文件名重命名为)
(我的文件通知rm重命名监视文件)
(我的文件notify add rename watch重命名为(()()))

一些可能有助于搜索的术语:“FSEvents”是OS X用于查看文件的较低级别API,似乎(从快速搜索中)没有任何尝试让emacs意识到它。Linux使用了类似的叫做“inotify”的东西,emacs也没有使用,但是inotify和emacs之间交互的想法似乎至少在互联网上被提到过。哇,太棒了。谢谢为钩子上访问的每个文件激活此代码是一个好主意吗?嗨,@NoahSlater,该代码只是一个示例。它并不打算在init文件中使用,在使用之前,您可能需要根据您的需要对其进行修改。此外,我还没有测试过它。这不应该是一个软件包安装,或者甚至是在主emacs中使用吗?