我将org-mode中自定义链接中的代码执行结果 输出到minibuffer。一直有个问题,就是每次点击链接都会在把要执行的elisp代码先在minibuffer中输出一次在执行,这样当链接中的内容比较多时就会先把minibuffer撑大,然后在输出执行结果,比如我点保存修改
按钮,输出是这样的
保存修改
按钮的链接是:[[elisp:(orgcms-http-message “http://localhost/org.php?from=home&a=notice&api=save-post&title=testtesttesttesttesttesttesttesttesttesttest” 1)][保存修改]] ,这个orgcms-http-message
函数的定义是:
(defun orgcms-http-message(url &optional org-text args)
"不清空当前org文件内容将http请求结果输出到minibuffer"
(save-buffer)
(setq args "")
(if (equal org-text 1);是否把整个org文件的内容发到服务器(orgcms-get-text)
(setq args (format "&org=%s" (url-hexify-string (buffer-string)))) )
(let ((url-request-method "POST")
(url-request-extra-headers `(("Content-Type" . "application/x-www-form-urlencoded")))
(url-request-data args) )
(url-retrieve
url ;;"http://localhost/t/测试.php"
(lambda (status)
(re-search-forward "^$")
(delete-region (+ (point) 1) (point-min))
;;(let (max-mini-window-height)
(message (decode-coding-string (buffer-string) 'utf-8-auto-dos))
;;)
)) ) )
通过自定义链接和设置max-mini-window-height
解决minibuffer被撑过大问题
(org-link-set-parameters
"elisp"
:follow (lambda (path) ;;防止elisp链接点击时输出的elisp代码把minibuf撑得太大
(interactive)
(let ( max-mini-window-height)
(setq max-mini-window-height 1)
(org-link--open-elisp path nil)
(message max-mini-window-height)
)))
问题解决了,结果如下,minibuffer只有一行了
我这里加了一句(message max-mini-window-height)
这句看起来感觉是多余的,但偏偏这句是关键,message输出空字符串也可以但必须有,如果不在最后加message,那 (setq max-mini-window-height 1)
就不会生效,minibuffer依然撑大。
这个message
在这里是起了什么作用吗?百思不得其解