如何在 Emacs Lisp 中使用 Slime 运行 Common Lisp 代码

2023-12-10

出于某种原因,我编写了一些 Common Lisp 代码来完成我想要的操作。我使用 QuickLisp 和 Slime。现在我希望能与Emacs Lisp集成。

我尝试使用

(slime)
(slime-eval-region start end)
...

在我的 el 文件中,但它不起作用。

我只是运行 Common Lisp 代码并捕获返回值,仅此而已。 所以我该怎么做?


如果我理解正确的话,你想将 Common Lisp 代码作为 Elisp 字符串, 在 SLIME 中对其进行评估,并获得带有副作用的 Elisp 字符串输出。

您可以使用以下设置代码来执行此操作:

(require 'slime)
(defun lispy--eval-lisp (str)
  "Eval STR as Common Lisp code."
  (unless (slime-current-connection)
    (let ((wnd (current-window-configuration)))
      (slime)
      (while (not (and (slime-current-connection)
                       (get-buffer-window (slime-output-buffer))))
        (sit-for 0.2))
      (set-window-configuration wnd)))
  (let (deactivate-mark)
    (cadr (slime-eval `(swank:eval-and-grab-output ,str)))))

或者只是(require 'le-lisp)如果你已经安装了lispy来自 MELPA 的包裹或github.

这是一个示例用法*scratch*:

(lispy--eval-lisp "(load \"~/quicklisp/setup\")")
;; "T"

(lispy--eval-lisp "(ql:quickload 'png)")
;; "(PNG)"

(lispy--eval-lisp "(png:make-image 5 5 1)")
;; "#3A(((0) (0) (0) (0) (0))
;;     ((0) (0) (0) (0) (0))
;;     ((0) (0) (0) (0) (0))
;;     ((0) (0) (0) (0) (0))
;;     ((0) (0) (0) (0) (0)))"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Emacs Lisp 中使用 Slime 运行 Common Lisp 代码 的相关文章

  • 如何让Emacs显示与实际存储的不同的字符?

    我想使用Elisp为Emacs实现动态文本替换 仅替换显示 不替换实际存储的文件 例如 在 LaTeX 文档中 我想输入 alpha 然后让 Emacs 将其显示为 因此更容易阅读 但在结果中 tex文件 我还想要 alpha 代替 被拯救
  • 更改 Common Lisp REPL 中文本的颜色

    我想控制 Common Lisp 中显示的文本的颜色 像这样的伪代码 print color red hello blue world 有什么办法可以做到这一点吗 我使用 SBCL 我的 repl 位于 emacs 内 谢谢 您可以使用AN
  • 要求 Emacs 更清楚地突出显示哪个窗口(窗格)具有焦点(光标)

    假设我将 Emacs 窗口分成多个图块 例如 When I switch between tiles aka windows in Emacs to edit my files e g using C x o I can see on wh
  • 在 emacs 的文件中不断出现的这些 ^M 是什么?

    我认为这可能与 TextMate 有关 但我们在一个小团队中工作 并且在 git 中几乎相同的文件的全文件冲突方面遇到了一些问题 在一个分支中 文件的每一行都附加了 M 这是什么神秘的事 M角色应该做什么 它从哪里来 我们的开发人员在 Wi
  • Emacs org-mode:使用 goto 界面重新归档

    我经常使用组织模式的捕获 重新文件 归档结构 但我对重新归档的工作方式有疑问 我使用 IDO 补全 这样当我重新归档树时C c C w我将所有可能的树重新归档到迷你缓冲区中 然而 这会导致大量可能的补全 而这些补全实际上可读性不太好 如果您
  • 如何更改 ESS 中的智能分配键(“_”到“<-”)绑定

    在 emacs ESS 中 如何正确更改 ess smart S assign 的键绑定 我尝试的是添加 custom set variables ess smart S assign key to my emacs 但这让奇怪的事情发生了
  • 如何在 Emacs à la Vim 中设置标记?

    I d like to be able to set multiple marks in Emacs like Vim does In Vim you might press m b and that would set a mark at
  • Emacs cperl - 常量块中的缩进

    我正在运行基于 GNU Emacs 24 3 50 2 的 Aquamacs 3 0a cperl 版本是 6 2 当我编辑 Perl 常量块时 我得到了我不想要的额外缩进 use constant ONE gt 1 TWO gt 2 TH
  • 如何清空或清除 emacs 迷你缓冲区?

    有时 迷你缓冲区的内容会显示命令的输出 emacs 24 当输出只有一行时 这并不会造成太大的不便 当命令有多行长并且迷你缓冲区使用许多可用于其他用途的显示行时 这会更烦人 有没有办法清除迷你缓冲区的内容 注意 当我M echo usage
  • Org LaTeX 预览在视网膜显示屏上模糊

    我所有的数学 科学笔记都使用 Emacs 24 4 org latex preview太棒了 但最近 我升级到了配备视网膜显示屏的 MacBook Pro 现在我发现组织模式下的所有方程都 模糊了 有什么设置可以更改为高分辨率吗 这是一个屏
  • Common Lisp:循环列表中连续对的最佳方法是什么?

    有时我需要循环遍历列表中的连续对 我现在的做法是 loop for x on lst while not null cdr x do something on car x and cadr x 我想知道是否有更好的 内置的方法来做到这一点
  • 修改verilog模式缩进

    我试图让 verilog 模式使用 2 个空格缩进除 decls 和always 之外的所有内容 这是我添加到 emacs 中的内容 define are not indented setq veril
  • 使用 Emacs 进行 Web 开发? (php/mysql/javascript/css/html

    我是一名网络开发人员 在我决定学习真正的编辑器并开始使用 emacs 之前六个月 我一直在使用各种编辑器和 ide s 进行 Web 开发 php javascript html css 我学习了所有基础知识 使用了入门套件 练习使用缓冲区
  • 删除emacs中多余的空行

    M x flush lines 删除缓冲区中的所有空白行 但是我只想删除多余的空白行 也就是说 如果有n个连续的空白行我想删除n 1并保留一个 我知道删除空白行可以完成该点下的空白行的工作 但是我想要一个适用于整个缓冲区的简单解决方案 有什
  • 使用 Quicklisp 安装后使用 iterate

    当我使用 Quicklisp 加载 iterate 包时 ql quickload iterate 似乎加载得很好 但没有一个功能真正起作用 当我进入 iterate iter for i from 0 to 10 collect i 我收
  • 如何将 emacs helm-find-file 对目录的默认操作更改为进入目录而不是在 dired 中打开?

    我正在使用 emacs prelude 我最近决定从 ido 转到 helm 所以我启用了helm and helm everywhere在 emacs 前奏中 除了默认行为之外 一切都运行良好helm find file 在伊多 我可以打
  • 如何在 emacs 24.x shell 中启用 pdbtrack python 调试?

    在 emacs 23 x 中 pdbtrack 集成 为您提供指向当前代码行的箭头 可与常规M x shell RET 例如 这对于在使用 Makefile 运行自动化测试时放入调试器非常有用 在 emacs 24 x 中 这不再起作用 我
  • 如何将缓冲区重命名为类似的名称

    这种情况经常发生在我身上 我正在使用多个M x shell贝壳同时 要打开下一个 shell 我必须将第一个 shell 重命名为rename buffer 然而 emacs 只是提示新的缓冲区名称 而不允许我重用现有的缓冲区名称来构建相关
  • 如何使用 Calc 列规则在 Emacs Org 模式中实现行索引列

    我希望在组织模式表中有一个列是一个简单的单调递增值 即行号 这样当我插入和删除随机行时索引值会自动调整 我怀疑这应该很简单 但看起来我让它变得太困难了 请注意 我是使用 Emacs 和 org 模式构建电子表格的新手 因此 一个简单的电子表
  • 如何使Emacs C源目录永久化?

    我是 Emacs 新手 刚刚学习如何使用它 我知道如何设置 Emacs C Source dir 但我不知道如何使此更改永久生效 我想我必须在 emacs 文件中设置它 但我不知道它的命令是什么 有人可以帮忙吗 通常 大多数用户可设置的变量

随机推荐