-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path+markdown.el
114 lines (107 loc) · 3.69 KB
/
+markdown.el
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
;;; +markdown.el -*- lexical-binding: t; -*-
;; ChatGPT likes to output Markdown. I like to think in Org Mode.
;; (defun my-org-convert-region-from-markdown (beg end)
;; (interactive "r")
;; (shell-command-on-region beg end "pandoc -t org" nil t))
;;;###autoload
(defun yank-as-org ()
"Convert region of markdown text to org while yanking."
(interactive)
(let* ((_ (unless (executable-find "pandoc")
(user-error "pandoc not found")))
(beg (if evil-mode
(marker-position evil-visual-beginning)
(region-beginning)))
(end (if evil-mode
(marker-position evil-visual-end)
(region-end)))
(region-content (buffer-substring-no-properties beg end))
(_ (print region-content))
(converted-content
(with-temp-buffer
(insert region-content)
(shell-command-on-region
(point-min)
(point-max)
"pandoc --wrap=none -f markdown -t org" nil t)
(buffer-string))))
(kill-new converted-content)
(message "yanked Markdown as Org")))
;;;###autoload
(defun yank-as-markdown ()
"Convert region of Org-mode to markdown while yanking."
(interactive)
(let* ((_ (unless (executable-find "pandoc")
(user-error "pandoc not found")))
(beg (if evil-mode
(marker-position evil-visual-beginning)
(region-beginning)))
(end (if evil-mode
(marker-position evil-visual-end)
(region-end)))
(region-content (buffer-substring-no-properties beg end))
(_ (print region-content))
(converted-content
(with-temp-buffer
(insert region-content)
(shell-command-on-region
(point-min)
(point-max)
"pandoc --wrap=none -f org -t gfm" nil t)
(buffer-string))))
(kill-new converted-content)
(message "yanked Org as Markdown")))
;;;###autoload
(defun maybe-yank-and-convert-a (orig-fun beg end &optional type register yank-handler)
"Advice function to convert marked region to org before yanking."
(let ((yank-fn (cond
((derived-mode-p 'markdown-mode)
#'yank-as-org)
((derived-mode-p 'org-mode)
#'yank-as-markdown))))
(if (and current-prefix-arg (use-region-p)
yank-fn)
(funcall yank-fn)
(funcall
orig-fun
beg end type register
yank-handler))))
;;;###autoload
(defun markdown-wrap-collapsible ()
"Wrap region in a collapsible section."
(interactive)
(when (region-active-p)
(let* ((beg (region-beginning))
(end (region-end))
(content (buffer-substring beg end)))
(delete-region beg end)
(deactivate-mark)
(insert
(format "<details>\n <summary></summary>\n%s\n</details>" content))
(search-backward "<summary>")
(forward-char 9)
(when evil-mode
(evil-insert-state)))))
;;;###autoload
(defun markdown-wrap-code-generic ()
"Wrap region in a collapsible section."
(interactive)
(when (region-active-p)
(let* ((beg (region-beginning))
(end (region-end))
(content (buffer-substring beg end)))
(delete-region beg end)
(deactivate-mark)
(insert
(format "```\n%s\n```\n" content))
(search-backward "```" nil :noerror 2)
(forward-char 3)
(when evil-mode
(evil-insert-state)))))
;;;###autoload
(defun markdown-wrap-code-clojure ()
"Wrap region in a collapsible section."
(interactive)
(funcall 'markdown-wrap-code-generic)
(insert "clojure")
(search-forward "```" nil :noerror))