summaryrefslogtreecommitdiff
path: root/c-conf.el
diff options
context:
space:
mode:
authorJSDurand <mmemmew@gmail.com>2021-07-19 09:08:38 +0800
committerJSDurand <mmemmew@gmail.com>2021-07-19 09:08:38 +0800
commit7591f5447248a349e9e4048a972560d856084c97 (patch)
tree19726c0d032526307f5ade2c058177d619766a96 /c-conf.el
parent76debf422c0555a4db6d680645148d8eec9ed4be (diff)
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.
Diffstat (limited to 'c-conf.el')
-rw-r--r--c-conf.el35
1 files changed, 35 insertions, 0 deletions
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