* src/xdisp.c (decode_mode_spec): Implement the %C construct.
* lisp/bindings.el (column-number-indicator-zero-based): New
defcustom.
(mode-line-position): Use %C when
column-number-indicator-zero-based is nil.
* src/xdisp.c (syms_of_xdisp) <frame-title-format>:
* src/buffer.c (syms_of_buffer) <mode-line-format>:
* doc/lispref/modes.texi (%-Constructs):
* doc/lispref/frames.texi (Frame Titles): Document the %C
construct.
* doc/emacs/display.texi (Optional Mode Line): Document
'column-number-indicator-zero-based'.
* etc/NEWS: Mention 'column-number-indicator-zero-based' and the
%C construct.
@cindex mode, Column Number
@findex column-number-mode
Similarly, you can display the current column number by turning on
-Column number mode with @kbd{M-x column-number-mode}. The column
+Column Number mode with @kbd{M-x column-number-mode}. The column
number is indicated by the letter @samp{C}. However, when both of
these modes are enabled, the line and column numbers are displayed in
parentheses, the line number first, rather than with @samp{L} and
@samp{C}. For example: @samp{(561,2)}. @xref{Minor Modes}, for more
information about minor modes and about how to use these commands.
+@vindex column-number-indicator-zero-based
+ In Column Number mode, the displayed column number counts from zero
+starting at the left margin of the window. If you would prefer for
+the displayed column number to count from one, you may set
+@code{column-number-indicator-zero-based} to @code{nil}.
+
@cindex narrowing, and line number display
If you have narrowed the buffer (@pxref{Narrowing}), the displayed
line number is relative to the accessible portion of the buffer.
This variable specifies how to compute a name for a frame when you have
not explicitly specified one. The variable's value is actually a mode
line construct, just like @code{mode-line-format}, except that the
-@samp{%c} and @samp{%l} constructs are ignored. @xref{Mode Line
+@samp{%c}, @samp{%C}, and @samp{%l} constructs are ignored. @xref{Mode Line
Data}.
@end defvar
@xref{Buffer Names}.
@item %c
-The current column number of point.
+The current column number of point, counting from zero starting at the
+left margin of the window.
+
+@item %C
+The current column number of point, counting from one starting at the
+left margin of the window.
@item %e
When Emacs is nearly out of memory for Lisp objects, a brief message
\f
* Editing Changes in Emacs 26.1
++++
+** New variable 'column-number-indicator-zero-based'.
+Traditionally, in Column Number mode, the displayed column number
+counts from zero starting at the left margin of the window. This
+behavior is now controlled by 'column-number-indicator-zero-based'.
+If you would prefer for the displayed column number to count from one,
+you may set this variable to nil. (Behind the scenes, there is now a
+new mode line construct, '%C', which operates exactly as '%c' does
+except that it counts from one.)
+
+++
** Two new user options 'list-matching-lines-jump-to-current-line' and
'list-matching-lines-current-line-face' to show highlighted the current
map) "\
Keymap to display on column and line numbers.")
+(defcustom column-number-indicator-zero-based t
+ "When non-nil, mode line displays column numbers zero-based.
+
+This variable has effect only when Column Number mode is turned on,
+which displays column numbers in the mode line.
+If the value is non-nil, the displayed column numbers start from
+zero, otherwise they start from one."
+ :type 'boolean
+ :group 'mode-line
+ :version "26.1")
+
(defvar mode-line-position
`((-3 ,(propertize
"%p"
mouse-1: Display Line and Column Mode Menu")))
(line-number-mode
((column-number-mode
- (10 ,(propertize
- " (%l,%c)"
- 'local-map mode-line-column-line-number-mode-map
- 'mouse-face 'mode-line-highlight
- 'help-echo "Line number and Column number\n\
+ (column-number-indicator-zero-based
+ (10 ,(propertize
+ " (%l,%c)"
+ 'local-map mode-line-column-line-number-mode-map
+ 'mouse-face 'mode-line-highlight
+ 'help-echo "Line number and Column number\n\
mouse-1: Display Line and Column Mode Menu"))
+ (10 ,(propertize
+ " (%l,%C)"
+ 'local-map mode-line-column-line-number-mode-map
+ 'mouse-face 'mode-line-highlight
+ 'help-echo "Line number and Column number\n\
+mouse-1: Display Line and Column Mode Menu")))
(6 ,(propertize
" L%l"
'local-map mode-line-column-line-number-mode-map
'help-echo "Line Number\n\
mouse-1: Display Line and Column Mode Menu"))))
((column-number-mode
- (5 ,(propertize
- " C%c"
- 'local-map mode-line-column-line-number-mode-map
- 'mouse-face 'mode-line-highlight
- 'help-echo "Column number\n\
-mouse-1: Display Line and Column Mode Menu"))))))
+ (column-number-indicator-zero-based
+ (5 ,(propertize
+ " C%c"
+ 'local-map mode-line-column-line-number-mode-map
+ 'mouse-face 'mode-line-highlight
+ 'help-echo "Column number\n\
+mouse-1: Display Line and Column Mode Menu"))
+ (5 ,(propertize
+ " C%C"
+ 'local-map mode-line-column-line-number-mode-map
+ 'mouse-face 'mode-line-highlight
+ 'help-echo "Column number\n\
+mouse-1: Display Line and Column Mode Menu")))))))
"Mode line construct for displaying the position in the buffer.
Normally displays the buffer percentage and, optionally, the
buffer size, the line number and the column number.")
For a modified read-only buffer, %* gives % and %+ gives *.
%s -- print process status. %l -- print the current line number.
%c -- print the current column number (this makes editing slower).
+ Columns are numbered starting from the left margin, and the
+ leftmost column is displayed as zero.
To make the column number update correctly in all cases,
`column-number-mode' must be non-nil.
+ %C -- Like %c, but the leftmost column is displayed as one.
%i -- print the size of the buffer.
%I -- like %i, but use k, M, G, etc., to abbreviate.
%p -- print percent of buffer above top of window, or Top, Bot or All.
used to track down the cause for this full-redisplay).
Since the frame title uses the same %-constructs as the mode line
- (except %c and %l), if this variable is non-zero, we also consider
+ (except %c, %C, and %l), if this variable is non-zero, we also consider
redisplaying the title of each frame, see x_consider_frame_title.
The `redisplay' bits are the same as those used for
return (BUF_SAVE_MODIFF (b) < BUF_MODIFF (b)) != w->last_had_star;
}
-/* True if W has %c in its mode line and mode line should be updated. */
+/* True if W has %c or %C in its mode line and mode line should be updated. */
static bool
mode_line_update_needed (struct window *w)
break;
case 'c':
- /* %c and %l are ignored in `frame-title-format'.
+ case 'C':
+ /* %c, %C, and %l are ignored in `frame-title-format'.
(In redisplay_internal, the frame title is drawn _before_ the
windows are updated, so the stuff which depends on actual
window contents (such as %l) may fail to render properly, or
else
{
ptrdiff_t col = current_column ();
+ int disp_col = (c == 'C') ? col + 1 : col;
w->column_number_displayed = col;
- pint2str (decode_mode_spec_buf, width, col);
+ pint2str (decode_mode_spec_buf, width, disp_col);
return decode_mode_spec_buf;
}
ptrdiff_t topline, nlines, height;
ptrdiff_t junk;
- /* %c and %l are ignored in `frame-title-format'. */
+ /* %c, %C, and %l are ignored in `frame-title-format'. */
if (mode_line_target == MODE_LINE_TITLE)
return "";
\(Assuming the window manager supports this feature.)
This variable has the same structure as `mode-line-format', except that
-the %c and %l constructs are ignored. It is used only on frames for
+the %c, %C, and %l constructs are ignored. It is used only on frames for
which no explicit name has been set (see `modify-frame-parameters'). */);
DEFVAR_LISP ("icon-title-format", Vicon_title_format,