我正在尝试创建一些快捷键来启动和停止金字塔项目中使用的“粘贴服务”命令。这是我的 elisp 代码:
(defun search-for-file (file dir)
"Recursively searches up the directory tree for a given filename"
(if (equal "/" dir)
nil
(if (member file (directory-files dir))
(concat (file-name-as-directory dir) file)
(progn
(cd-absolute dir)
(cd "..")
(search-for-file file default-directory)))))
(defun paster-serve-start ()
(interactive)
(progn
(start-process
"paster-serve" "server"
"paster" "serve" (search-for-file "development.ini" ".") "--reload" "-v")
(switch-to-buffer "server")))
(defun paster-serve-stop ()
(interactive)
(progn
(setq proc (get-process "paster-serve"))
(setq buf (get-buffer "server"))
(quit-process proc)
(kill-buffer buf)))
(define-prefix-command 'paster-map)
(global-set-key (kbd "C-p") 'paster-map)
(define-key paster-map (kbd "s") 'paster-serve-start)
(define-key paster-map (kbd "e") 'paster-serve-stop)
这些函数可以像我期望的那样从一个default-directory
设置为 development.ini 所在位置的缓冲区工作(例如 ~/myproject);但是,当我在项目基目录(例如 ~/myproject/myproject/templates)下的目录中时,我希望能够完成这项工作 - 当我尝试从 development.ini 所在的目录下运行该进程时,我得到了这个错误:
IOError: File '/home/myuser/myproject/~/myproject/development.ini' not found
是否有任何开明的 emacs 大师可以阐明我在这里做错了什么?