;;; -*- lexical-binding: t -*- ;; ;; this file: ;; https://dataswamp.org/~incal/emacs-init/ide/c-and-cpp.el (require 'cc-mode) (require 'compile-incal) (defun c-or-cpp-switch-to-body-or-header-file () (interactive) (pcase-let*((`(,file-suf ,header-suf) (if (eq major-mode 'c-mode) '("c" "h") '("cc" "hh")) ) (file-ext (file-name-extension (buffer-file-name))) (is-body (string= file-ext file-suf)) (file-name (file-name-sans-extension (buffer-name))) (dst (format "%s%s" default-directory (if is-body (format "include/%s.%s" file-name header-suf) (format "../%s.%s" file-name file-suf) )))) (find-file dst) )) (let ((compile-key "C-c C-c")) (keymap-set c-mode-map compile-key #'compile) (keymap-set c++-mode-map compile-key #'compile-with-prompt) ) (let ((header-key "C-o ;")) (keymap-set c-mode-map header-key #'c-or-cpp-switch-to-body-or-header-file) (keymap-set c++-mode-map header-key #'c-or-cpp-switch-to-body-or-header-file) ) (provide 'c-and-cpp)