EMACS-DOCUMENT

=============>随便,谢谢

Emacs eshell中的Wizard zines漫画

wizardzines.com 网站上,Julia Evans 撰写了git, 网络, linux, 命令行工具等主题的超棒电子杂志. 其中有些杂志是付费的,有些杂志是免费的. 我这里不是托,只是个粉丝而已.

不久前, Julia 在tweet上l公布了 她创建的一个用来阅读相关主题漫画的工具. 我立即想到,这个有趣的工具很适合用 Emacs eshell 来实现.

自那以后, 我订阅了 wizardzines.com/saturday-comics 并收到了一些漫画 (awk, tar, 以及 bash 技巧). 我将这些漫画保存在本地 (以去掉文件扩展名的主题命名).

ls -1 ~/Downloads/wizardzines-comics/
awk
bash
tar

虽然没有经过实战测试, 但是下面这个elisp片段定义了一个 ecomic 命令. 它会在eshell中以内联的方式显示漫画.

(require 'eshell)
(require 'iimage)

(defvar wizardzines-comics-path "~/Downloads/wizardzines-comics")

(defun eshell/ecomic (&rest args)
  "Display command comic in ARGS.
  Note: ensure comic images live in `wizardzines-comics-path', named with
  command name and no extension."
  (eshell-eval-using-options
   "ecomic" args
   '((?h "help" nil nil "show this usage screen")
     :external "ecomic"
     :show-usage
     :usage "COMMAND

  Show COMMAND comic from Julia Evans' https://wizardzines.com/saturday-comics")
   (let* ((command (nth 0 (eshell-stringify-list (eshell-flatten-list args))))
          (image-fpath (concat (file-name-as-directory
                                (expand-file-name wizardzines-comics-path))
                               command)))
     (unless (file-exists-p image-fpath)
       (error "comic: \"%s\" not found :-(" command))
     (eshell-buffered-print "\n")
     (add-text-properties 0 (length image-fpath)
                          `(display ,(create-image image-fpath)
                                    modification-hooks
                                    (iimage-modification-hook))
                          image-fpath)
     (eshell-buffered-print image-fpath)
     (eshell-flush))))

ecomic.gif