CMake/Editors/Emacs

From KitwarePublic
< CMake
Revision as of 15:10, 25 April 2013 by Brad.king (talk | contribs) (Organize page layout)
Jump to navigationJump to search

Modes

cmake-mode

See the combined syntax highlighting and indentation mode in the CMake source tree. To enable it, add the following to your .emacs file:

; Add cmake listfile names to the mode list.
(setq auto-mode-alist
	  (append
	   '(("CMakeLists\\.txt\\'" . cmake-mode))
	   '(("\\.cmake\\'" . cmake-mode))
	   auto-mode-alist))

(autoload 'cmake-mode "~/CMake/Docs/cmake-mode.el" t)

User Suggestions

Buffer Names

I've been long irritated with having to deal with multiple buffers all name CMakeLists.txt. Emacs by default will call them CMakeLists.txt, CMakeLists.txt<2>, CMakeLists.txt<3>, etc.. This is really hard to switch back and forth when the buffer names are difficult to associate with location.

I've found a couple of solutions to this problem.

  1. Use uniquify emacs package. This gives several options to automatically rename buffers based on their location on disk.
    ;; uniquify.el is a helper routine to help give buffer names a better unique name.
    (when (load "uniquify" 'NOERROR)
      (require 'uniquify)
      (setq uniquify-buffer-name-style 'forward)
      ;(setq uniquify-buffer-name-style 'post-forward)
      )
    
  2. Rename the buffer as part of the cmake-mode
    (defun cmake-rename-buffer ()
      "Renames a CMakeLists.txt buffer to cmake-<directory name>."
      (interactive)
      ;(print (concat "buffer-filename = " (buffer-file-name)))
      ;(print (concat "buffer-name     = " (buffer-name)))
      (when (and (buffer-file-name) (string-match "CMakeLists.txt" (buffer-name)))
          ;(setq file-name (file-name-nondirectory (buffer-file-name)))
          (setq parent-dir (file-name-nondirectory (directory-file-name (file-name-directory (buffer-file-name)))))
          ;(print (concat "parent-dir = " parent-dir))
          (setq new-buffer-name (concat "cmake-" parent-dir))
          ;(print (concat "new-buffer-name= " new-buffer-name))
          (rename-buffer new-buffer-name t)
          )
      )
    
    (add-hook 'cmake-mode-hook (function cmake-rename-buffer))
    

I actually prefer renaming my buffers with my cmake-rename-buffer function, because the buffer names start with a lower case letter. :)