- emacs/
- Emacs 运行';莱恩·斯万克';(正在调用clojure服务器)与elisp
Emacs 运行';莱恩·斯万克';(正在调用clojure服务器)与elisp
Emacs 运行';莱恩·斯万克';(正在调用clojure服务器)与elisp,emacs,clojure,elisp,swank,Emacs,Clojure,Elisp,Swank,正如所问所答。我可以用lein swank在Aquamacs上运行clojure
在运行slime/clojure之前,我需要自动运行“lein swank”
问:有没有一种方法可以自动做到这一点?我的意思是,在调用slime/clojure(M-x slime connect)时,如何自动运行命令'lein swank'
问:如果我必须拿出elisp代码来运行“lein swank”,我该怎么做
补充
根据于尔根·霍策尔的回答,我对elisp进行了如下修改
(defun lein-swan
正如所问所答。我可以用lein swank在Aquamacs上运行clojure
在运行slime/clojure之前,我需要自动运行“lein swank”
- 问:有没有一种方法可以自动做到这一点?我的意思是,在调用slime/clojure(M-x slime connect)时,如何自动运行命令'lein swank'李>
- 问:如果我必须拿出elisp代码来运行“lein swank”,我该怎么做
补充
根据于尔根·霍策尔的回答,我对elisp进行了如下修改
(defun lein-swank ()
(interactive)
(let ((default-directory (locate-dominating-file default-directory "/Users/smcho/bin/leiningen")))
(when (not default-directory)
(error "Not in a Leiningen project."))
;; you can customize slime-port using .dir-locals.el
(let ((proc (start-process "lein-swank" nil "/Users/smcho/bin/leiningen/bin/lein" "swank" (number-to-string 4005))))
(when proc
(process-put proc :output nil)
(set-process-sentinel proc (lambda (proc event)
(message "%s%s: `%S'"
(process-get proc :output)
proc (replace-regexp-in-string "\n" "" event))))
(set-process-filter proc
(lambda (proc output)
;; record last line of output until connected (possible error message)
(process-put proc :output (concat (process-get proc :output) output))
(when (string-match "Connection opened on" output)
(slime-connect "localhost" 4005)
;; no need to further process output
(set-process-filter proc nil))))
(message "Starting swank server...")))))
(德芬·莱因·斯万克()
(互动)
(let((默认目录(定位主要文件默认目录“/Users/smcho/bin/leiningen”))
(何时(非默认目录)
(错误“不在Leiningen项目中”)
;您可以使用.dir-locals.el自定义slime端口
(let((proc(启动进程“lein-swank”nil)/Users/smcho/bin/leiningen/bin/lein“swank”(编号至字符串4005)))
(当程序
(进程put proc:output nil)
(设置进程sentinel进程(lambda)(进程事件)
(消息“%s%s:`s”
(进程get proc:输出)
proc(替换字符串“\n”“事件”中的regexp)))
(设置过程过滤器程序
(λ(过程输出)
;记录连接前的最后一行输出(可能的错误消息)
(进程put proc:output(concat(进程get proc:output)输出))
(当(字符串匹配“打开连接”输出时)
(slime connect“localhost”4005)
;无需进一步处理输出
(设置进程筛选器proc nil)))
(消息“正在启动swank服务器…”()()()))
但是,我犯了这个错误
No project.clj found in this directory. lein-swank: `"exited abnormally with code 1"'.
在此目录中找不到project.clj。lein swank:“‘异常退出,代码为1’”。
我发现我应该将pwd改为~/bin/leiningen来运行“lein swank”。只需将lein binary放入路径字符串中,它就不会运行。我为这项工作做了一个要点:
只需使用交互式命令“M-x lein-swank”,它将在当前目录中生成命令并连接到它
我对lein swank做了几项改进:
lein-swank命令现在可以自定义:如果其bin目录不属于路径环境,则可以使用Leiningen
添加了目录作为交互参数:如果在当前目录的主要位置中找不到project.clj,则可以指定一个位置
我为这份工作做了一个要点:
只需使用交互式命令“M-x lein-swank”,它将在当前目录中生成命令并连接到它
我对lein swank做了几项改进:
lein-swank命令现在可以自定义:如果其bin目录不属于路径环境,则可以使用Leiningen
添加了目录作为交互参数:如果在当前目录的主要位置中找不到project.clj,则可以指定一个位置
@Jurgen:谢谢你的回答,我修改并尝试了,但是我有一些错误。你能检查一下吗?只是让lein swank更灵活(lein swank命令的自定义变量)和更不容易出错(如果project.clj不存在,则使用交互式参数)。@Jurgen:现在它询问“Leiningen项目目录”,我给它“~/bin/Leiningen”。但有一个错误是:“搜索程序:没有这样的文件或目录,莱恩”。这个怎么了?而且,我已经知道莱宁根目录了。那么,如何更改代码以不询问目录?它询问project.clj所在的目录。您应该使用“M-x自定义变量”@Jurgen:~/bin/Leiningen拥有project.clj,将lein-swank命令设置为“~/bin/lein”(如果这是您的Leiningen脚本)。但我犯了个错误。对于lein-swank命令,可以设置(setq-lein-swank命令“~/bin/lein”)。@Jurgen:谢谢你的回答,我修改并尝试了,但是我遇到了一些错误。你能检查一下吗?只是让lein swank更灵活(lein swank命令的自定义变量)和更不容易出错(如果project.clj不存在,则使用交互式参数)。@Jurgen:现在它询问“Leiningen项目目录”,我给它“~/bin/Leiningen”。但有一个错误是:“搜索程序:没有这样的文件或目录,莱恩”。这个怎么了?而且,我已经知道莱宁根目录了。那么,如何更改代码以不询问目录?它询问project.clj所在的目录。您应该使用“M-x自定义变量”@Jurgen:~/bin/Leiningen拥有project.clj,将lein-swank命令设置为“~/bin/lein”(如果这是您的Leiningen脚本)。但我犯了个错误。对于lein-swank命令,是否可以设置(setq-lein-swank命令“~/bin/lein”)。必须在当前缓冲区的默认目录(当前目录)或主目录(父目录)中找到“project.clj”。您的修改不再搜索“project.clj”。在启动emacs之前,只需确保路径包含“lein”可执行文件。“project.clj”必须位于当前缓冲区的默认目录(当前目录)或主目录(父目录)中。您的修改不再搜索“project.clj”。在启动emacs之前,只需确保路径包含“lein”可执行文件。