summaryrefslogtreecommitdiffstats
path: root/Docs/cmake-mode.el
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2009-02-26 18:28:01 (GMT)
committerBrad King <brad.king@kitware.com>2009-02-26 18:28:01 (GMT)
commit8597f01acd94df1287ef9507541bd2c431daf772 (patch)
tree119bef8f514b0587e67fb31277b718a17749ea2c /Docs/cmake-mode.el
parent3829be4ca66e79310ef19750e877634169c64431 (diff)
downloadCMake-8597f01acd94df1287ef9507541bd2c431daf772.zip
CMake-8597f01acd94df1287ef9507541bd2c431daf772.tar.gz
CMake-8597f01acd94df1287ef9507541bd2c431daf772.tar.bz2
BUG: Fix cmake-mode.el indentation cursor motion
This makes cursor motion in the indent function consistent with emacs conventions. Patch from Mike Wittman. See issue #8625.
Diffstat (limited to 'Docs/cmake-mode.el')
-rw-r--r--Docs/cmake-mode.el74
1 files changed, 45 insertions, 29 deletions
diff --git a/Docs/cmake-mode.el b/Docs/cmake-mode.el
index 624740e..33c2204 100644
--- a/Docs/cmake-mode.el
+++ b/Docs/cmake-mode.el
@@ -102,54 +102,70 @@
(defun cmake-indent ()
"Indent current line as CMAKE code."
(interactive)
- (beginning-of-line)
(if (cmake-line-starts-inside-string)
()
(if (bobp)
- (indent-line-to 0)
- (let ((point-start (point))
- token cur-indent)
+ (cmake-indent-line-to 0)
+ (let (cur-indent)
(save-excursion
- ; Search back for the last indented line.
- (cmake-find-last-indented-line)
-
- ; Start with the indentation on this line.
- (setq cur-indent (current-indentation))
-
- ; Search forward counting tokens that adjust indentation.
- (while (re-search-forward cmake-regex-token point-start t)
- (setq token (match-string 0))
- (if (string-match (concat "^" cmake-regex-paren-left "$") token)
- (setq cur-indent (+ cur-indent cmake-tab-width))
+ (beginning-of-line)
+
+ (let ((point-start (point))
+ token)
+
+ ; Search back for the last indented line.
+ (cmake-find-last-indented-line)
+
+ ; Start with the indentation on this line.
+ (setq cur-indent (current-indentation))
+
+ ; Search forward counting tokens that adjust indentation.
+ (while (re-search-forward cmake-regex-token point-start t)
+ (setq token (match-string 0))
+ (if (string-match (concat "^" cmake-regex-paren-left "$") token)
+ (setq cur-indent (+ cur-indent cmake-tab-width))
+ )
+ (if (string-match (concat "^" cmake-regex-paren-right "$") token)
+ (setq cur-indent (- cur-indent cmake-tab-width))
+ )
+ (if (and
+ (string-match cmake-regex-block-open token)
+ (looking-at (concat "[ \t]*" cmake-regex-paren-left))
+ )
+ (setq cur-indent (+ cur-indent cmake-tab-width))
+ )
)
- (if (string-match (concat "^" cmake-regex-paren-right "$") token)
+ (goto-char point-start)
+
+ ; If this is the end of a block, decrease indentation.
+ (if (looking-at cmake-regex-block-close)
(setq cur-indent (- cur-indent cmake-tab-width))
)
- (if (and
- (string-match cmake-regex-block-open token)
- (looking-at (concat "[ \t]*" cmake-regex-paren-left))
- )
- (setq cur-indent (+ cur-indent cmake-tab-width))
- )
)
)
- ; If this is the end of a block, decrease indentation.
- (if (looking-at cmake-regex-block-close)
- (setq cur-indent (- cur-indent cmake-tab-width))
- )
-
; Indent this line by the amount selected.
(if (< cur-indent 0)
- (indent-line-to 0)
- (indent-line-to cur-indent)
+ (cmake-indent-line-to 0)
+ (cmake-indent-line-to cur-indent)
)
)
)
)
)
+(defun cmake-point-in-indendation ()
+ (string-match "^[ \\t]*$" (buffer-substring (point-at-bol) (point))))
+
+(defun cmake-indent-line-to (column)
+ "Indent the current line to COLUMN.
+If point is within the existing indentation it is moved to the end of
+the indentation. Otherwise it retains the same position on the line"
+ (if (cmake-point-in-indendation)
+ (indent-line-to column)
+ (save-excursion (indent-line-to column))))
+
;------------------------------------------------------------------------------
;;