Skip to content
Snippets Groups Projects
Commit 8597f01a authored by Brad King's avatar Brad King
Browse files

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.
parent 3829be4c
No related branches found
No related tags found
No related merge requests found
......@@ -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))))
;------------------------------------------------------------------------------
;;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment