X-Git-Url: http://gitweb.michael.orlitzky.com/?p=nagios-mode.git;a=blobdiff_plain;f=nagios-mode.el;h=22535b548e35f702ff835440fb144949ac53eed6;hp=61cf412b64dba9745273b1b06efab7e626ab1ac4;hb=f999f09ae6e3ce6ff8bce49cd40cab6248ca0360;hpb=9db78fde3b4a50cf4aa3aa207c157f74118dbef1 diff --git a/nagios-mode.el b/nagios-mode.el index 61cf412..22535b5 100644 --- a/nagios-mode.el +++ b/nagios-mode.el @@ -93,9 +93,11 @@ (beginning-of-line) ;; Now insert indent-column spaces. - (while (< 0 indent-column) - (insert " ") - (setq indent-column (- indent-column 1))) + (let ((indent-remaining indent-column)) + (while (< 0 indent-remaining) + (insert " ") + (setq indent-remaining (- indent-remaining 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. @@ -106,19 +108,43 @@ ;; The point should never wind up to the left of indent-column, so ;; if it's there, move it over to indent-column. (if (< (point-offset) indent-column) - (goto-char indent-column) + (goto-char (+ (beginning-of-line-pos) indent-column)) ) ) ) ) +(defun char-is-commented(pos) + "True if the character at position pos is commented, nil otherwise." + (save-excursion + (goto-char pos) + (re-search-backward "#" (beginning-of-line-pos) t) + ) +) + +(defun char-is-commented-and-valid(pos) + "True if the character at position pos is commented and non-nil. + Nil otherwise." + (if (eq nil pos) + nil + (char-is-commented pos) + ) +) + (defun last-opening-brace() - ;; Get the position of the last opening brace, with - ;; respect to the current point. + "Returns the position of the last opening brace, with + respect to the current point. Ignores braces which + are commented out." (save-excursion (let ((lob (re-search-backward "{" nil t))) + + (while (char-is-commented-and-valid lob) + (goto-char lob) + (setq lob (re-search-backward "{" nil t)) + ) + (if lob lob -1) @@ -126,11 +152,19 @@ ) ) + (defun last-closing-brace() - ;; Get the position of the last closing brace, with - ;; respect to the current point. + "Get the position of the last closing brace, with + respect to the current point. Ignores braces which + are commented out." (save-excursion (let ((lcb (re-search-backward "}" nil t))) + + (while (char-is-commented-and-valid lcb) + (goto-char lcb) + (setq lcb (re-search-backward "}" nil t)) + ) + (if lcb lcb -1) @@ -152,29 +186,30 @@ (defun brace-on-line() ;; Is there a curly brace on this line? (save-excursion + (beginning-of-line) (re-search-forward "[{}]" (end-of-line-pos) t) ) ) + (defun nagios-calculate-indent() "Calculate the level of indentation." - ;; We're either inside a block, or we aren't. + ;; We're either inside a block, or we aren't. ;; Initialize the indent variable to either nagios-indent-level ;; or 0 depending on whether or not we're in a block. (let ((indent (if (nagios-in-block) - (setq indent nagios-indent-level) + nagios-indent-level 0) ) ) ;; Set the indentation level to 0 if we find either brace on this - ;; line. - (if (brace-on-line) - (setq indent 0) + ;; line and. + (if (and (brace-on-line) (not (char-is-commented (brace-on-line)))) + 0 + indent ) - - indent ) )