Erlang 和 Elixir 的多彩 REPL shell

sof*_*sof 4 erlang elixir erlang-shell

Learn some ErlangIEx如何为 REPL shell 着色?是谢尔稳定的直接替代?

zxq*_*xq9 5

在 LYSE 中完成此操作的方式是使用名为highlight.js的 javascript 插件,因此 LYSE 并没有真正做到这一点,您的浏览器才是。大多数主流(ish)语言都有可用于 highlight.js 的插件/模式。如果您对网络感兴趣,这是一种方法(除非用户无法使用 JS 或已将其关闭)。

这实际上根本不是突出显示的外壳,也不是浏览器之外的任何地方都有用。我一直在尝试一种更通用的方法,最初是通过在 HTML 和 XML 文档中插入静态格式(向它提供一个文档,并且它输出一个带有 Erlang 语法的文档,每当检测到/标记时以某种方式突出显示)。我还没有为此发布一个像样的项目(在我的优先级列表 atm 中非常低),但我可以为您指明一些可靠的灵感方向:wx:demo的来源。

特别注意函数demo:code_area/1。在那里您将看到如何使用标记化例程为 wx:demo 应用程序中的源代码文本显示区域提供高亮提示。这可以为构建您自己的源代码突出显示/显示实用程序提供坚实的基础。(我认为这不是不可能的,考虑到今天常用的每个终端都能正确响应 ANSI 颜色代码,向 shell 编写一个插件来直接突出显示终端输入——并不是说这个功能在片刻。)

编辑(由神奇神奇狗弗雷德的评论提示)

关于 ANSI 颜色代码的主题,如果这就是您真正想要的,那么它们很容易实现为您在终端中返回的任何字符串值的前置。终端对它们进行转义,因此您不会看到字符,但会执行代码表示的任何操作。没有终止(它不像包含文本的标记标签)并且通常没有“要返回的默认颜色”的概念(尽管 telnet 和终端模式有 gajillion-jillion 扩展,可以启用各种废话,例如这个)。

基本着色的一个例子是telcon:greet/0telcon:sys_help/0功能的V0.1代码ErlMUD(连同其他地方摆-着色游戏是不大不小的事情)。您看到的是每种颜色都有一个预先构建的列表,但这可以用任何方式表示,只要能在字符串的前面获取这些值。(我只是碰巧记得代码值序列,但不记得组成它们的字符;代码的下一个版本对此表示方式有所不同。)这里是ANSI 颜色代码列表的链接和关于给外壳着色。玩转!它的书呆子乐趣,1980 年代的风格!

哦,我差点忘了......如果你真的想在没有像ncurses这样的傻小孩玩具来帮助你的情况下进入兔子洞,看看termcap

  • 实际上,我确信 iex 使用 ANSI 颜色代码,而且我很确定 kjell 也是如此。从问题中不清楚,但我认为他是在询问终端内的颜色。 (2认同)