Emacs is the 2D Command-line Interface

2 个赞

In this article, I’d like to argue that Emacs largely follows the Unix philosophy in its problem domain: working with text , and can be seen as a two dimentional version of the command-line interface.

有什么收获分享一下?

初读的时候,个人觉得 2D 这个概念是比较新颖的。

$ echo "hi" | grep "hi"

如果用任何一个编辑工具,都可以写成下面的形式,但得到相同的结果。

echo "hi" > tmp.log
grep "hi" tmp.log

用 Elisp 写成的程序, 比如下面这个 2D 程序:

(defun open-line (n)
  (interactive "*p")
  (let* ((do-fill-prefix (and fill-prefix (bolp)))
	 (do-left-margin (and (bolp) (> (current-left-margin) 0)))
	 (loc (point-marker))
	 (abbrev-mode nil))
    (newline n)
    (goto-char loc)
    (while (> n 0)
      (cond ((bolp)
	     (if do-left-margin (indent-to (current-left-margin)))
	     (if do-fill-prefix (insert-and-inherit fill-prefix))))
      (forward-line 1)
      (setq n (1- n)))
    (goto-char loc)
    (end-of-line)))

执行起来和下面这个 1D 程序,所达到效果和性能完全一致。

(defun open-line (n) (interactive "*p") (let* ((do-fill-prefix (and fill-prefix (bolp))) (do-left-margin (and (bolp) (> (current-left-margin) 0))) (loc (point-marker)) (abbrev-mode nil)) (newline n) (goto-char loc) (while (> n 0) (cond ((bolp) (if do-left-margin (indent-to (current-left-margin))) (if do-fill-prefix (insert-and-inherit fill-prefix)))) (forward-line 1) (setq n (1- n))) (goto-char loc) (end-of-line)))

或者是想表达这样一种效果?

  • Emacs is the 2D Command-line Interface
  • Vim is the 2D Command-line Interface

在 EmacsTalk 昨天发布的最新一期节目 里,嘉宾也提到了 2D 这个概念。

现在再回过头来看这篇文章,这里说的 2D,应该主要是指『结构化数据』,相比 grep 之类面向行的命令行工具,Emacs 通过 Lisp 可以用来把一维的文本,转化为二维的结构化数据,直观来说就是各种编程语言的 major-mode,使得用户可以按照语义块来操作文本。

6 个赞

请求添加 videos subtitles, 点击可跳转, 高亮显示当前字幕

详细参考 Coursera Welcome to Machine Learning! | Coursera

只是个建议 :hugs:

建议是个好建议,就是实施难度比较大。

现在字幕倒是有,腾讯会议能自动生成,跳转按说应该也支持,但没研究过,等后面人手多了再考虑吧,光是目前这样已经让我满 cpu 运行了。