]> git.dkaiser.de - config/emacs.git/commitdiff
Add 42 header
authorDominik Kaiser <dkaisr@proton.me>
Mon, 10 Feb 2025 09:21:25 +0000 (10:21 +0100)
committerDominik Kaiser <dkaisr@proton.me>
Mon, 10 Feb 2025 09:21:25 +0000 (10:21 +0100)
42header.el [new file with mode: 0644]
README.org
init.el

diff --git a/42header.el b/42header.el
new file mode 100644 (file)
index 0000000..401fcf2
--- /dev/null
@@ -0,0 +1,65 @@
+(defconst 42name "dkaiser")
+(defconst 42email "dkaiser@student.42heilbronn.de")
+
+(defun trim-or-fill-string (string length)
+  (if (> (length string) length)
+      (substring string 0 length)
+    (concat string (make-string (- length (length string)) ?\s))))
+
+(defun check-42header ()
+  (save-excursion
+   (goto-char (point-min))
+  (equal (thing-at-point 'line t)
+        (concat "/* " (make-string 74 ?*) " */\n"))))
+
+(defun add-42header ()
+  (save-excursion
+    (goto-char (point-min))
+    (insert "/* " (make-string 74 ?*) " */\n")
+    (insert "/* " (make-string 74 ? ) " */\n")
+    (insert "/*                                                        :::      ::::::::   */\n")
+    (insert "/*   "
+           (trim-or-fill-string (file-name-nondirectory buffer-file-name) 43)
+           "        :+:      :+:    :+:   */\n")
+    (insert "/*                                                    +:+ +:+         +:+     */\n")
+    (insert "/*   By: "
+           (trim-or-fill-string (concat 42name " <" 42email ">") 39)
+           "    +#+  +:+       +#+        */\n")
+    (insert "/*                                                +#+#+#+#+#+   +#+           */\n")
+    (insert "/*   Created: "
+           (format-time-string "%Y/%m/%d %H:%M:%S" (nth 5 (file-attributes buffer-file-name)))
+           " by "
+           (trim-or-fill-string 42name 11)
+           "       #+#    #+#             */\n")
+    (insert "/*   Updated: "
+           (format-time-string "%Y/%m/%d %H:%M:%S")
+           " by "
+           (trim-or-fill-string 42name 11)
+           "      ###   ########.fr       */\n")
+    (insert "/* " (make-string 74 ? ) " */\n")
+    (insert "/* " (make-string 74 ?*) " */\n\n")))
+
+(defun update-42header ()
+  (save-excursion
+    (goto-char (point-min))
+    (forward-line 8)
+    (kill-line)
+    (insert "/*   Updated: "
+           (format-time-string "%Y/%m/%d %H:%M:%S")
+           " by "
+           (trim-or-fill-string 42name 11)
+           "      ###   ########.fr       */")))
+
+(defun add-or-update-42header ()
+  (interactive)
+  (save-excursion
+  (if (check-42header)
+      (funcall #'update-42header)
+    (funcall #'add-42header))))
+
+(defun update-42header-if-existing ()
+  (if (check-42header)
+      (funcall #'update-42header)))
+
+(add-hook 'before-save-hook #'update-42header-if-existing)
+(global-set-key (kbd "C-c h") 'add-or-update-42header)
index f88135a56a369aaa835b21b24080dca702292aaa..a7929437b0ce707a0f3a099dcec091fea7f6f046 100644 (file)
@@ -107,3 +107,8 @@ These settings ensure that block highlights aren't visible when collapsed.
 #+begin_src elisp
   (setq org-startup-indented t)
 #+end_src
+* 42
+** Header
+#+begin_src elisp
+  (load "~/.config/emacs/42header.el")
+#+end_src
diff --git a/init.el b/init.el
index cbd3b7ea890c0758901653ae625a1c60b0a4f1d2..a50b37a4d1edd85dfb10630f7ff507c3b633d7ba 100644 (file)
--- a/init.el
+++ b/init.el
@@ -65,3 +65,5 @@
  '(org-block-end-line ((t (:inherit default :background nil)))))
 
 (setq org-startup-indented t)
+
+(load "~/.config/emacs/42header.el")