Skip to content

Instantly share code, notes, and snippets.

@lalawue
Last active January 2, 2016 12:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lalawue/8303105 to your computer and use it in GitHub Desktop.
Save lalawue/8303105 to your computer and use it in GitHub Desktop.
jump between C/C++/ObjC source and header file in Emacs
;; jump between source and header file
(defun c-base-mode-in-header-file ()
(let* ((filename (buffer-file-name))
(extension (car (last (split-string filename "\\.")))))
(string= "h" extension)))
(defun c-base-mode-file-jump-to-extension (extension)
(let* ((filename (buffer-file-name))
(file-components (append (butlast (split-string filename
"\\."))
(list extension)))
(filepath (mapconcat 'identity file-components ".")))
(if (file-readable-p filepath)
(find-file filepath)
nil)))
;;; Assumes that Header and Source file are in same directory
(defun c-base-mode-jump-between-header-source ()
(interactive)
(if (c-base-mode-in-header-file)
(or
(c-base-mode-file-jump-to-extension "m")
(c-base-mode-file-jump-to-extension "mm")
(c-base-mode-file-jump-to-extension "c")
(c-base-mode-file-jump-to-extension "cc")
(c-base-mode-file-jump-to-extension "cpp"))
(c-base-mode-file-jump-to-extension "h")))
(add-hook
'c-mode-common-hook
(lambda ()
(define-key c-mode-base-map (kbd "M-[") 'c-base-mode-jump-between-header-source)
(define-key c-mode-base-map (kbd "M-]") 'c-base-mode-jump-between-header-source))
t)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment