summaryrefslogtreecommitdiffstats
path: root/content/posts/eamacs-improved-frame-title/index.org
blob: ff1bc15a670bbbb3baf42ff47d9ec012dae46bdd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#+TITLE: An Improved Emacs Frame Title Format
#+DATE: 2021-05-28T16:26:12-04:00
#+DRAFT: true
#+DESCRIPTION:
#+TAGS[]: emacs
#+KEYWORDS[]: emacs
#+SLUG:
#+SUMMARY:

#+ATTR_HTML: :title Old vs. New Frame Title
#+ATTR_HTML: :alt Old vs. New Frame Title
[[file:cover.png]]

I've often found that the default Emacs frame title is a little
bizarre. =emacs@host= Seems a little useless at describing what's
going on in the actual window in my opinion, and I believe the space
could be put to much better use. Perhaps it's designed for
environments where X11 forwarding is common practice, or where GNU
Emacs shares a system with XEmacs.

Taking inspiration from both Emacs and Firefox, I came up with a frame
title format that I think is much more useful.

#+begin_src emacs-lisp
(setq frame-title-format '("%b@" (:eval (or (file-remote-p default-directory 'host) system-name)) " — Emacs"))
#+end_src

Instead of =emacs@hostname=, I use =buffer-name@buffer-host — Emacs=.
Here =buffer-name= is the name of the currently focused buffer, and
=buffer-host= is the host on which the buffer's file resides. This
means that if you're connected over TRAMP to another host, the remote
host's name will be displayed in the frame title. I then added =—
Emacs= at the end, so that it's still obvious which program owns the
window.

It's possible to customize the title a lot more, but this seems to be
a good middle ground for me. =frame-title-format= uses the same
formatting template as =mode-line-format=, so you can check that
variable with =describe-variable= too see all the formatting options
available.