如何在通用Lisp中导航文件系统

时间:2018-08-16 19:11:00

标签: shell file-io common-lisp read-eval-print-loop

我用REPL(在Emacs / Slime中)写Common Lisp的次数越多,我越不愿意离开REPL来执行诸如创建目录,在目录中列出文件,更改目录的操作(尽管,cd很好),等等。

所以我想知道其他Lispers是否使用REPL来执行我通常使用shell进行的文件操作,如果可以的话,它们如何做到这一点?我设法最好的方法开始围绕uiop写一些包装。有更好的方法吗?

2 个答案:

答案 0 :(得分:4)

McLIM Lisp侦听器具有一些文件/目录命令

一个不寻常的选择是使用McCLIM。它是Lisp侦听器,具有bunch of commands,其中一些与文件和目录有关。也可以添加新命令。

命令看起来不像Lisp调用,但是它们提供提示,完成,帮助,对话框,命令列表,参数完成等。它们在内部由函数实现,但是它们可以处理具有大量元信息的类型化对象。因此,打印到侦听器的Lisp对象(如路径名)就是用户界面可以识别的对象。

典型命令可能是:

Show File /foo/bar.lisp
Show Directoy /foo/bar.lisp
Edit File /foo/bar.lisp

请参见McCLIM Lisp Listener

这来自Symbolics Lisp机器的Lisp侦听器,它引入了特定的用户界面,并具有各种精美的命令,而不仅仅是文件系统命令。可以列出一个目录,然后该目录列出的是实际路径名对象的表-可以用鼠标在其中显示一堆命令,具体取决于它是什么:主机,文件,目录等。 。McCLIM允许类似的事情。

McCLIM的主要缺点是它最常用的版本是基于相对原始的X11。我也希望它主要用于Linux(或类似版本)上。

但是在Lisp机器上,除了Zmacs中的Dired模式外,通常还具有文件系统浏览器。文件系统浏览器是另一个应用程序-具有非常古老的用户界面-还具有用于处理磁盘等的命令。

答案 1 :(得分:3)

不久前,我遇到了同样的问题,因此进行了一些研究。结果:

SHELISP:Common Lisp的Unix shell命令
http://dan.corlan.net/shelisp/

  

Shelisp是一个非常简短的程序,它提供了用于构成的机制   并运行Unix shell(尤其是bash)命令和构造   来自Common Lisp。

     

从本质上讲,它提供了“!”您可以使用的语法   用于运行命令和'[]'嵌入式模式,您可以在其中输入bash   脚本并获取标准输出,作为Lisp字符串。

     

Lisp表达式可以使用'?'包含在任何命令或脚本中。   句法。新版本还包含一个“ sh”宏,该宏可以调用   unix实用程序直接使用lisp用户熟悉的语法。

我还没有使用过,但是我读了手册,看起来很有趣