summaryrefslogtreecommitdiff
path: root/42header.el
blob: 401fcf2f1f5c3d4bef6e8c79fc38e63d810ce44e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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)