From 823c37d1da15133dc49060b55798922fda346842 Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Fri, 20 Aug 2010 18:05:11 -0400 Subject: [PATCH] Clean up the nagios-indent-to function and eliminate a bunch of byte-compiler warnings. --- nagios-mode.el | 69 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 47 insertions(+), 22 deletions(-) diff --git a/nagios-mode.el b/nagios-mode.el index e486edc..7ae478d 100644 --- a/nagios-mode.el +++ b/nagios-mode.el @@ -40,37 +40,62 @@ ) +(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)) + ) + ) ) +) -- 2.43.2