)
+(defun beginning-of-line-pos()
+ ;; Return the point position corresponding to the beginning
+ ;; of the current line.
+ (save-excursion
+ (beginning-of-line)
+ (point)
+ )
+)
+
+(defun pos-offset()
+ ;; How far are we from the beginning of the line?
+ (- (point) (beginning-of-line-pos))
+ )
+)
+
+(defun first-char-offset()
+ ;; How far is the first character on this line
+ ;; from the beginning of the line?
+ (save-excursion
+ (+ (pos-offset) (skip-chars-forward " \t"))
+ )
+)
+
+(defun first-char-pos()
+ ;; What's the position of the first character on this line?
+ (+ (beginning-of-line-pos) (first-char-offset))
+)
(defun nagios-indent-to(indent-column)
"Indent the current line to column indent-column."
- (setq pos (point))
- (beginning-of-line)
- (setq bol (point))
- (setq pos-offset (- pos bol))
- (setq first-char-offset
- (skip-chars-forward " \t"))
+ ;; Store the point in orig-pos.
+ (let ((orig-pos (point)))
- (setq first-char-pos
- (+ bol first-char-offset))
-
- (delete-region bol first-char-pos)
-
- (beginning-of-line)
-
- (setq pos-change (- indent-column first-char-offset))
- (setq pos-offset (+ pos-offset pos-change))
+ ;; And store the offset of the first character (with respect to the
+ ;; beginning of the line) in orig-first-char-offset.
+ (let ((orig-first-char-offset (first-char-offset)))
- (if (<= pos-offset indent-column)
- (setq pos-offset indent-column))
-
- (while (< 0 indent-column)
- (insert " ")
- (setq indent-column (- indent-column 1)))
+ ;; Delete any leading whitespace, and move the point to the
+ ;; beginning of the line.
+ (delete-region (beginning-of-line-pos) (first-char-pos))
+ (beginning-of-line)
- (goto-char (+ bol pos-offset))
+ ;; Now insert indent-column spaces.
+ (while (< 0 indent-column)
+ (insert " ")
+ (setq indent-column (- indent-column 1)))
+ ;; The text on the current line just moved left/right some amount;
+ ;; call it text-delta. We want to move the point that same distance.
+ (let ((text-delta ((first-char-offset) - orig-first-char-offset)))
+ (goto-char (+ orig-point text-delta))
+ )
+ )
)
+)