如何在Emacs中找到系统的显示大小?

如何在Emacs中找到系统的显示大小?,emacs,pixels,screen-size,Emacs,Pixels,Screen Size,我在多台机器、操作系统和平台上使用相同的.emacs。我希望调用时Emacs的默认帧大小与可用屏幕大小相对应(例如,在1600x1200桌面屏幕上,96行工作得很好,但在1280x800笔记本电脑上,我需要指定的行数不超过68行) 是否有返回系统屏幕宽度和高度的emacs lisp表达式 更新:我刚找到一个,但由于某些原因,在Windows XP系统上我的GNU Emacs 23.2中既找不到(x-display-pixel-width)也找不到(display-pixel-width)。继续研

我在多台机器、操作系统和平台上使用相同的.emacs。我希望调用时Emacs的默认帧大小与可用屏幕大小相对应(例如,在1600x1200桌面屏幕上,96行工作得很好,但在1280x800笔记本电脑上,我需要指定的行数不超过68行)

是否有返回系统屏幕宽度和高度的emacs lisp表达式


更新:我刚找到一个,但由于某些原因,在Windows XP系统上我的GNU Emacs 23.2中既找不到(x-display-pixel-width)也找不到(display-pixel-width)。继续研究…

我正在XP Pro上运行Gnu Emacs 23.2.1及其功能

(x-display-pixel-width)

两个都很好。它们是c源代码的一部分,应该存在

您可以在it信任的终端之外运行emacs

以下是我当前emacs中的文档:

x-display-pixel-height
是“C源代码”中的内置函数

(x-display-pixel-height &optional TERMINAL)
返回X显示终端的高度(以像素为单位)。 可选参数终端指定要询问的显示。 终端应该是终端对象、帧或显示名称(字符串)。 如果省略或为零,则表示选定帧的显示


此外,如果您有兴趣,我还有一整套方便的函数库来帮助调整和移动emacs框架。

多亏了Chris和Scott的回答和评论,我在.emacs中找到了以下工作路线:

(set-frame-size  (selected-frame)  96 (/ (* (x-display-pixel-height) 46) 600) ) 
当我在.emacs上执行eval buffer时,它工作得很好,但当我双击Windows XP的emacs快捷方式时,该语句被完全忽略

我知道(选定帧)不是(初始帧),所以我也尝试了以下方法:

(setq initial-frame-alist
    '((top . 1) (left . 288) (width . 96) (height . (/ (* (x-display-pixel-height) 46) 600))))
但它只有在我对read.emacs进行缓冲区求值时才起作用。当Emacs启动时(从命令行或双击其快捷方式),它不起作用。奇怪

更新:我在快捷方式的目标字段的调用命令中设置了初始大小:

C:\emacs-23.2\bin\runemacs.exe -geometry 96x78+240+0

我知道这是一个丑陋的解决方案,但目前这是唯一能解决问题的解决方案。

对于一个稍旧的版本,我做得很糟糕

(tool-bar-mode nil)

(mapc (lambda (x) (add-to-list 'default-frame-alist x))
   (list
          (cons 'top 0) (cons 'left 0)
          (cons 'font "-outline-Courier New-normal-r-normal-normal-11-82-96-96-c-*-iso10646-1")
          (cons 'height 67) (cons 'width 176)
))

默认帧是在.emacs运行后从默认帧列表生成的。我从来没有听说过最初的帧列表。

Chris,谢谢。如何调用这些函数?我尝试从minibuffer中使用M-x x-display-pixel-height,但Emacs找不到。如何在系统中调用它?顺便说一句,我的系统中的“关于Emacs”显示:G41R2F1上2010-05-08的GNU Emacs 23.2.1(i386-mingw-nt5.1.2600)它们不是交互式功能。你可以用M-:(x-display-pixel-height)调用它们。雷斯科特,你的评论正是我需要的。在我的Windows XP键盘上,Alt+Shift+:'调用了“Eval:”提示符。然后我输入(x-display-pixel-height),点击回车键,果然显示了正确的结果:1200。谢谢John,您的方法本质上是等效的(默认与初始值除外),但在Emacs 23.2上不起作用。您使用的是哪个Emacs版本?
初始帧列表
仅影响第一帧<代码>默认帧列表影响此后创建的所有帧。由于添加了守护程序模式、多终端支持等,在Emacs 23上启动时没有选定的帧。因此,您需要设置初始帧列表或默认帧列表。请尝试
(setq initial frame-alist'((top.1)(left.288)(width.96))(添加到列表“initial frame-alist”(cons)height(/(*(x-display-pixel-height‘))
当前版本无法工作的原因是高度计算在引用的列表中,另外:使用setq意味着您丢失了在代码运行之前添加到初始帧列表中的任何内容。我想我遇到了一个类似于默认框架列表的问题,这就是我使用add to list的原因。
(tool-bar-mode nil)

(mapc (lambda (x) (add-to-list 'default-frame-alist x))
   (list
          (cons 'top 0) (cons 'left 0)
          (cons 'font "-outline-Courier New-normal-r-normal-normal-11-82-96-96-c-*-iso10646-1")
          (cons 'height 67) (cons 'width 176)
))