屏幕较大时想要让视野不要移动到其它地方,但是ivy使用minibuffer总是从左下角出现, 有什么好的办法让ivy在当前window下出现(多个window)
我找到一个简单的方法
(setq ivy-count-format "")
(let ((padding (make-string (window-left-column) ?\s)))
(ivy-read (concat padding "Pick:")
(mapcar (lambda (x)
(concat padding (number-to-string x)))
(number-sequence 1 10))))
如何设置ivy才能达到上述效果呢?
楼上一定没亲自跑过Emacs内置教程,不知道C-x 5 2 和 C-x 5 0
也许吧,但是用了Emacs近20年以后,这个基本上已经成为反射,大脑只需要下指令开个窗口,手指就可以从这里接管了。至于到底按了什么键,反而要想一想才能写出来。
1 个赞
光用ivy也可以设成就地弹出
(setq ivy-completion-beg 0)
(setq ivy-display-function 'ivy-display-function-overlay)
终端窗口也可用
1 个赞
最终自己实现了解决方法
(setq ivy-count-format "")
(defvar maple/ivy-format-padding nil)
(defun maple/ivy-read-around (-ivy-read &rest args)
"Advice ivy-read `-IVY-READ` `ARGS`."
(let ((maple/ivy-format-padding (make-string (window-left-column) ?\s)))
(setcar args (concat maple/ivy-format-padding (car args)))
(apply -ivy-read args)))
(advice-add 'ivy-read :around #'maple/ivy-read-around)
(defun maple/ivy-format-function (cands)
"Transform CANDS into a string for minibuffer."
(ivy--format-function-generic
(lambda (str)
(concat maple/ivy-format-padding (ivy--add-face str 'ivy-current-match)))
(lambda (str)
(concat maple/ivy-format-padding str))
cands "\n"))
(setq ivy-format-function 'maple/ivy-format-function)
效果图, 哈哈
1 个赞