大模型时代我们怎么玩Emacs:3. Org mode 代码块执行错误信息优化

· 850字 · 2分钟

1 前言 🔗

在大模型时代,一切皆有可能。对于 Emacs 同样如此,大模型拉低学习了 Emacs 的门槛,我们通过大模型可以做到以前我们敢想不敢做,或敢做没时间做,或有时间不会做的事。

今天继续这个新的系列,跟大家分享在大模型时代,我们可以如何“玩” Emacs,我们应该怎么用大模型来满足自己对 Emacs 使用的需求。

上一篇关于根据 jieba 分词移动和删除的文章,只是提供了一个思路,后来经 LuciusChen 道友推荐,我试用了 roife 大佬的 emt 包,利用 MacOS 自带的 Tokenizer 来分词,体验更加顺滑,强烈推荐!

2 Org mode 代码块执行出错信息优化 🔗

2.1 背景 🔗

我非常喜欢 Org mode,实际上我现在基本上不太使用 Office。Org mode 里有一个我非常喜欢的特性就是代码块。这使得我能在 Org 文件里通过代码块来编写一些小的程序,用一个专业术语叫「文学编程」。它能让在遇到某些任务时,一边记录你的思路,一边通过代码块以及 :noweb:session 的特性,如流水般的往前行。

然而代码块有一个很让人难受的默认行为就是:当代码块里的代码出现错误时,它的报错不是在 Org 文件的 +RESULTS: 部分显示,而是新开了一个叫 *Org-Babel Error Output* 的 buffer 显示。

这在体验上不够连贯和统一,于是我开始了这次尝试。

2.2 正确的描述我们的问题 🔗

今天这个样例跟之前的不同,我们不是直接描述需求,而是先把相关函数的源代码给到 ChatGPT,让后直接让 ChatGPT 根据我们的描述来进行改造。

2.3 测试以及需求累进的描述 🔗

2.4 最终的效果 🔗

2.5 最终的代码 🔗

(defun my/org-babel-eval (command query)
  "Run COMMAND on QUERY.
Return standard output and error produced by COMMAND.

Writes QUERY into a temp-buffer that is processed with
`org-babel--shell-command-on-region'."
  (let ((error-buffer (get-buffer-create " *Org-Babel Error*")) exit-code)
    (with-current-buffer error-buffer (erase-buffer))
    (with-temp-buffer
      (insert query "\n")
      (setq exit-code
            (org-babel--shell-command-on-region
             command error-buffer))
      (let ((stderr (with-current-buffer error-buffer (buffer-string)))
            (stdout (buffer-string)))
        (concat stdout
                (if (not (string-empty-p stderr))
                    (concat "\n--- STDERR ---\n" stderr)
                  ""))))))

(advice-add #'org-babel-eval :override #'my/org-babel-eval)

3 结语 🔗

今天这个案例,是一个简单的案例,但是我们的处理思路有一些变化,不是直接描述需求,而是直接将需要改造的函数源代码给到 ChatGPT,让它按照我们的要求进行改造,最后调试,完成我们的目标。

后续,将会继续分享几个案例。

  • org-super-links 链接与反链改造

我也会持续的使用 ChatGPT 和 Emacs,持续分享我的心得,感谢您的阅读。