使用 EMACScript 代替 JavaScript

想到一个点子,用 Emacs 代替浏览器,用 Emacs API 代替 Web API,用 Emacs Lisp 代替 JavaScript:

例子:

<!DOCTYPE html>
<html lang="zh-Hans">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>EMACScript 测试</title>
  </head>
  <body>
    <script type="text/emacscript">
      (insert "当前时间: " (current-time-string))
    </script>
  </body>
</html>

浏览器支持,目前只有 EWW 支持:

(defun EMACScript (script)
  (when (equal (dom-attr script 'type) "text/emacscript")
    (eval (read (dom-text script)) 'lexical)))

(add-to-list 'shr-external-rendering-functions
             '(script . EMACScript))
15 个赞

第一个使用 EMACScript 的网站上线了:M-x eww EMACScript 测试

9 个赞

有意思的想法,哈哈哈,可以用在Org Mode博客导出后,嵌入这个,这样就只有Emacs用户能看到了。啊哈哈哈

Brendan Eich看了直呼内行 :rofl:

这样,可以直接用raw org file来做博客了。


ECMAScript,不行!

Emacscript,行!

我们Emacs真是太厉害啦!

马上渲染到你编辑器里!

:dog:


直接的read eval显然不太适合,应该用一个屏蔽IO交互的沙盒环境来eval

比如,用unsafep来判断表达式的纯度

(unsafep '(setq global-var 1))
;; => (global-variable global-var)

(unsafep '(shell-command "touch joke"))
;; => (function shell-command)
3 个赞

哇!好耶!紫薯布丁

1 个赞

牛牛啊。还可以有个Org浏览器,自动下载URL下的Org文件浏览,哈哈。

1 个赞

第一眼看成 ECMAScript,tql

1 个赞

我已经分不清了

这个牛逼,啥时候能出成品?

之前我也提出过啊, 能不能用 Common Lisp 来开发 App, 取代 Flutter 使用的 Dart
从 Flutter 代码也可以看出层层 嵌套是多么普遍的事情了啊
它们的右括号要一个占一行, 现在是觉得 Lisp 的尾部集中在一行更美观了…

之前也尝试过使用eww来部分取代浏览器的功能,因为想使用emacs的搜索功能来搜索网页的内容,这个功能算是做好了。然而在eww里编辑文本这个却怎么也搞不好,要知道emacs用着最舒服的地方就是文本编辑。做不好显然是不行的。

而emacs的文本编辑功能又以org-mode是最好用的。实现emacs部分代替浏览器,EMACScript代替JavaScript,其实可以直接在org-mode里面进行。

org-mode就是带有几乎完美编辑功能的浏览器,一个org文件就相当于一个网页,org里面运行EMACScript在方便不过,不在需要javascript

web网站服务器不需要在返回html,直接返回将elisp脚本嵌入其中的org文件的内容即可

另见这里: 以org-mode为前端的内容管理系统,像使用网页应用一样使用org-mode - #2,来自 wsug