“如何让emacs运行”;bk编辑“;在文件被打开之前?
我们必须使用BitKeeper,这需要在可编辑之前运行“bk编辑”。使整个回购协议可编辑是不可能的,因为它太大了。询问一种让emacs在回购文件中自动运行“bk edit”的方法。类似于“如何让emacs运行”;bk编辑“;在文件被打开之前?,emacs,elisp,Emacs,Elisp,我们必须使用BitKeeper,这需要在可编辑之前运行“bk编辑”。使整个回购协议可编辑是不可能的,因为它太大了。询问一种让emacs在回购文件中自动运行“bk edit”的方法。类似于查找文件noselect的方法如何--完成您的工作,然后切换到buffer或使用(显示buffer(查找文件noselect…)这是我最近的一个帖子,类似于在最终将文件显示在缓冲区之前做一些事情:请给出一个用例。我相信应该有更好的方法来做。 如果没有,我会更新我的答案 我想在每个文件上运行钩子会非常烦人。 我可以
查找文件noselect
的方法如何--完成您的工作,然后切换到buffer
或使用(显示buffer(查找文件noselect…)
这是我最近的一个帖子,类似于在最终将文件显示在缓冲区之前做一些事情:请给出一个用例。我相信应该有更好的方法来做。
如果没有,我会更新我的答案
我想在每个文件上运行钩子会非常烦人。
我可以用C-x d!在任何文件上运行命令
使用此代码:
(require 'dired-x)
(global-set-key (kbd "C-x d") 'dired-jump)
C-x d不仅会用目录
打开当前目录,而且
同时跳转到当前文件的行。使用此!将运行一个命令
此命令可以通过以下选项卡自动完成:
也优于您当前的解决方案
UPD1
现在我看到您只想对存储库中的文件运行bk edit
。
以下是您如何做到这一点:
(defvar bitkeeper-dirs '("/tmp/"))
(defun bitkeeper-p (file)
(reduce (lambda (a b) (or a (string-match (expand-file-name b) file)))
bitkeeper-dirs
:initial-value nil))
(add-hook 'find-file-hook
(lambda ()
(let ((file (buffer-file-name)))
(when (bitkeeper-p file)
(read-only-mode -1)
(shell-command (format "cat %s > /tmp/stuff" file))))))
Bitkeeper目录中。
当前谓词只是测试正在打开的文件是否位于以下位置之一:
这个目录
git status
看看它会有什么回报“cat%s>/tmp/stuff”
替换为“bk edit%s”
。
当前字符串仅用于测试目的(defun bitkeeper-p (file)
(string= "0" (shell-command-to-string
(format "bk root %s") file)))
事实上,这是因为我们使用的是BitKeeper,在文件被编辑之前,它需要在文件上运行“bk编辑”。我希望emacs在文件打开时自动在文件上运行bk编辑,额外的好处是如果emacs运行“bk编辑”只在BitKeeper repo文件上谢谢你提供的信息。你为什么要做某件事的问题可能比你想做什么更重要。问题的标题很好,但是如果你添加了关于
bk edit
的部分,并删除了不起作用的代码,那就太完美了。你好,abo abo,这很有效,但发生在emacs标记之后缓冲区受写保护。因此,在操作系统中,文件是可编辑的,但emacs仍然认为文件不可写。也许让它对文件进行还原可以工作?顺便说一句。测试文件是否处于bk repo中的最佳方法是运行“bk root file”状态为0意味着它在repo中。状态为1意味着它不是。不幸的是,我们的克隆可以无处不在,并且随时更改路径,硬编码它们是不实际的。目前我使用“/”匹配所有文件