我想创建一个函数,它将使用buffer-file-name获取repo名称,并根据该名称scp到特定服务器。 (我不想使用流浪汉,因为它很慢,我更喜欢在本地工作和scp)
到目前为止,我有这个:
(setq save-project '(("~/projects/Repo/" .
(lambda ()
;; run bash command in background
(async-exec-command "???????")))))
(defun save-project-file ()
(interactive)
(let* ((path (vc-find-root buffer-file-name ".git"))
(pair (assoc path save-project)))
(if (not (null pair))
(funcall (cdr pair)))))
(add-hook 'after-save-hook 'save-project-file)
但我不知道如何创建字符串:
scp <PATH without root> user@server:~/place/<PATH>
我可以使用"scp %s user@server:~/place/%s"
格式,但如何在没有root和文件名的情况下获取没有root和目录的文件?
答案 0 :(得分:0)
我最终得到了这个:
(defun git-file-path (path)
(let* ((root (file-truename (vc-git-root path)))
(filename (file-name-nondirectory path))
(filename-length (length filename)))
(let ((chunk (file-relative-name path root)))
(substring chunk 0 (- (length chunk) filename-length)))))
和创建命令的格式:
(format "scp %s user@server.com:~/path/%s" buffer-file-name
(git-file-path buffer-file-name))