From 7591f5447248a349e9e4048a972560d856084c97 Mon Sep 17 00:00:00 2001 From: JSDurand Date: Mon, 19 Jul 2021 09:08:38 +0800 Subject: new: generate-pragma in c-mode * c-conf.el (generate-pragma): This generates a pragma for header files, and an include statement for C files. --- c-conf.el | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/c-conf.el b/c-conf.el index 2ba0286..e98ddbd 100644 --- a/c-conf.el +++ b/c-conf.el @@ -29,6 +29,41 @@ ;; We can achieve the functionality of the original binding ;; comment-region by comment-dwim bound to "M-;". (define-key c-mode-map (vector 3 3) #'compile) +;; This proves to be too convenient not to bind. +(define-key c-mode-map (vector 'S-tab) #'ff-find-other-file) + +;; generate pragmas automatically. +(define-key c-mode-map (vector ?รน) #'c-generate-pragma) + +;;;###autoload +(defun c-generate-pragma () + "Generate default pragmas for a C header file. +If invoked on a C file, include the corresponding header file." + (interactive) + (cond + ((not (derived-mode-p 'c-mode 'c++-mode))) + ((string-match-p "hp*$"(buffer-name)) + (insert "#ifndef ") + (insert (replace-regexp-in-string + "\\." "_" + (upcase + (file-name-nondirectory + (buffer-file-name))))) + (newline) + (insert "#define ") + (insert (replace-regexp-in-string + "\\." "_" + (upcase + (file-name-nondirectory + (buffer-file-name))))) + (newline 2) + (insert "#endif") + (forward-line -1)) + (t + (insert (format "#include \"%s\"" + (replace-regexp-in-string + "c\\(p*\\)$" "h\\1" (buffer-name)))) + (newline)))) (provide 'c-conf) ;;; c-conf.el ends here -- cgit v1.2.3-18-g5258