blob: 1fe96961b5e9d4a7a7b53ba710bda12777e61811 (
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
;;; text-conf.el --- My configurations about plain text files. -*- lexical-binding: t; -*-
(require 'text-mode)
;;;###autoload
(defvar insert-section-heading-history nil
"The history of inserted section heading strings")
;;;###autoload
(defun insert-section-heading (custom-heading)
"Insert a heading line below.
If CUSTOM-HEADING is non-nil, then use a custom heading.
The user can input any string as a basic constituent of a
heading. The inputed string will be repeated (floor N M) times,
where N is the length of the current line and M is the lenght of
the input string. After this repeat the first (remainder N M)
characters of the input string will be inserted as well to cover
exactly the current ilne."
(interactive "P")
(let* ((current-length (- (point-at-eol)
(point-at-bol)))
(heading (cond
((null custom-heading) "-")
(t (read-string "Enter a custom heading: "
nil insert-section-heading-history
"-" t))))
(floor-length (floor current-length (length heading)))
(remainder (% current-length (length heading)))
(remainder-string (substring heading 0 remainder))
(index 0))
(save-excursion
(goto-char (line-end-position))
(newline)
(while (< index floor-length)
(message "index: %s" index)
(message "floor: %s" floor-length)
(insert heading)
(setq index (1+ index)))
(insert remainder-string))))
;;;###autoload
(defvar make-block-history nil
"The history of block quote descriptions.")
;;;###autoload
(defun make-block (&optional description)
"Surround the current line or the region in a block.
If DESCRIPTION is non-nil, ask for a description and put the
DESCRIPTION above the block."
(interactive "P")
(let* ((beg (cond
((use-region-p)
(region-beginning))
((line-beginning-position))))
(end (cond
((use-region-p)
(region-end))
((line-end-position))))
(end-marker (set-marker (make-marker) (1+ end)))
(fill-line (make-string fill-column ?=))
(header (cond
(description
(list fill-line
"\n"
(center-string-in-width
(read-string "Description of the block: "
nil make-block-history nil t)
fill-column)
"\n"
fill-line))
(t (list fill-line)))))
(save-excursion
(goto-char beg)
(while (<= (point) (1- (marker-position end-marker)))
(center-line)
(forward-line 1))
(goto-char beg)
(mapc #'insert header)
(newline)
(goto-char (1- (marker-position end-marker)))
(set-marker end-marker nil)
(newline)
(insert fill-line))))
(provide 'text-conf)
;;; text-conf.el ends here.
|