guo
1
emacs 文艺牛
更新版本:没有任何依赖,纯elisp实现.
在~/.emacs.d/init.el中增加如下代码,每次emacs启动时文艺牛会赋诗一首,按 =g= 刷新。
(defun literary-cow-on-http-data (proc string)
(with-current-buffer "*literary-cow*"
(read-only-mode -1)
(erase-buffer)
(insert (substring string (+ 4 (string-match-p (regexp-quote "\r\n\r\n") string))))
(read-only-mode)
(beginning-of-buffer)))
(defun literary-cow-refresh ()
"refresh a new literary cowsay text"
(interactive)
(with-current-buffer "*literary-cow*"
(setq buf (get-buffer "*literary-cow*"))
(setq proc (open-network-stream "cowsay" buf "literary-cow.cc" 80))
(set-process-sentinel proc 'ignore)
(set-process-filter proc 'literary-cow-on-http-data)
(process-send-string proc "GET /shici?format=cowsay HTTP/1.1\r\nHost: literary-cow.cc\r\n\r\n")))
(defun literary-cow-init ()
"Init literary literary-cow"
(interactive)
(get-buffer-create "*literary-cow*")
(with-current-buffer "*literary-cow*"
(local-set-key "g" 'literary-cow-refresh)
(literary-cow-refresh)))
(setf initial-buffer-choice
(lambda ()
(literary-cow-init)
(switch-to-buffer "*literary-cow*")))
5 个赞
何必这样,安装fortune 和 cowsay,加入这个配置
(setq initial-scratch-message
(if (executable-find "fortune")
(format
";; %s\n\n%s"
(replace-regexp-in-string
"\n" "\n;; " ; comment each line
(replace-regexp-in-string
"\n$" "" ; remove trailing linebreak
(shell-command-to-string
"fortune -a | fmt -80 -s | cowsay -$(shuf -n 1 -e b d g p s t w y) -f $(shuf -n 1 -e $(cowsay -l | tail -n +2)) -n")))
(concat ";; Happy hacking, " user-login-name " - Emacs ♥ you!\n\n")
)))
1 个赞
作为 emacser, 你们应该贴 纯 elisp 的实现,而不是依赖外部程序。
3 个赞
虽然说emacs是一个“操作系统”,但它毕竟还不是操作系统, 既然有很方便的实现,为什么不用呢
3 个赞
Emacs Lisp sometimes sucks. 只要能 portable,用 external utils 沒关系。
1 个赞
- 请用 Markdown 语法正确地格式化代码块,右边有预览可以及时查看效果,并且提交了之后应该也能编辑;
- 没有绑定局部变量就用
(setq text ...)
会造成 text
成为一个全局变量,即使在 defun
中也如此;
有这个追求的话,wget
/ curl
可以换用 url.el
,cowsay
用 Emacs Lisp 实现感觉有些烦,去年我实现过一个,但仅支持 ASCII,不支持中文。
1 个赞
guo
8
2 个赞
的确代码格式化一下比较好。工具的话我同意怎么方便怎么来。毕竟wget和cowsay不像是会出什么问题的依赖。
请不要创建没有意义的全局变量: buf
和 proc
。
说实话, 从写配置转换到写package,确实需要一些经验指点, 我感觉我们应该编写一个小的教程,来处理这个事情。
3 个赞
guo
15
刚好可以那我这个小程序做教学,怎么写成一个package, 现在代码存在哪些问题,为什么不能这样做.
其实我对楼主的fortune库更感兴趣,是自己做的中文库吗?还是用的网上有的那几个唐诗宋词库
guo
17
每次启动加载上次会话需要五六秒,此时如果屏幕中央能显示一首诗或者一个小动画,同时minibuf显示加载进度,效果感觉挺不错。
另外,长时间无操作后也可以显示一下,跟屏保一样,放松一下。
可以用childframe实现
其实你可以把你收集的诗集导出为一个 emacs packge, 安装后,不就不需要网络了么。
guo
21
如果我没理解错,这样定义的是用户可以用custumize-variable自行修改的参数,作用域也是全局的.
(defcustom elptips-name "elptips-name"
"Elptips's name.")
那如何定义平时其他语言经常用到的"局部变量"呢?