用Emacs作展示
我基本上属于是那种什么事都想用Emacs来完成的人, 最近我打造除了一套独有的Org Mode展示工具.
其实这套东西并不复杂:它引入了两个函数, org-next-slide
及 org-prev-slide
, 我将它们的快捷键分别设置为 PgUp
与 PgDown
(Emacs的键码分别对应 <prior>
及 <next>
).
它还会将文本放大同时缩小左边距的空隙.
(defun org-next-slide () ;; move forward to the next top-level heading (interactive) (beginning-of-buffer) ;; navigate to the beginning of this header (forward-char) (widen) ;; expand to see the whole buffer (if (search-forward-regexp ;; if we can find another header, (rx line-start "* ") nil t) (progn (org-narrow-to-subtree) ;; go to it, narrow to it, (show-all)) ;; and show all its sub-trees (progn (org-narrow-to-subtree) ;; otherwise let the user know we're (beginning-of-buffer) ;; on the last slide (message "Last slide")))) (defun org-prev-slide () ;; as `org-next-slide`, but searching backwards (interactive) (beginning-of-buffer) (widen) (if (search-backward-regexp (rx line-start "* ") nil t) (progn (org-narrow-to-subtree) (show-all)) (progn (org-narrow-to-subtree) (beginning-of-buffer) (message "First slide")))) (defvar org-slides-mode-keymap ;; bind functions to page-up and page-down (let ((map (make-sparse-keymap))) (define-key map (kbd "<next>") 'org-next-slide) (define-key map (kbd "<prior>") 'org-prev-slide) map)) (define-minor-mode org-slides-mode ;; Synthesize into a minor mode "View org-mode sub-trees as slides." :lighter " Slides" :keymap org-slides-mode-keymap (progn (set-face-attribute 'default nil :height 300) ;; big font (set-variable 'left-margin-width '2 t) ;; little margin (set-window-buffer (selected-window) (current-buffer)))) ;; don't change windows
Emacs的narrow-mode 可以只显示你关注的那部分文档内容. 这套工具就借助narrow-mode的这个特性,一次只展示一个 top-level heading
,结果就好像slides一样!
用Emacs作展示的想法来自于我最近在 Vancouver函数式编程会议 上作的一场关于Emacs Lisp的演示. 当时主要是想使用Org Mode中code-blocks 的功能.
Code blocks
允许你直接在Org文件中高亮显示代码,还能跳到一个临时buffer上用恰当的mode在平常的编程环境中修改代码.
Org Slides Mode
也有它的弱点: 它不支持显示图片与动画,只能显示出文本而已.
而且你还需要手工调整配色.
同时还没有备注,也不支持远程操控(这一点也许只要设置好快捷键就能搞定,只是麻烦了点).
不过一场展示中最核心的部分是现场编码(live-coding),交叉式的现场编码(interleaving living code),以及普通文本说明,这些东西用这种方式的展示效果还蛮不错的. 至于如何运用这些能力来做一场生动的演讲就看你的了.
Nat Knight — 2015-10-10