【问题标题】:Emacs: Get new-frame and emacsclient -c to use set frame size?Emacs:获取 new-frame 和 emacsclient -c 以使用设置的帧大小?
【发布时间】:2012-06-13 02:08:58
【问题描述】:

我是 StackOverflow 的新手,我有一个问题,这个问题几乎是我在掌握 Emacs 的过程中唯一让我感到厌烦的事情。

我配置了我的 .emacs 文件以将 Emacs 的默认帧大小设置为 70 行和 80 列,如下所示:

(add-to-list 'default-frame-alist '(left . 0))
(add-to-list 'default-frame-alist '(top . 0))
(add-to-list 'default-frame-alist '(height . 70))
(add-to-list 'default-frame-alist '(width . 80))

这在启动 Emacs 时工作正常,问题是当我使用 new-frameemacsclient -c 启动新框架时,这些设置不受尊重。有没有办法强制emacsclientnew-frame在执行时读取.emacs文件中的设置?

编辑:

这是我的.emacs 文件:

;;This setting is meant to force emacs to read size settings before make-frame.

(add-hook 'before-make-frame-hook
      #'(lambda ()
          (add-to-list 'default-frame-alist '(left   . 0))
          (add-to-list 'default-frame-alist '(top    . 0))
          (add-to-list 'default-frame-alist '(height . 70))
          (add-to-list 'default-frame-alist '(width  . 80))))

;;disable annoying welcome screen.
(setq inhibit-splash-screen t)
(setq inferior-lisp-program "/usr/bin/abcl")
(add-to-list 'load-path "/usr/share/emacs/site-lisp/slime/")
(require 'slime)
(slime-setup)

(add-to-list 'auto-mode-alist '("\\.lisp$" . lisp-mode))
(add-to-list 'auto-mode-alist '("\\.cl$" . lisp-mode))
(add-to-list 'auto-mode-alist '("\\.asd$" . lisp-mode))
(require 'slime)
(slime-setup)
(eval-after-load "slime"
 '(progn
   (setq slime-complete-symbol*-fancy t
      slime-complete-symbol-function 'slime-fuzzy-complete-symbol
      slime-when-complete-filename-expand t
      slime-truncate-lines nil
      slime-autodoc-use-multiline-p t)
(slime-setup '(slime-fancy slime-asdf))
(define-key slime-repl-mode-map (kbd "C-c ;")
  'slime-insert-balanced-comments)
(define-key slime-repl-mode-map (kbd "C-c M-;")
  'slime-remove-balanced-comments)
(define-key slime-mode-map (kbd "C-c ;")
  'slime-insert-balanced-comments)
(define-key slime-mode-map (kbd "C-c M-;")
  'slime-remove-balanced-comments)
(define-key slime-mode-map (kbd "RET") 'newline-and-indent)
(define-key slime-mode-map (kbd "C-j") 'newline)))

(add-to-list 'default-frame-alist '(left . 0))
(add-to-list 'default-frame-alist '(top . 0))
(add-to-list 'default-frame-alist '(height . 70))
(add-to-list 'default-frame-alist '(width . 80))

(normal-erase-is-backspace-mode 0)
(tool-bar-mode -1) ;;method for disabling changed in 24. can not nil, most negative
(scroll-bar-mode -1)

;;for loading cedet.
(load-file "/usr/share/emacs/site-lisp/cedet/common/cedet.el")

【问题讨论】:

  • 根据 Emacs 的文档,new-frame 已过时。当我使用make-frame 时,设置会得到尊重。 emacsclient -c 也适合我。

标签: emacs elisp dot-emacs emacsclient


【解决方案1】:

您可以尝试将以下挂钩添加到您的 Emacs 启动文件(通常为 ~/.emacs),即:

(add-hook 'before-make-frame-hook
          #'(lambda ()
              (add-to-list 'default-frame-alist '(left   . 0))
              (add-to-list 'default-frame-alist '(top    . 0))
              (add-to-list 'default-frame-alist '(height . 70))
              (add-to-list 'default-frame-alist '(width  . 80))))

或者,如果您想重新加载整个 .emacs 文件:

(add-hook 'before-make-frame-hook #'(lambda () (load-file "~/.emacs")))

前一个钩子几乎肯定更可取,因为重新加载整个 .emacs 文件可能不仅不必要且浪费资源,而且还可能导致错误或奇怪的行为(取决于文件的内容)。

详细地说,钩子是定义在 Emacs 会话中发生特定事件时执行的命令列表的变量,例如,加载主要编辑模式,或者在这种情况下,创建新框架。请参阅相关的Emacs manual page on hooks 了解更多信息。一般来说,如果您希望每次在 Emacs 中发生特定事件时都执行某个函数,那么将所述函数添加到正确的预先存在的钩子中可能是最好的方法。

【讨论】:

  • 感谢您的帮助,但无论出于何种原因,您的第一个解决方案都不起作用。 “make-frame”根本不尊重我的设置,“new-frame”似乎只尊重宽度设置。
  • @user126553,如果这看起来太明显了,请原谅我,但是您确实将第一个命令添加到您的.emacs 并在尝试运行emacsclient -c 之前实际加载了 Emacs,对吧?它在我的系统上完美运行。您是否可能正在加载修改这些设置的包,或者它们在其他地方配置,例如通过~/.Xresources~/.Xdefaults 文件中的Emacs*geometry 设置?
  • 我知道这听起来很奇怪,但窗口甚至出现在正确的位置。除了 slime 和 Cedet 我没有安装其他插件。我的 .Xresources 文件中没有任何内容,我的 .Xdefaults 文件中只有 xterm 的设置。
  • @user126553,也许可以尝试将命令添加到after-init-hook,以确保它们在.emacs 中的所有内容加载后运行。如果您要在 Emacs 缓冲区中执行第一个 add-hook 命令(如果您不确定如何,请将光标放在命令中最后一个括号的右侧并点击 C-x C-e 以运行 eval-last-sexp)和然后尝试运行emacsclient,窗口尺寸是否正确?
  • @user126553,然后我很难过。您的窗口管理器是否可能正在调整新框架的大小(因为它配置了默认值,或者因为您想要的大小超出了显示器的尺寸)?我可以推荐的唯一其他选择是尝试通过 X 资源设置来配置它,使用 Emacs*geometry
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
  • 1970-01-01
  • 2013-12-15
  • 1970-01-01
相关资源
最近更新 更多