或者你把 toggle-frame-fullscreen 替换 run-at-time 的 set-frame-paramater 内容,这样既能解决问题,也能切换全屏.
这样玩
;; 在Mac平台, Emacs不能进入Mac原生的全屏模式,否则会导致 `make-frame' 创建时也集成原生全屏属性后造成白屏和左右滑动现象.
;; 所以先设置 `ns-use-native-fullscreen' 和 `ns-use-fullscreen-animation' 禁止Emacs使用Mac原生的全屏模式.
;; 而是采用传统的全屏模式, 传统的全屏模式, 只会在当前工作区全屏,而不是切换到Mac那种单独的全屏工作区,
;; 这样执行 `make-frame' 先关代码或插件时,就不会因为Mac单独工作区左右滑动产生的bug.
;;
;; Mac平台下,不能直接使用 `set-frame-parameter' 和 `fullboth' 来设置全屏,
;; 那样也会导致Mac窗口管理器直接把Emacs窗口扔到单独的工作区, 从而对 `make-frame' 产生同样的Bug.
;; 所以, 启动的时候通过 `set-frame-parameter' 和 `maximized' 先设置Emacs为最大化窗口状态, 启动5秒以后再设置成全屏状态,
;; Mac就不会移动Emacs窗口到单独的工作区, 最终解决Mac平台下原生全屏窗口导致 `make-frame' 左右滑动闪烁的问题.
(setq ns-use-native-fullscreen nil)
(setq ns-use-fullscreen-animation nil)
(set-frame-parameter (selected-frame) 'fullscreen 'maximized)
(run-at-time "5sec" nil (lambda () (toggle-frame-fullscreen)))
dock在emacs在另外一个屏幕全屏的时候不显示好像是因为(setq ns-use-native-fullscreen nil)这句
其实如果你要用 Dock , 你完全不需要我的代码, 直接最大化就可以了.
我的代码是解决全屏状态下和 make-frame 冲突的问题.
弄了个完美的版本:
(setq ns-use-native-fullscreen nil)
(setq ns-use-fullscreen-animation nil)
(run-at-time "5sec" nil
(lambda ()
(let ((fullscreen (frame-parameter (selected-frame) 'fullscreen)))
;; If emacs has in fullscreen status, maximized window first, drag from Mac's single space.
(when (memq fullscreen '(fullscreen fullboth))
(set-frame-parameter (selected-frame) 'fullscreen 'maximized))
;; Manipulating a frame without waiting for the fullscreen
;; animation to complete can cause a crash, or other unexpected
;; behavior, on macOS (bug#28496).
(when (featurep 'cocoa) (sleep-for 0.5))
;; Call `toggle-frame-fullscreen' to fullscreen emacs.
(toggle-frame-fullscreen))))
- 先设置不准用Mac原生全屏窗口
- 5秒以后, 先检测是不是已经被 Mac 窗口管理器自助主张全屏了,如果已经全屏了,先最大化把Emacs从独立工作区拉回来, 如果Mac没有自作主张就不管窗口状态
- 窗口正常状态后, 调用 toggle-frame-fullscreen 进入全屏状态, 这样以后再调用命令 toggle-frame-fullscreen 也不会出错了.
坑爹的, 终于可以舒服的用 posframe.el 来显示单词翻译和实时语法错误了.
你太能折腾了。。。。。佩服佩服
你不知道苹果操作系统有多坑,你折腾linux还很累。
我现在折腾guixsd,不过机子不行,编译太耗时间。。。
输入光标靠近窗口下边缘的时候, company-posframe的窗口很容易正好挡住输入光标, 有可能是计算好的位置被emacs底层强制给移动了(比如因为遮住了mode line?)
emacs-mac port没有这个问题(日本开发者还是厉害lol),标题栏可以通过打patch去掉,--with-natural-title-bar
。没记错的话emacs-plus也有这个patch。
现在 posframe 可以直接设置边框宽度了,另外 emacs 也提供了 边框颜色设置功能
求简单的实例代码
border border 的颜色通过 internal-border face 设置
(posframe-show "fff" :string "this is a test"
:internal-border-width 10)
我试了 padding 可以了, internal-border background 设置以后无法显示边框颜色, 是不是最新git版才有的功能?
emacs 26.1 就可以呀,你不会设置后没有 Apply 吧?
输入位置靠近窗口下边缘的时候, company-posframe的窗口很容易正好挡住输入光标, 有可能是计算好的位置被emacs底层强制给移动了(比如因为遮住了mode line?) 这个问题有解吗?
贴个截图或者gif看看