【问题标题】:Running 'lein swank' (calling clojure server) with elisp使用 elisp 运行“lein swank”(调用 clojure 服务器)
【发布时间】:2010-07-28 19:40:31
【问题描述】:

按照here 的提问和回答。我可以使用 'lein swank' 在 Aquamacs 上运行 clojure。

我需要在运行 slime/clojure 之前自动运行“lein swank”。

  • 问:有没有办法自动做到这一点?我的意思是如何在调用 slime/clojure (M-x slime-connect) 时自动运行命令“lein swank”。
  • 问:如果我必须想出 elisp 代码来运行“lein swank”,我该怎么做?

添加

根据 Jürgen Hötzel 的回答,我将省略号修改如下。

(德芬莱因斯万克() (交互的) (let ((default-directory (locate-domination-file default-directory "/Users/smcho/bin/leiningen"))) (当(不是默认目录) (错误“不在 Leiningen 项目中。”)) ;;你可以使用 .dir-locals.el 自定义 slime-port (let ((proc (start-process "lein-swank" nil "/Users/smcho/bin/leiningen/bin/lein" "swank" (number-to-string 4005)))) (当 proc (处理-放置过程:输出零) (set-process-sentinel proc (lambda (proc event) (消息“%s%s:‘%S’” (过程获取过程:输出) proc (replace-regexp-in-string "\n" "" 事件)))) (set-process-filter proc (λ(过程输出) ;;记录最后一行输出直到连接(可能的错误消息) (过程-放置过程:输出(连接(过程-获取过程:输出)输出)) (当(字符串匹配“连接打开”输出时) (粘液连接“本地主机”4005) ;;无需进一步处理输出 (set-process-filter proc nil)))) (消息“正在启动 swank 服务器...”)))))

但是,我收到了这个错误。

在此目录中找不到 project.clj。 lein-swank: `"异常退出,代码为 1"'。

我发现我应该将 pwd 更改为 ~/bin/leiningen 以运行“lein swank”。只是将 lein 二进制文件放在 PATH 字符串中不会使其运行。

【问题讨论】:

  • "project.clj" 必须在当前缓冲区的默认目录(当前目录)或支配(父目录)中找到。您的修改不再搜索“project.clj”。只需在启动 emacs 之前确保 PATH 包含您的“lein”可执行文件。

标签: emacs clojure elisp swank


【解决方案1】:

我为这份工作做了一个要点:

http://gist.github.com/419364

只需使用交互式命令“M-x lein-swank”,它将在当前目录中生成命令并连接到它。

我对 lein-swank 做了几处改进:

  1. lein-swank-command 现在可自定义:如果其 bin 目录不是您的 PATH 的一部分,您可以使用 Leiningen > 环境。

  2. 添加 directory 作为交互式参数:如果在当前目录的主要位置找不到 project.clj,您可以指定一个位置。

【讨论】:

  • @Jurgen :感谢您的回答,我修改并尝试了,但出现了一些错误。你能检查一下吗?
  • 只是让 lein-swank 更加灵活(lein-swank-command 的自定义变量)并且更不容易出错(如果 project.clj 不存在,则交互参数)。
  • @Jurgen :现在它询问“Leiningen 项目目录”,我给它“~/bin/leiningen”。但是有一个错误说:'正在搜索程序:没有这样的文件或目录,lein'。这有什么问题?而且,我已经知道 leiningen 目录。那么,如何改代码不问目录呢?
  • 它会询问你的 project.clj 所在的目录。您应该使用“M-x customize-variable”将 lein-swank-command 设置为“~/bin/lein”(如果这是您的 Leiningen 脚本)
  • @Jurgen : ~/bin/leiningen 有 project.clj。但我得到了一个错误。而对于lein-swank-command,是否可以设置(setq lein-swank-command "~/bin/lein")。
猜你喜欢
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-28
  • 1970-01-01
  • 2010-12-16
  • 1970-01-01
  • 2016-04-13
相关资源
最近更新 更多