Previous: Miscellaneous, Up: Emacs Initialization [Contents][Index]
Finally, a feature I really like: a modified mode line.
When I work over a network, I forget which machine I am using. Also, I tend to lose track of where I am, and which line point is on.
So I reset my mode line to look like this:
-:-- foo.texi rattlesnake:/home/bob/ Line 1 (Texinfo Fill) Top
I am visiting a file called foo.texi, on my machine rattlesnake in my /home/bob buffer. I am on line 1, in Texinfo mode, and am at the top of the buffer.
My .emacs file has a section that looks like this:
;; Set a Mode Line that tells me which machine, which directory, ;; and which line I am on, plus the other customary information. (setq-default mode-line-format (quote (#("-" 0 1 (help-echo "mouse-1: select window, mouse-2: delete others ...")) mode-line-mule-info mode-line-modified mode-line-frame-identification " "
mode-line-buffer-identification " " (:eval (substring (system-name) 0 (string-match "\\..+" (system-name)))) ":" default-directory #(" " 0 1 (help-echo "mouse-1: select window, mouse-2: delete others ...")) (line-number-mode " Line %l ") global-mode-string
#(" %[(" 0 6 (help-echo "mouse-1: select window, mouse-2: delete others ...")) (:eval (format-time-string "%F")) mode-line-process minor-mode-alist #("%n" 0 2 (help-echo "mouse-2: widen" local-map (keymap ...))) ")%] " (-3 . "%P") ;; "-%-" )))
Here, I redefine the default mode line. Most of the parts are from the original; but I make a few changes. I set the default mode line format so as to permit various modes, such as Info, to override it.
Many elements in the list are self-explanatory: mode-line-modified
is
a variable that tells whether the buffer has been modified, mode-name
tells the name of the mode, and so on. However, the format looks
complicated because of two features we have not discussed.
The first string in the mode line is a dash or hyphen, ‘-’. In the old
days, it would have been specified simply as "-"
. But nowadays,
Emacs can add properties to a string, such as highlighting or, as in this
case, a help feature. If you place your mouse cursor over the hyphen, some
help information appears (By default, you must wait seven-tenths of a second
before the information appears. You can change that timing by changing the
value of tooltip-delay
.)
The new string format has a special syntax:
#("-" 0 1 (help-echo "mouse-1: select window, ..."))
The #(
begins a list. The first element of the list is the string
itself, just one ‘-’. The second and third elements specify the range
over which the fourth element applies. A range starts after a
character, so a zero means the range starts just before the first character;
a 1 means that the range ends just after the first character. The third
element is the property for the range. It consists of a property list, a
property name, in this case, ‘help-echo’, followed by a value, in this
case, a string. The second, third, and fourth elements of this new string
format can be repeated.
See Text Properties in The GNU Emacs Lisp Reference Manual, and see Mode Line Format in The GNU Emacs Lisp Reference Manual, for more information.
mode-line-buffer-identification
displays the current buffer name. It
is a list beginning (#("%12b" 0 4 …
. The #(
begins the
list.
The ‘"%12b"’ displays the current buffer name, using the
buffer-name
function with which we are familiar; the ‘12’
specifies the maximum number of characters that will be displayed. When a
name has fewer characters, whitespace is added to fill out to this number.
(Buffer names can and often should be longer than 12 characters; this length
works well in a typical 80 column wide window.)
:eval
says to evaluate the following form and use the result as a
string to display. In this case, the expression displays the first
component of the full system name. The end of the first component is a
‘.’ (period), so I use the string-match
function to tell me the
length of the first component. The substring from the zeroth character to
that length is the name of the machine.
This is the expression:
(:eval (substring (system-name) 0 (string-match "\\..+" (system-name))))
‘%[’ and ‘%]’ cause a pair of square brackets to appear for each recursive editing level. ‘%n’ says “Narrow” when narrowing is in effect. ‘%P’ tells you the percentage of the buffer that is above the bottom of the window, or “Top”, “Bottom”, or “All”. (A lower case ‘p’ tell you the percentage above the top of the window.) ‘%-’ inserts enough dashes to fill out the line.
Remember, you don’t have to like Emacs to like it—your own Emacs can have different colors, different commands, and different keys than a default Emacs.
On the other hand, if you want to bring up a plain out-of-the-box Emacs, with no customization, type:
emacs -q
This will start an Emacs that does not load your ~/.emacs initialization file. A plain, default Emacs. Nothing more.
Previous: Miscellaneous, Up: Emacs Initialization [Contents][Index]