ch11ng / exwm

Emacs X Window Manager
2.85k stars 134 forks source link

How do I tell `exwm` to hide mode-line on "non-Emacs" buffers? #629

Closed emacksnotes closed 5 years ago

emacksnotes commented 5 years ago

How do I tell exwm to hide mode-line on "non-Emacs" buffers?

There is a global variable for exwm-manage-force-tiling, and per-application configuration for titling. Unfortunately, I couldn't find the corresponding global variable for hiding of modeline.

The above question opens up following question:

  1. How do I match "non-Emacs" buffers?
  2. Please document what the matcher actually does.
    (dolist (i exwm-manage-configurations)
      (save-current-buffer
        (when (eval (car i) t)
          (cl-return-from exwm-manage--get-configurations (cdr i)))))

A cursory look at exwm-manage--get-configurations suggests that it exwm walks the matchers in sequence and takes actions defined in the first hit. Should the matcher fall through (after a hit) and execute actions for all subsequent hits etc etc etc.

I am NOT asking you to change the current behaviour. It suffices if you document what the current behaviour is.

ch11ng commented 5 years ago

How do I match "non-Emacs" buffers?

The matching is performed when managing an X window. So this is not possible.

Please document what the matcher actually does.

I suppose it's already in the docstring of exwm-manage-configurations:

For each X window managed for the first time, matching criteria (sexps) are evaluated sequentially and the first configuration with a non-nil matching criterion would be applied.

emacksnotes commented 5 years ago

A cursory look at exwm-manage--get-configurations suggests that it exwm walks the matchers in sequence and takes actions defined in the first hit. Should the matcher fall through (after a hit) and execute actions for all subsequent hits etc etc etc.

In https://github.com/ch11ng/exwm/issues/636#issuecomment-525992390, I have carried this line of thought a bit further.

ch11ng commented 5 years ago

I somehow misread this question. To hide mode-line on exwm-mode buffers, you can either set mode-line-format to nil in exwm-mode-hook, or call exwm-layout-hide-mode-line in exwm-manage-finish-hook (if it's intended to be restored in the future).

emacksnotes commented 5 years ago

Please modify exwm-manage-finish-hook to either include :options (as below) or do a custom-add-frequent-value (as below).

(defcustom exwm-manage-finish-hook nil
  "Normal hook run after a window is just managed, in the context of the
corresponding buffer."
  :options '(exwm-layout-hide-mode-line)
  :type 'hook)
(custom-add-frequent-value 'exwm-manage-finish-hook
               'exwm-layout-hide-mode-line)

It is a small change to make, but gives useful hints to the user.

I am not sure if I need a:set-er for that hook, but I would like to see what my options are for that variable.

ch11ng commented 5 years ago

I forgot to mention that exwm-manage-configurations actually has the options: tiling-mode-line and floating-mode-line. Setting them to nil disables mode-lines for tiling and floating mode respectively. You can also tweak header lines with other options.