我发现将emacs中的边距改为我喜欢的唯一方法就是这样:
(add-hook 'window-configuration-change-hook
(lambda ()
(set-window-margins (car (get-buffer-window-list (current-buffer) nil t)) 24 24)))
我希望仅在文本模式下调用此设置,并在更改为其他模式时更改回来。有点天真,我试过这个:
(add-hook 'text-mode-hook
(lambda ()
(set-window-margins (car (get-buffer-window-list (current-buffer) nil t)) 24 24)))
但它没有用。在文本模式下,仅为缓冲区更改边距的正确代码是什么?
答案 0 :(得分:6)
即使您可以使用set-window-margins
设置边距,但只要您以任何方式更改窗口,它们就会丢失。更好的解决方案是设置变量left-margin-width
和right-margin-width
。例如:
(defun my-set-margins ()
"Set margins in current buffer."
(setq left-margin-width 24)
(setq right-margin-width 24))
(add-hook 'text-mode-hook 'my-set-margins)
答案 1 :(得分:2)
这里有一些代码可以将您的降价和文本文件置于80个字符以内。这会自动调整所有帧的边距。
;; Add left and right margins, when file is markdown or text.
(defun center-window (window) ""
(let* ((current-extension (file-name-extension (or (buffer-file-name) "foo.unknown")))
(max-text-width 80)
(margin (max 0 (/ (- (window-width window) max-text-width) 2))))
(if (and (not (string= current-extension "md"))
(not (string= current-extension "txt")))
;; Do nothing if this isn't an .md or .txt file.
()
(set-window-margins window margin margin))))
;; Adjust margins of all windows.
(defun center-windows () ""
(walk-windows (lambda (window) (center-window window)) nil 1))
;; Listen to window changes.
(add-hook 'window-configuration-change-hook 'center-windows)
答案 2 :(得分:1)
这样的事情怎么样?您的问题可能源于许多主要模式继承text-mode
的事实。您可以删除window-configuration-change-hook
,也可以使用新功能major-briggs
- 我个人只需将text-mode-hook
与major-briggs
功能一起使用。
(add-hook 'text-mode-hook (lambda ()
(major-briggs)
;; insert additional stuff if so desired
))
(defun major-briggs ()
(when (eq major-mode 'text-mode)
(set-window-margins
(car (get-buffer-window-list (current-buffer) nil t)) 24 24) ))
答案 3 :(得分:0)
使用以下代码:
(defvar-local my-text-width nil
"Text area width for current buffer, or nil if no attention needed.")
(put 'my-text-width 'safe-local-variable #'integerp)
(defun my--margin-setup ()
"Handle settings of `my-text-width'."
(walk-windows
(lambda (window)
(with-current-buffer (window-buffer window)
(let ((margin (and my-text-width
(/ (max 0 (- (window-total-width)
my-text-width))
2))))
(when (or (not (equal margin left-margin-width))
(not (equal margin right-margin-width)))
(setq left-margin-width margin)
(setq right-margin-width margin)
(set-window-buffer window (current-buffer))))))))
(add-hook 'window-configuration-change-hook #'my--margin-setup)
您可以在文件本地变量或目录本地变量中设置my-text-width
,Emacs将相应地自动设置边距以获取该文本宽度。即使您调整框架大小或引入分割,它也可以工作。