]> gitweb.michael.orlitzky.com - nagios-mode.git/blobdiff - nagios-mode.el
Clean up the nagios-indent-to function and eliminate a bunch of byte-compiler warnings.
[nagios-mode.git] / nagios-mode.el
index e486edc5b4f93e290a418926017b03976e2e3278..7ae478dee6b7c8ed532104c1e6ba0e6d08e5fc26 100644 (file)
   )
 
 
+(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))
+      )
+    )
   )
+)