Ubuntu 14.04 Emacs: Wie widerrufe ich die Vollbild-Standardeinstellung?

Ubuntu 14.04 Emacs: Wie widerrufe ich die Vollbild-Standardeinstellung?

Wenn ich Emacs starte, ist es immer im Vollbildmodus. Ich kann die Konfiguration zum Starten von Emacs nicht findennichtim Vollbildmodus (maximiert). Ich bin nicht der Einzige mit diesem Problem:

http://ubuntuforums.org/showthread.php?t=2282182

System:

  • Dell XPS 15
  • Ubuntu 14.04 (werkseitig installiert)
  • Emacs 24.3.1 (werkseitig installiert, aktualisiert)

Ich habe die --geometryOption ausprobiert und sie funktioniert über die Befehlszeile, ändert aber nicht das Verhalten des Dock-Symbols. Selbst wenn ich das Symbol entferne, über die Befehlszeile mit „Benutzerdefiniert“ starte --geometryund das neue Symbol sperre, startet es einfach wieder im Vollbildmodus. Mit den Einstellungen hatte ich *-frame-alistauch kein Glück. Welche andere Konfiguration könnte dies verursachen?

Antwort1

Ich habe auch einen Dell XPS mit einem HiDPI-Bildschirm und hatte das gleiche Problem. Es stellte sich heraus, dass Emacs mehr Bildschirmfläche belegen wollte, als verfügbar war, weil ich in meinen Emacs-Startdateien eine Rahmenbreite von 88 Zeichen eingestellt hatte, die verdoppelt wurde, weil ich meinen UI-Skalierungsfaktor auf 2 eingestellt hatte, um die Dinge auf dem HiDPI-Display lesbar zu machen. Also öffnete der Fenstermanager (richtigerweise) Emacs stattdessen im Vollbildmodus. Ich habe es herausgefunden, als ich ennobs Lösung ausprobiertehttp://ubuntuforums.org/showthread.php?t=2282182. Im Code von ennob beträgt die Rahmengröße 40 x 25 Zeichen, was auf meinem System zu einer Rahmengröße von 80 x 50 führte. Ein wenig Experimentieren bestätigte, dass Emacs die angeforderte Textbreite und -höhe mit dem Skalierungsfaktor multipliziert, wenn die tatsächliche Breite und Höhe des Rahmens festgelegt wird.

Den Skalierungsfaktor können Sie aus dconf abrufen:

dconf read /com/ubuntu/user-interface/scale-factor

was auf meinem System zurückgibt {'eDP1': 16}. Ein Skalierungsfaktor von 1 ergibt {'eDP1': 8}. Also habe ich den Code von ennob verallgemeinert und dies zu meiner Emacs-Startdatei hinzugefügt (für mich: ) ~/.emacs.d/init.el):

(defun my:window-setup-hook ()
  (when (and (string= system-type "gnu/linux") window-system)
    (toggle-frame-maximized)
    (let* ((dconf-entry
            (shell-command-to-string
             "dconf read /com/ubuntu/user-interface/scale-factor"))
           (scale-factor (progn (string-match "'[eD][FD]P1': \\([0-9]+\\)[,\}]"
                                              dconf-entry)
                                (string-to-int (match-string 1 dconf-entry))))
           (text-width (truncate (/ desired-width (/ scale-factor 8.0))))
           (text-height (truncate (/ desired-height (/ scale-factor 8.0)))))
      (message "set-frame-size is %dx%d, scale-factor is %s"
               text-width text-height scale-factor)
      (set-frame-size (selected-frame) text-width text-height))))

(setq window-setup-hook 'my:window-setup-hook)

Das funktioniert bei mir bei Skalierungsfaktoren >= 2 und wenn meine Standardschriftart 14 pt ( (set-face-attribute 'default nil :height 140)) ist. Ich verstehe also immer noch nicht die unzähligen Faktoren, die hier eine Rolle spielen, aber mein unmittelbares Problem ist gelöst und ich hoffe, das hilft Ihnen auch.

Antwort2

Die Antwort von @chris-simpkins hat bei mir fast funktioniert, aber die Funktion zum Umschalten des Vollbildmodus hat aus irgendeinem Grund nicht funktioniert :/ Gemäß meinem Kommentar ist hier der Code, der bei mir funktioniert (ich bevorzuge einen schmaleren Bildschirm):

(defun toggle-fullscreen-x11 ()
  "Toggle full screen on X11"
  (interactive)
  (when (eq window-system 'x)
    (set-frame-parameter
     nil 'fullscreen
     (when (not (frame-parameter nil 'fullscreen)) 'fullboth))))

(defun my:window-setup-hook ()
  (toggle-fullscreen-x11)
  (when window-system
    (let* ((dconf-entry
            (shell-command-to-string
             "dconf read /com/ubuntu/user-interface/scale-factor"))
           (scale-factor (progn (string-match "{'eDP1': \\([0-9]+\\)}"
                                              dconf-entry)
                                (string-to-int (match-string 1 dconf-entry))))
           ;; text-width make room for gutter and fringes
           (text-width (truncate (/ 48 (/ scale-factor 8.0))))
           (text-height (truncate (/ 50 (/ scale-factor 8.0)))))
      (set-frame-size (selected-frame) text-width text-height))))
(setq window-setup-hook 'my:window-setup-hook)

verwandte Informationen