(require 'cc-mode) (require 'compile-my) (add-hook 'c-mode-hook #'enable-line-mode) (add-hook 'c++-mode-hook #'enable-line-mode) (defun c-or-cpp-switch-to-body-or-header-file () (interactive) (let*((suffixes (if (eq major-mode 'c-mode) '("c" "h") '("cc" "hh"))) (file-suffix (nth 0 suffixes)) (header-suffix (nth 1 suffixes)) (name (buffer-name)) ) (let ((is-body (string= (file-name-extension name) file-suffix)) (file-name-no-extension (file-name-sans-extension name)) ) (find-file (format "%s/%s" default-directory (if is-body (format "include/%s.%s" file-name-no-extension header-suffix) (format "../%s.%s" file-name-no-extension file-suffix) )))))) (define-key c++-mode-map "\C-c\C-c" #'compile-with-prompt) (define-key c-mode-map "\C-c\C-c" #'compile) (define-key c-mode-map "\C-o;" #'c-or-cpp-switch-to-body-or-header-file) (define-key c++-mode-map "\C-o;" #'c-or-cpp-switch-to-body-or-header-file)