sli*_*cki 78 emacs terminal configuration
在我的.emacs文件中,我有一些只在图形模式下有意义的命令(比如(set-frame-size (selected-frame) 166 100)).如何仅在图形模式下运行这些模式,而不是在终端模式下运行(即emacs -nw).
谢谢!
kna*_*arf 97
该window-system变量告诉Lisp程序Emacs正在运行什么窗口系统.可能的值是
来自doc.
编辑:似乎不赞成使用window-system display-graphic-p(来源:emacs 23.3.1上的Ch f window-system RET).
(display-graphic-p &optional DISPLAY)
Return non-nil if DISPLAY is a graphic display.
Graphical displays are those which are capable of displaying several
frames and several different fonts at once.  This is true for displays
that use a window system such as X, and false for text-only terminals.
DISPLAY can be a display name, a frame, or nil (meaning the selected
frame's display).
所以你想要做的是:
(if (display-graphic-p)
    (progn
    ;; if graphic
      (your)
      (code))
    ;; else (optional)
    (your)
    (code))
如果你没有else子句,你可以:
;; more readable :)
(when (display-graphic-p)
    (your)
    (code))
san*_*inc 42
答案提到window-system并display-graphic-p没有错,但他们没有说出完整的图片.
实际上,单个Emacs实例可以有多个帧,其中一些可能位于终端上,而其他一些可能位于窗口系统上.也就是说,window-system即使在单个Emacs实例中,您也可以获得不同的值.
例如,您可以启动窗口系统Emacs,然后通过emacsclient -t终端连接到它; 结果终端帧将看到值nilfor window-system.同样,您可以在守护进程模式下启动emacs,然后告诉它创建一个图形框架.
因此,请避免将代码放在依赖于的.emacs中window-system.相反,将代码中的代码set-frame-size放在一个在创建框架后运行的钩子函数中:
(add-hook 'after-make-frame-functions
  (lambda ()
    (if window-system
      (set-frame-size (selected-frame) 166 100)))))
请注意,'after-make-frame-functions钩子不是为初始帧运行的,因此通常还需要添加与上面相关的与帧相关的钩子函数'after-init-hook.
window-system是`C源代码'中定义的变量.它的值是x
文档:显示所选框架的窗口系统的名称.该值是一个符号 - 例如,X窗口的"x".如果所选帧位于纯文本终端上,则该值为nil.
基本上做一个:
(if window-system
    (progn
      (something)
      (something-else)))
| 归档时间: | 
 | 
| 查看次数: | 19178 次 | 
| 最近记录: |