【问题标题】:How do I find the display size of my system in Emacs?如何在 Emacs 中找到我的系统的显示大小?
【发布时间】:2010-08-18 16:26:27
【问题描述】:

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

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

更新:我刚刚找到了similar question,但由于某种原因,我在 Windows XP 系统上的 GNU Emacs 23.2 中找不到 (x-display-pixel-width) 和 (display-pixel-width)。继续研究...

【问题讨论】:

    标签: emacs pixels screen-size


    【解决方案1】:

    我在 XP Pro 上运行 Gnu Emacs 23.2.1,以及功能

    (x-display-pixel-width)
    

    (x-display-pixel-height) 
    

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

    你可以在它信任的终端之外运行 emacs 吗?

    这是我当前的 emacs 中的文档:

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

    (x-display-pixel-height &optional TERMINAL)
    

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

    此外,如果您有兴趣,我还有一个完整的便利函数库,可帮助您调整 emacs 框架的大小和移动。

    【讨论】:

    • 克里斯,谢谢。如何调用这些函数?我从 minibuffer 中尝试了 M-x x-display-pixel-height 但 Emacs 找不到它。你如何在你的系统中调用它?顺便说一句,我系统中的“关于 Emacs”显示:G41R2F1 上 2010 年 5 月 8 日的 GNU Emacs 23.2.1 (i386-mingw-nt5.1.2600)
    • 它们不是交互式功能。您可以使用 M- 调用它们:(x-display-pixel-height) RET
    • Scott,您的评论正是我所需要的。 Alt+Shift+':' 在我的 Windows XP 键盘上,调用了 'Eval:' 提示。然后我输入 (x-display-pixel-height),按 Enter 键,果然显示了正确的结果:1200。谢谢!
    【解决方案2】:

    我做得很糟糕,对于一个有点旧的版本。

    (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 运行后从 default-frame-alist 构建的。我从来没有听说过 initial-frame-alist。

    【讨论】:

    • 约翰,你的方式本质上是等价的(除了默认和初始),但它不适用于 Emacs 23.2。您使用的是哪个 Emacs 版本?
    • initial-frame-alist 只影响第一帧。 default-frame-alist 影响之后创建的所有帧。
    【解决方案3】:

    感谢 Chris 和 Scott 的回答和 cmets,我设法在我的 .emacs 中提出了以下工作行:

    (set-frame-size  (selected-frame)  96 (/ (* (x-display-pixel-height) 46) 600) ) 
    

    当我在 .emacs 上做 eval-buffer 时效果很好,但是当我双击 Windows XP 的 Emacs 快捷方式时,这个语句被完全忽略了。

    我知道 (selected-frame) 不是 (initial-frame) 所以我也尝试了这个:

    (setq initial-frame-alist
        '((top . 1) (left . 288) (width . 96) (height . (/ (* (x-display-pixel-height) 46) 600))))
    

    但它仅在我对读取的 .emacs 执行 eval-buffer 时才有效。当 Emacs 启动时它不起作用(无论是从命令行还是通过双击它的快捷方式)。很奇怪。

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

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

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

    【讨论】:

    • 在 Emacs 23 上启动时没有selected-frame,原因是增加了守护进程模式、多终端支持等。所以需要设置initial-frame-alist或者default-frame-alist。
    • 试试(setq initial-frame-alist '((top . 1) (left . 288) (width . 96))) (add-to-list 'initial-frame-alist (cons 'height (/ (* (x-display-pixel-height))))) 你当前版本不工作的原因是高度计算在引用列表中,所以不会被评估。
    • 另外:使用 setq 意味着您会丢失在代码运行之前添加到 initial-frame-alist 的任何内容。我想我在使用 default-frame-alist 时遇到了类似的问题,这就是我使用 add-to-list 的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 2020-09-05
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多