你用的哪个版本的 emacs 呀?我用 emacs-head@28 编译了几次我看都没有边框。。。不知道是哪里有问题。。
现在应该有了,我编译的28最新版本。你确认下这两个feature在不在:
(featurep 'cocoa)
(featurep 'ns)
有的,我看返回都是 t。下面这个是配置,不知道是不是有不对的地方。
(use-package ivy-posframe
:custom-face
(ivy-posframe-border ((t (:background "gold"))))
:config
(setq ivy-posframe-display-functions-alist
'((counsel-M-x . ivy-posframe-display-at-frame-center)
(t . ivy-posframe-display))
ivy-posframe-height-alist '((t . 30))
ivy-posframe-parameters '((internal-border-width . 2))
ivy-posframe-width 50)
(ivy-posframe-mode 1)
)
确定你编译的是最新的master。这个变量设置不对, ivy-posframe-parameters ,边框颜色未设置。试试这个:
'((:internal-border-width . 1)
(:internal-border-color . "white"))
或者重新设置 ivy-posframe-border 。
我这里的效果:
好气呀,就是不行。
ivy-posframe-parameters is a variable defined in ‘ivy-posframe.el’.
Its value is
((:internal-border-width . 1)
(:internal-border-color . "red"))
编译参数,我和你的比较了,好像就差你前面那几个,但是 ns 什么的应该是有的。
"--enable-locallisppath=/usr/local/share/emacs/site-lisp --infodir=/usr/local/Cellar/emacs-head@28/28.0.50_1/share/info/emacs --prefix=/usr/local/Cellar/emacs-head@28/28.0.50_1 --without-x --without-dbus --without-imagemagick --with-modules --with-gnutls --with-rsvg --with-xml2 --with-xwidgets --with-ns --disable-ns-self-contained --with-harfbuzz"
system-configuration-features 是这个
"JPEG TIFF GIF PNG RSVG GLIB NOTIFY KQUEUE ACL GNUTLS LIBXML2 ZLIB TOOLKIT_SCROLL_BARS NS MODULES THREADS XWIDGETS JSON PDUMPER LCMS2"
GNU Emacs 28.0.50 (build 1, x86_64-apple-darwin19.6.0, NS appkit-1894.60 Version 10.15.7 (Build 19H2)) of 2020-11-01
@tumashu 有空帮忙看看。。
哇。。好像出来了。。居然是这个导致的 (add-hook 'ns-system-appearance-change-functions ..)
,这个会导致那个边框消失。
edit: 真是悲剧,人家那个 hook 也没问题,是我 copy 定义的时候移除了一行认为没用的代码,。。。
(add-hook 'ns-system-appearance-change-functions
#'(lambda (appearance)
(mapc #'disable-theme custom-enabled-themes) ;; 这行不能移除。。
(pcase appearance
('light (load-theme 'tango t))
('dark (load-theme 'tango-dark t)))))
哈哈,对的,这行不要删掉,否则theme可能混乱。
好像还是不对,我设置了这个 hook 确实是不行了,我前面说的有错误。如果使用 (load-theme 'xxx t)
这样是可以的。
你用到这个 hook 了吗?我观察到使用这个 hook 后,child frame 出来前屏幕会闪一下,然后出来就是没有边框的。
mac下面的边框之前好像有问题,后来有个大牛解决了,可以翻翻posframe的issue,我没有苹果设备,也没啥测试的方法
我没有使用这个hook,是自己实现了一个load-theme-hook。
折腾了下,发现原因是那个 hook 在 posframe 的 minibuffer 出来的时候,也会被调用,所以会再次 load-theme 就出问题了。我加了一个判断,似乎就可以了。
不过目前还有问题是,theme 一切换,设置的那些边框样式什么的就回到默认了。
(defun wd/set-theme(theme)
(unless (member theme custom-enabled-themes)
(mapc #'disable-theme custom-enabled-themes)
(load-theme theme t))
)
(add-hook 'ns-system-appearance-change-functions
#'(lambda (appearance)
(let ((light 'modus-operandi)
(dark 'modus-vivendi))
(pcase appearance
('light (wd/set-theme light))
('dark (wd/set-theme dark)))
)
)
)
这个 hook 是 macOS 系统 appearance 变化的 hook,应该和 load-theme-hook 不一样。
这个 hook 之前确实和 posframe 有点冲突,每次调用 posframe 都会触发。我提过个 issue 但是应该修复了才是
感谢这个信息,我看了一下,我用的那个 emacs-head@28 并没有更新那个 patch,我给他们提了一个 issue 看看什么时候修复。
我知道ns-system-appearance-change-functions
的作用,但是我没用它,感觉意义不大。我使用 circadian
来根据时间启用相应的theme。
emacs-head@28 也更新了那个 patch 了,现在 ns-system-appearance-change-functions
也可以正常工作了。