;;; -*- 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")) ) (path (buffer-file-name)) (name (buffer-name)) ) (let*((file-ext (file-name-extension path)) (is-body (string= file-ext file-suf)) (file-name (file-name-sans-extension 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) ))) (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) (provide 'c-and-cpp)