On a text terminal, the cursor’s appearance is controlled by the
terminal, largely out of the control of Emacs. Some terminals offer
two different cursors: a visible static cursor, and a very
visible blinking cursor. By default, Emacs uses the very visible
cursor, and switches to it when you start or resume Emacs. If the
variable visible-cursor is nil when Emacs starts or
resumes, it uses the normal cursor.
On a graphical display and many Xterm-compatible text terminals, the
color and shape of the text cursor can be altered. To customize its
color, change the :background attribute of the face named
cursor (see Customizing Faces). (The other attributes of
this face have no effect; the text shown under the cursor is drawn using
the frame’s background color.) To change its shape, customize the
buffer-local variable cursor-type; possible values are box
(the default), (box . size) (box cursor becoming a hollow
box under masked images larger than size pixels in either
dimension), hollow (a hollow box), bar (a vertical bar),
(bar . n) (a vertical bar n pixels wide), hbar
(a horizontal bar), (hbar . n) (a horizontal bar n
pixels tall), or nil (no cursor at all).
On Xterm-compatible text terminals cursor customization is controlled
by the user option xterm-update-cursor. Valid values are
t to update the cursor’s color and shape, type to update
the cursor’s shape only, color to update the cursor’s color only,
and nil to not update the cursor’s appearance. Text terminals
can not display a hollow box and instead use a filled box. Similarly,
all text terminals ignore the pixel sizes for bar and
hbar.
To make the cursor even more visible, you can use HL Line mode, a minor mode that highlights the line containing point. Use M-x hl-line-mode to enable or disable it in the current buffer. M-x global-hl-line-mode enables or disables the same mode globally.
The remaining controls only work on graphical displays where Emacs can fully control the way the cursor appears.
By default, the cursor stops blinking after 10 blinks, if Emacs does
not get any input during that time; any input event restarts the
count. You can customize the variable blink-cursor-blinks to
control that: its value says how many times to blink without input
before stopping. Setting that variable to a zero or negative value
will make the cursor blink forever. To disable cursor blinking
altogether, change the variable blink-cursor-mode to nil
(see Easy Customization Interface), or add the line
(blink-cursor-mode 0)
to your init file. Alternatively, you can change how the cursor
looks when it blinks off by customizing the list variable
blink-cursor-alist. Each element in the list should have the
form (on-type . off-type); this means that if the
cursor is displayed as on-type when it blinks on (where
on-type is one of the cursor types described above), then it is
displayed as off-type when it blinks off.
Some characters, such as tab characters, are extra wide. When
the cursor is positioned over such a character, it is normally drawn
with the default character width. You can make the cursor stretch to
cover wide characters, by changing the variable
x-stretch-cursor to a non-nil value.
The cursor normally appears in non-selected windows as a
non-blinking hollow box. (For a bar cursor, it instead appears as a
thinner bar.) To turn off cursors in non-selected windows, change the
variable cursor-in-non-selected-windows to nil.