Function: line-move-to-column
line-move-to-column is a byte-compiled function defined in
simple.el.gz.
Signature
(line-move-to-column COL)
Documentation
Try to find column COL, considering invisibility.
This function works only in certain cases,
because what we really need is for move-to-column
and current-column to be able to ignore invisible text.
Source Code
;; Defined in /usr/src/emacs/lisp/simple.el.gz
(defun line-move-to-column (col)
"Try to find column COL, considering invisibility.
This function works only in certain cases,
because what we really need is for `move-to-column'
and `current-column' to be able to ignore invisible text."
(if (zerop col)
(beginning-of-line)
(move-to-column col))
(when (and line-move-ignore-invisible
(not (bolp)) (invisible-p (1- (point))))
(let ((normal-location (point))
(normal-column (current-column)))
;; If the following character is currently invisible,
;; skip all characters with that same `invisible' property value.
(while (and (not (eobp))
(invisible-p (point)))
(goto-char (next-char-property-change (point))))
;; Have we advanced to a larger column position?
(if (> (current-column) normal-column)
;; We have made some progress towards the desired column.
;; See if we can make any further progress.
(line-move-to-column (+ (current-column) (- col normal-column)))
;; Otherwise, go to the place we originally found
;; and move back over invisible text.
;; that will get us to the same place on the screen
;; but with a more reasonable buffer position.
(goto-char normal-location)
(let ((line-beg
;; We want the real line beginning, so it's consistent
;; with bolp below, otherwise we might infloop.
(let ((inhibit-field-text-motion t))
(line-beginning-position))))
(while (and (not (bolp)) (invisible-p (1- (point))))
(goto-char (previous-char-property-change (point) line-beg))))))))