题 启动时最大化Emacs? (不是全屏)


在Emacs启动以最大化窗口之后,按下alt-f10(在GNU / Linux中)是很常见的(在Emacs术语中,它实际上是一个帧)。大多数时候我按三次是因为我太早了按下第一个alt-f10,它会在迷你缓冲区周围出现一些垃圾(Emacs显示bug?)

我该如何自动化这个呢? (可能使用Gnome设置或使用elisp?)

我正在使用emacs24(来自bzr repo)。

请注意,这不是我想要的常规全屏,按f11即可获得。


20
2017-10-14 06:28


起源


你为什么不设置 initial-frame-alist 或相应的 xrdb 你想要的几何资源呢?看到 stackoverflow.com/questions/92971/... 代码和指针。 - tripleee
我希望全屏,接受的答案符合我的需要。感谢BTW的链接。 - kindahero


答案:


(defun fullscreen (&optional f)
       (interactive)
       (x-send-client-message nil 0 nil "_NET_WM_STATE" 32
               '(2 "_NET_WM_STATE_MAXIMIZED_VERT" 0))
       (x-send-client-message nil 0 nil "_NET_WM_STATE" 32
               '(2 "_NET_WM_STATE_MAXIMIZED_HORZ" 0)))

可能有用。 (取自 这里。)


13
2017-10-14 06:35



哇,这很快,也工作了.. - kindahero
此代码在Windows / Mac OS X下无效。查看我的解决方案... - gavenkoa
@gavenkoa是的,没错。但是OP提到了Gnu / Linux。 - phimuemue
@phimuemue有什么奇怪的 kindhaero 问 不是全屏 所以我把另一个可以修改的解决方案用于这样的用途...... - gavenkoa
什么是&可选参数f? - user1735594


;;下一个代码适用于Emacs 21.4,22.3,23.1,24.3。
(当窗口系统
  (让(
        (px(display-pixel-width))
        (py(display-pixel-height))
        (fx(frame-char-width))
        (fy(frame-char-height))
        tx ty
        )
    ;;下一个公式在Windows主机上使用默认字体发现了经验。
    (setq tx( - (/ px fx)7))
    (setq ty( - (/ py fy)4))
    (setq initial-frame-alist'((top.2)(left.2)))
    (add-to-list'initial-frame-alist(cons'width tx))
    (add-to-list'initial-frame-alist(cons'height ty))
    ))

此代码保留了Windows / Gnome / KDE下底部任务栏的某个位置

但不是要求尝试阅读: http://www.emacswiki.org/emacs/FullScreen


9
2017-10-14 09:29



谢谢..没有用这个。是的我应该先去emacswiki。我最近在SO上读了很多。 - kindahero
我忘了添加这个代码仅适用于Emacs加载,所以你需要把它放到.emacs文件...希望这个帮助...... - gavenkoa
是。我理解......但似乎不是我想要的。因为我使用不同分辨率的显示器,我想得到的是窗口最大化而不是特定尺寸。 - kindahero
@kindahero。我的解决方案是自适应而不是特定的尺寸)) - gavenkoa
这很好用。我可以以某种方式设置默认帧大小吗?就像是 (setq default-frame-alist '((width . 190) (height . 50) ))?我是LISP的新手,所以...... - Lenar Hoyt


OSX:

Emacs Trunk的开发者版本有一个名为的函数 toggle-frame-maximized,包括在内 .../lisp/frame.el。该功能可以添加到 after-init-hook 要么 emacs-startup-hook,或只是包含在 .emacs 在启动时加载的文件。在OSX上,它一举增加宽度和高度。


Windows XP:

a之后可以使用以下命令 make-frame 命令,或Emacs生成初始帧后。

(w32-send-sys-command 61488)

OSX和Windows

这是一个设置初始帧大小和位置的示例 - 我把它放在我的开头附近 .emacs 文件:

(let ((frame (selected-frame)))
  (cond
    ((eq system-type 'darwin)
      (setq ns-auto-hide-menu-bar t)
      (set-frame-position frame 0 0) ;; must come after `ns-auto-hide-menu-bar`
      (cond
        ((and
            (= 1920 (display-pixel-width))
            (= 1080 (display-pixel-height)))
          (set-frame-size frame 1895 1054 t))
        ((and
            (= 1920 (display-pixel-width))
            (= 1200 (display-pixel-height)))
          (set-frame-size frame 1895 1174 t))
        ((and
            (= 1280 (display-pixel-width))
            (= 800 (display-pixel-height)))
          (set-frame-size frame 1265 774 t))) )
    ((and
        (eq system-type 'windows-nt)
        (equal (w32-version) '(5 1 2600)))
      ;; (w32-send-sys-command #xf030)
      (set-frame-position frame 0 0)
      (cond
        ((and
            (= 1920 (display-pixel-width))
            (= 1003 (display-pixel-height)))
          (set-frame-size frame 1898 924 t))
        ((and
            (= 1920 (display-pixel-width))
            (= 1123 (display-pixel-height)))
          (set-frame-size frame 1876 1052 t))
        ((and
            (= 1280 (display-pixel-width))
            (= 723 (display-pixel-height)))
          (set-frame-size frame 1250 670 t))))
      ((and
          (eq system-type 'windows-nt)
          (equal (w32-version) '(6 1 7601)))
        (set-frame-position frame 0 0)
        (cond
          ((and
              (= 1920 (display-pixel-width))
              (= 1080 (display-pixel-height)))
            (set-frame-size frame 1890 1003 t))
          (t
            (message "Not yet contemplated.")))) ))

这是我用来创建新框架的一个示例 - 控制确切的大小和位置:

(defun lawlist-make-frame (&optional alist)
  (let ((frame (make-frame alist)))
    (set-frame-position frame 0 0)
    (cond
      ((eq system-type 'darwin)
        (cond
          ((and
              (= 1920 (display-pixel-width))
              (= 1080 (display-pixel-height)))
            (set-frame-size frame 1895 1054 t))
          ((and
              (= 1920 (display-pixel-width))
              (= 1200 (display-pixel-height)))
            (set-frame-size frame 1895 1174 t))
          ((and
              (= 1280 (display-pixel-width))
              (= 800 (display-pixel-height)))
            (set-frame-size frame 1265 774 t))))
      ((and
          (eq system-type 'windows-nt)
          (equal (w32-version) '(5 1 2600)))
        (select-frame frame)
        (cond
          ((and
              (= 1920 (display-pixel-width))
              (= 1003 (display-pixel-height)))
            (set-frame-size frame 1898 924 t))
          ((and
              (= 1920 (display-pixel-width))
              (= 1123 (display-pixel-height)))
            (set-frame-size frame 1876 1052 t))
          ((and
              (= 1280 (display-pixel-width))
              (= 723 (display-pixel-height)))
            (set-frame-size frame 1250 670 t))))
      ((and
          (eq system-type 'windows-nt)
          (equal (w32-version) '(6 1 7601)))
        (select-frame frame)
        (cond
          ((and
              (= 1920 (display-pixel-width))
              (= 1080 (display-pixel-height)))
            (set-frame-size frame 1890 1003 t))
          (t
            (message "Not yet contemplated.")))) )))

8
2017-09-10 05:57





把它放到我的〜/ .emacs中对我有用(Debian GNU / Linux上的Emacs 24.5.1):

(toggle-frame-maximized)

为了找到它,我检查了M-F10快捷方式调用的命令名称:C-h M-F10:它返回“toggle-frame-maximized”,我只是在〜/ .emacs中调用。

找到了另一种解决方案,甚至可能更好 这里

(add-to-list 'initial-frame-alist '(fullscreen . maximized))


2
2018-03-11 09:00





出于某种原因,x-send-client-message在某些时候对我不起作用(或者不可靠,无论如何)。因此我使用这个:

(defun set-maximized ()
  (interactive)
  (shell-command "wmctrl -r :ACTIVE: -badd,maximized_vert,maximized_horz"))

要在启动时执行此操作:

(add-hook 'window-setup-hook 'set-maximized t)

1
2018-03-18 20:19