blove
1
使用的是 emacs29 版本。
开启了真透明 alpha-background
(setq default-frame-alist (append default-frame-alist '((alpha-background . 85))))
并且设置了internal-border-width的值
(setq default-frame-alist '( (internal-border-width . 15)))
结果,出现如图所示的黑框。
不知道目前是否可以通过设置,可以让这两项同时存在时,internal-border 的部分也透明呢?
以下是相关完整配置。
希望达到的效果是:无装饰栏,显示区域缩进一些。主要内容区域左右边界适合视觉习惯。
(when (display-graphic-p)
;;; ~ left-right-margin ~
(setq-default left-margin-width 8
right-margin-width 8
)
;;; ~ gui init full screen ~
(set-frame-parameter (selected-frame) 'fullscreen 'maximized)
(add-to-list 'default-frame-alist '(fullscreen . maximized))
;;; ~ undecorated ~
(setq default-frame-alist '(
(undecorated . t)
(drag-internal-border . 1)
(internal-border-width . 15)
(drag-with-tab-line . t)
))
;;; ~ real transpance ~
(when (or (eq system-type 'berkeley-unix) (eq system-type 'gnu/linux))
(if (> current-emacs-version 28)
(setq default-frame-alist (append default-frame-alist '((alpha-background . 85))))
)
)
)
1 个赞
边框不属于背景,不会受到 alpha-background 的影响。
顺便建议不要使用 system-type 判断 Emacs 使用的 GUI 后端,可以使用:
(memq window-system '(x pgtk))
2 个赞
blove
4
感谢提供思路参考!
目前我还不太会用 fringe ,可能是设置的不正确,没有达到希望的效果。
目标效果是:frame 区域边界有留白,internal-border-width 刚好是能够实现上下左右都有边框效果。同时希望文本显示区域左右留白更宽。这两者叠加的效果。
粗略尝试了下,使用 perfect-margin GitHub - mpwang/perfect-margin: [emacs] auto center emacs windows, work with minimap and/or linum-mode 配合设置,基本实现了预期效果。
或者大神有时间的时候,分享一下有关 fringe 的详细配置!
blove
5
感谢纠正!感谢告知正确判断方法!
(memq window-system '(x pgtk))
这是我的意外收获!我已经将相关配置修改了!
blove
6
目前暂时使用 perfect-margin GitHub - mpwang/perfect-margin: [emacs] auto center emacs windows, work with minimap and/or linum-mode 实现左右边界设置。
感觉它的好处会比单纯设置 left-margin-width ,right-margin-width 在左右分屏时效果好很多
(setq-default left-margin-width 8
right-margin-width 8
)
同时通过操作系统和版本的判断,来实现在指定系统和指定版本上, frame 区域四周围都有边框的效果
(when (memq window-system '(x pgtk))
(if (> current-emacs-version 28)
(add-to-list 'default-frame-alist '(alpha-background . 85))
(add-to-list 'default-frame-alist '(internal-border-width . 15))
)
)
(when (memq window-system '(w32 pgtk))
(add-to-list 'default-frame-alist '(internal-border-width . 15))
)
主要是在 windows 系统上,文本会有溢出 frame 的时候,所以通过设置 internal-border-width 让显示区域四周看起来有边框留白
blove
7
当前相关完整配置
(when (display-graphic-p)
;;;
;;; ~ left-right-margin ~
;;;
;; (setq-default left-margin-width 8
;; right-margin-width 8
;; )
;;;
;;; === perfect-margin
;;;
(add-to-list 'load-path (concat user-emacs-directory "path-to/perfect-margin"))
(require 'perfect-margin)
(perfect-margin-mode t)
(setq perfect-margin-visible-width 75)
(setq perfect-margin-ignore-filters nil)
(setq perfect-margin-ignore-regexps nil)
(setq perfect-margin-hide-fringes nil) ;; do not show $
;;;
;;; ~ gui init full screen ~
;;;
(set-frame-parameter (selected-frame) 'fullscreen 'maximized)
(add-to-list 'default-frame-alist '(fullscreen . maximized))
;;;
;;; ~ undecorated ~
;;;
(add-to-list 'default-frame-alist '(undecorated . t))
(add-to-list 'default-frame-alist '(drag-internal-border . 1))
(add-to-list 'default-frame-alist '(drag-with-tab-line . t))
;;;
;;; ~ real transparency | internal-border ~
;;;
(when (memq window-system '(x pgtk))
(if (> current-emacs-version 28)
(add-to-list 'default-frame-alist '(alpha-background . 85))
(add-to-list 'default-frame-alist '(internal-border-width . 15))
)
)
(when (memq window-system '(w32 pgtk))
(add-to-list 'default-frame-alist '(internal-border-width . 15))
)
)
如果只是左右两边空白,设置left-fringe和right-fringe就好了。如果用perfect-margin,还可以试试 rnkn/olivetti: Emacs minor mode to automatically balance window margins (github.com),可以设置百分比,更加灵活。
上下空白比较麻烦,需要特殊处理。
1 个赞