(setq frame-resize-pixelwise t)这么设置之后果然之前全屏时顶部的黑边就没了
frame-resize-pixelwise 是个好变量, elisp manual 里面藏着好多宝藏等着大家去挖掘.
这么实现好像会导致双屏的时候聚焦在emacs时dock自动隐藏
我在Emacs上都是全屏工作, 从来不用顶部栏和Dock栏. 如果不想盖住Dock, 就把我最后一句 run-at-time 那句删除就可以了.
貌似没用,之前是通过 toggle-frame-fullscreen来全屏的,目前这个也退不出全屏了
或者你把 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)