如何使用 telnet 在低级别与 Swank 服务器进行交互?

How to interact with a Swank server at a low level with telnet?

我正在尝试从命令行使用 Swank 服务器(没有特定的生产目的,只是想了解一些内容以备后用),但我不知道我可以输入什么来自 telnet 会话以获得任何可用的答案;例如,我如何评估 (+ 1 1)?

一个告诉:

It is indeed possible to communicate with a swank server if you familiarize yourself with the swank protocol, which seems to be underdocumented (see e. g. here: https://github.com/astine/swank-client/blob/master/swank-description.markdown). However, this exposes a TCP socket over a network, which could be unsafe. Once I tried that, too, but I was not satisfied with the IPC speed.

和link其实给出了一些提示,可惜没有例子。我无法得到任何结果。

这是我试过的;使用

单独启动服务器后
(swank:create-server :port 4005  :dont-close t :style NIL)

我试过类似的东西:

~ $ telnet localhost:4005
00001e(swank:listener-eval (+ 1 2))

并收到以下错误消息:

" "Reader error in file #<string-input stream from \"(swan...\" 0x6045ce0640>, position 20:
Cannot find the external symbol LISTENER-EVAL in #<\"SWANK\" package>.")Connection closed by foreign host

在这种情况下,我应该输入的字符串是什么?

我成功完成了这项工作:

00003e(:emacs-rex (swank:interactive-eval "(+ 1 2)") "cl-user" t 8)

注意第一个是 :emacs-rex 关键字,以及要评估的形式是如何在字符串中的。 8 在这里只是一个任意值。回复首先以00A1C8(:indentation-update ...)开头,后面是:

000031(:return (:ok "=> 3 (2 bits, #x3, #o3, #b11)") 8)