www.delorie.com/gnu/docs/elisp-manual-21/elisp_478.html   search  
 
Buy the book!


GNU Emacs Lisp Reference Manual

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.2.4 Motion by Text Lines

Text lines are portions of the buffer delimited by newline characters, which are regarded as part of the previous line. The first text line begins at the beginning of the buffer, and the last text line ends at the end of the buffer whether or not the last character is a newline. The division of the buffer into text lines is not affected by the width of the window, by line continuation in display, or by how tabs and control characters are displayed.

Command: goto-line line
This function moves point to the front of the lineth line, counting from line 1 at beginning of the buffer. If line is less than 1, it moves point to the beginning of the buffer. If line is greater than the number of lines in the buffer, it moves point to the end of the buffer--that is, the end of the last line of the buffer. This is the only case in which goto-line does not necessarily move to the beginning of a line.

If narrowing is in effect, then line still counts from the beginning of the buffer, but point cannot go outside the accessible portion. So goto-line moves point to the beginning or end of the accessible portion, if the line number specifies an inaccessible position.

The return value of goto-line is the difference between line and the line number of the line to which point actually was able to move (in the full buffer, before taking account of narrowing). Thus, the value is positive if the scan encounters the real end of the buffer before finding the specified line. The value is zero if scan encounters the end of the accessible portion but not the real end of the buffer.

In an interactive call, line is the numeric prefix argument if one has been provided. Otherwise line is read in the minibuffer.

Command: beginning-of-line &optional count
This function moves point to the beginning of the current line. With an argument count not nil or 1, it moves forward count-1 lines and then to the beginning of the line.

This function does not move point across a field boundary (see section 32.19.10 Defining and Using Fields) unless doing so would move beyond there to a different line; therefore, if count is nil or 1, and point starts at a field boundary, point does not move. To ignore field boundaries, either bind inhibit-field-text-motion to t, or use the forward-line function instead. For instance, (forward-line 0) does the same thing as (beginning-of-line), except that it ignores field boundaries.

If this function reaches the end of the buffer (or of the accessible portion, if narrowing is in effect), it positions point there. No error is signaled.

Function: line-beginning-position &optional count
Return the position that (beginning-of-line count) would move to.

Command: end-of-line &optional count
This function moves point to the end of the current line. With an argument count not nil or 1, it moves forward count-1 lines and then to the end of the line.

This function does not move point across a field boundary (see section 32.19.10 Defining and Using Fields) unless doing so would move beyond there to a different line; therefore, if count is nil or 1, and point starts at a field boundary, point does not move. To ignore field boundaries, bind inhibit-field-text-motion to t.

If this function reaches the end of the buffer (or of the accessible portion, if narrowing is in effect), it positions point there. No error is signaled.

Function: line-end-position &optional count
Return the position that (end-of-line count) would move to.

Command: forward-line &optional count
This function moves point forward count lines, to the beginning of the line. If count is negative, it moves point -count lines backward, to the beginning of a line. If count is zero, it moves point to the beginning of the current line.

If forward-line encounters the beginning or end of the buffer (or of the accessible portion) before finding that many lines, it sets point there. No error is signaled.

forward-line returns the difference between count and the number of lines actually moved. If you attempt to move down five lines from the beginning of a buffer that has only three lines, point stops at the end of the last line, and the value will be 2.

In an interactive call, count is the numeric prefix argument.

Function: count-lines start end
This function returns the number of lines between the positions start and end in the current buffer. If start and end are equal, then it returns 0. Otherwise it returns at least 1, even if start and end are on the same line. This is because the text between them, considered in isolation, must contain at least one line unless it is empty.

Here is an example of using count-lines:

 
(defun current-line ()
  "Return the vertical position of point..."
  (+ (count-lines (window-start) (point))
     (if (= (current-column) 0) 1 0)
     -1))

Also see the functions bolp and eolp in 32.1 Examining Text Near Point. These functions do not move point, but test whether it is already at the beginning or end of a line.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

  webmaster   donations   bookstore     delorie software   privacy  
  Copyright 2003   by The Free Software Foundation     Updated Jun 2003