How to tell emacs to open .h file in C++ mode?

后端 未结 6 1625
暗喜
暗喜 2020-11-29 03:28

What lines should I add to my _emacs (on Windows) file to have it open .h files in C++ mode? The default is C mode.

6条回答
  •  独厮守ぢ
    2020-11-29 03:46

    Since I use both C and C++ regularly, I wrote this function to try and "guess" whether a .h file is meant to be C or C++

    ;; function decides whether .h file is C or C++ header, sets C++ by
    ;; default because there's more chance of there being a .h without a
    ;; .cc than a .h without a .c (ie. for C++ template files)
    (defun c-c++-header ()
      "sets either c-mode or c++-mode, whichever is appropriate for
    header"
      (interactive)
      (let ((c-file (concat (substring (buffer-file-name) 0 -1) "c")))
        (if (file-exists-p c-file)
            (c-mode)
          (c++-mode))))
    (add-to-list 'auto-mode-alist '("\\.h\\'" . c-c++-header))
    

    And if that doesn't work I set a key to toggle between C and C++ modes

    ;; and if that doesn't work, a function to toggle between c-mode and
    ;; c++-mode
    (defun c-c++-toggle ()
      "toggles between c-mode and c++-mode"
      (interactive)
      (cond ((string= major-mode "c-mode")
             (c++-mode))
            ((string= major-mode "c++-mode")
             (c-mode))))
    

    It's not perfect, there might be a better heuristic for deciding whether a header is C or C++ but it works for me.

提交回复
热议问题