分享与请教: 执行自定义链接中的elisp代码时如何避免minibuffer窗口被撑太大

我将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在这里是起了什么作用吗?百思不得其解

你都不看文档的吗?

https://github.com/emacs-mirror/emacs/blob/3af9e84ff59811734dcbb5d55e04e1fdb7051e77/doc/lispref/minibuf.texi#L2486

这样试错的速度会很慢的!

最基本的grep你得会。先看看别人怎么写。读懂别人的代码比自己造轮子要困难但速度会更快。

也不是没看,看过不代表实际需要用时就能想得起来,我之前在google上搜到的都是用max-mini-window-heightresize-mini-windows来解决这个问题,不知道可以用message-truncate-lines,学到了