Emacs参数中的子进程和文件路径

时间:2011-02-11 07:28:56

标签: python emacs elisp pyramid

我正在尝试创建一些快捷键来启动和停止金字塔项目中使用的“贴纸服务”命令。这是我的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设置为develop.ini存在的位置(例如〜/ myproject);但是,当我在项目基本目录下的目录中时,我希望能够完成这项工作(例如〜/ myproject / myproject / templates) - 当我尝试从developer.ini所在的目录运行该过程时,我得到了这个错误:

IOError: File '/home/myuser/myproject/~/myproject/development.ini' not found

是否有任何开明的emacs大师可以解释我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

我对所有cd函数都有点警惕。根据{{​​1}}中的类似函数尝试此search-for-file的替代定义:

project-local-variables.el