1
- ; ;; cider-doc.el --- Documentation viewer -*- lexical-binding : t -*-
1
+ ; ;; cider-doc.el --- CIDER documentation functionality -*- lexical-binding : t -*-
2
2
3
3
; ; Copyright © 2014 Jeff Valk
4
4
31
31
(require 'dash )
32
32
(require 'easymenu )
33
33
34
- ; ; Variables
34
+
35
+ ; ;; Variables
35
36
36
37
(defgroup cider-doc nil
37
- " Formatting/fontifying documentation viewer ."
38
+ " Documentation for CIDER ."
38
39
:prefix " cider-doc-"
39
40
:group 'cider )
40
41
41
- (defcustom cider-doc-fill-column fill-column
42
+
43
+ (defvar cider-doc-map
44
+ (let (cider-doc-map)
45
+ (define-prefix-command 'cider-doc-map )
46
+ (define-key cider-doc-map (kbd " a" ) 'cider-apropos )
47
+ (define-key cider-doc-map (kbd " C-a" ) 'cider-apropos )
48
+ (define-key cider-doc-map (kbd " A" ) 'cider-apropos-documentation )
49
+ (define-key cider-doc-map (kbd " d" ) 'cider-doc )
50
+ (define-key cider-doc-map (kbd " C-d" ) 'cider-doc )
51
+ (define-key cider-doc-map (kbd " g" ) 'cider-grimoire )
52
+ (define-key cider-doc-map (kbd " C-g" ) 'cider-grimoire )
53
+ (define-key cider-doc-map (kbd " h" ) 'cider-grimoire-web )
54
+ (define-key cider-doc-map (kbd " j" ) 'cider-javadoc )
55
+ (define-key cider-doc-map (kbd " C-j" ) 'cider-javadoc )
56
+ cider-doc-map)
57
+ " CIDER documentation keymap." )
58
+
59
+ (defvar cider-doc-menu
60
+ '(" Documentation ..."
61
+ [" CiderDoc" cider-doc]
62
+ [" JavaDoc in browser" cider-javadoc]
63
+ [" Grimoire" cider-grimoire]
64
+ [" Grimoire in browser" cider-grimoire-web]
65
+ [" Search functions/vars" cider-apropos]
66
+ [" Search documentation" cider-apropos-documentation])
67
+ " CIDER documentation submenu." )
68
+
69
+
70
+
71
+ ; ;; cider-docview-mode
72
+
73
+ (defgroup cider-docview-mode nil
74
+ " Formatting/fontifying documentation viewer."
75
+ :prefix " cider-docview-"
76
+ :group 'cider )
77
+
78
+ (defcustom cider-docview-fill-column fill-column
42
79
" Fill column for docstrings in doc buffer."
43
80
:type 'list
44
- :group 'cider-doc
81
+ :group 'cider-docview-mode
45
82
:package-version '(cider . " 0.7.0" ))
46
83
47
84
85
+
48
86
; ; Faces
49
87
50
- (defface cider-doc -emphasis-face
88
+ (defface cider-docview -emphasis-face
51
89
'((t (:inherit default :underline t )))
52
90
" Face for emphasized text"
53
- :group 'cider-doc
91
+ :group 'cider-docview-mode
54
92
:package-version '(cider . " 0.7.0" ))
55
93
56
- (defface cider-doc -strong-face
94
+ (defface cider-docview -strong-face
57
95
'((t (:inherit default :underline t :weight bold )))
58
96
" Face for strongly emphasized text"
59
- :group 'cider-doc
97
+ :group 'cider-docview-mode
60
98
:package-version '(cider . " 0.7.0" ))
61
99
62
- (defface cider-doc -literal-face
100
+ (defface cider-docview -literal-face
63
101
'((t (:inherit font-lock-string-face )))
64
102
" Face for literal text"
65
- :group 'cider-doc
103
+ :group 'cider-docview-mode
66
104
:package-version '(cider . " 0.7.0" ))
67
105
68
- (defface cider-doc -table-border-face
106
+ (defface cider-docview -table-border-face
69
107
'((t (:inherit shadow )))
70
108
" Face for table borders"
71
- :group 'cider-doc
109
+ :group 'cider-docview-mode
72
110
:package-version '(cider . " 0.7.0" ))
73
111
74
-
112
+
75
113
; ; Colors & Theme Support
76
114
77
- (defvar cider-doc -code-background-color
115
+ (defvar cider-docview -code-background-color
78
116
(cider-scale-background-color)
79
117
" Background color for code blocks." )
80
118
81
- (defadvice enable-theme (after cider-doc-adapt-to-theme activate)
82
- " When theme is changed, update `cider-doc-code-background-color' ."
83
- (setq cider-doc-code-background-color (cider-scale-background-color)))
84
-
119
+ (defadvice enable-theme (after cider-docview-adapt-to-theme activate)
120
+ " When theme is changed, update `cider-docview-code-background-color' ."
121
+ (setq cider-docview-code-background-color (cider-scale-background-color)))
85
122
123
+
86
124
; ; Mode & key bindings
87
125
88
- (defvar cider-doc -mode-map
126
+ (defvar cider-docview -mode-map
89
127
(let ((map (make-sparse-keymap )))
90
128
(define-key map " q" 'cider-popup-buffer-quit-function )
91
- (define-key map " j" 'cider-doc -javadoc )
129
+ (define-key map " j" 'cider-docview -javadoc )
92
130
(define-key map (kbd " <backtab>" ) 'backward-button )
93
131
(define-key map (kbd " TAB" ) 'forward-button )
94
- (easy-menu-define cider-doc-mode-menu map
132
+
133
+ ; ; VS[04-08-2014]: proposed keybindings for the docview mode
134
+ ; ; (define-key map (kbd "<backtab>") 'backward-button)
135
+ ; ; (define-key map (kbd "TAB") 'forward-button)
136
+ ; ; (define-key map (kbd "k") 'kill-this-buffer)
137
+
138
+ ; ; (define-key map (kbd "C-c C-d") 'cider-doc-map)
139
+ ; ; (define-key map (kbd "a") 'cider-apropos)
140
+ ; ; (define-key map (kbd "A") 'cider-apropos-documentation)
141
+ ; ; (define-key map (kbd "d") 'cider-doc)
142
+ ; ; (define-key map (kbd "g") 'cider-grimoire)
143
+ ; ; (define-key map (kbd "h") 'cider-grimoire-web)
144
+ ; ; (define-key map (kbd "j") 'cider-javadoc)
145
+ ; ; (define-key map (kbd "J") 'cider-doc-javadoc)
146
+
147
+ ; ; (define-key map (kbd "M-.") 'cider-jump-to-var)
148
+ ; ; (define-key map (kbd "M-,") 'cider-jump-back)
149
+ ; ; (define-key map (kbd "C-c M-.") 'cider-jump-to-resource)
150
+ ; ; (define-key map (kbd "i") 'cider-inspect)
151
+ ; ; (define-key map (kbd "C-c M-i") 'cider-inspect)
152
+ ; ; (define-key map (kbd "C-c C-z") 'cider-switch-to-repl-buffer)
153
+
154
+ (easy-menu-define cider-docview-mode-menu map
95
155
" Menu for CIDER's doc mode"
96
- '(" Doc"
97
- [" Go to Javadoc" cider-doc-javadoc]
98
- [" Quit" cider-popup-buffer-quit-function]))
156
+ `(" Doc"
157
+ ; ; ,cider-doc-menu
158
+ ; ; "--"
159
+ ; ; ["Jump to source" cider-jump-to-var]
160
+ ; ; ["Jump to resource" cider-jump-to-resource]
161
+ ; ; ["Jump back" cider-jump-back]
162
+ ; ; "--"
163
+ ; ; ["Switch to REPL" cider-switch-to-repl-buffer]
164
+ ; ; "--"
165
+ ; ; ["Kill" kill-this-buffer]
166
+ ; ; ["Quit" quit-window]
167
+ [" JavaDoc in browser" cider-docview-javadoc]
168
+ [" Quit" cider-popup-buffer-quit-function]
169
+ ))
99
170
map))
100
171
101
- (define-derived-mode cider-doc -mode fundamental -mode " Doc"
172
+ (define-derived-mode cider-docview -mode special -mode " Doc"
102
173
" Major mode for displaying CIDER documentation
103
174
104
- \\ {cider-doc -mode-map}"
175
+ \\ {cider-docview -mode-map}"
105
176
(setq buffer-read-only t )
106
177
(setq-local truncate-lines t )
107
178
(setq-local electric-indent-chars nil )
108
- (setq-local cider-doc-symbol nil )
109
- (setq-local cider-doc-javadoc-url nil ))
110
-
179
+ (setq-local cider-docview-symbol nil )
180
+ (setq-local cider-docview-javadoc-url nil ))
111
181
112
- ; ; Interactive functions
182
+
183
+ ; ;; Interactive functions
113
184
114
- (defun cider-doc -javadoc ()
185
+ (defun cider-docview -javadoc ()
115
186
" Open the Javadoc for the current class, if available."
116
187
(interactive )
117
- (if cider-doc -javadoc-url
118
- (browse-url cider-doc -javadoc-url)
119
- (message " No Javadoc available for %s " cider-doc -symbol)))
188
+ (if cider-docview -javadoc-url
189
+ (browse-url cider-docview -javadoc-url)
190
+ (message " No Javadoc available for %s " cider-docview -symbol)))
120
191
192
+
193
+ ; ;; Font Lock and Formatting
121
194
122
- ; ; Font Lock and Formatting
123
-
124
- (defun cider-doc-fontify-code-blocks (buffer mode )
195
+ (defun cider-docview-fontify-code-blocks (buffer mode )
125
196
" Font lock BUFFER code blocks using MODE and remove markdown characters.
126
197
This processes the triple backtick GFM markdown extension. An overlay is used
127
198
to shade the background. Blocks are marked to be ignored by other fonification
@@ -131,14 +202,14 @@ and line wrap."
131
202
(while (search-forward-regexp " ```\n " nil t )
132
203
(replace-match " " )
133
204
(let ((beg (point ))
134
- (bg `(:background , cider-doc -code-background-color )))
205
+ (bg `(:background , cider-docview -code-background-color )))
135
206
(when (search-forward-regexp " ```\n " nil t )
136
207
(replace-match " " )
137
208
(cider-font-lock-region-as mode beg (point ))
138
209
(overlay-put (make-overlay beg (point )) 'face bg)
139
210
(put-text-property beg (point ) 'block 'code )))))))
140
211
141
- (defun cider-doc -fontify-literals (buffer )
212
+ (defun cider-docview -fontify-literals (buffer )
142
213
" Font lock BUFFER literal text and remove backtick markdown characters.
143
214
Preformatted code text blocks are ignored."
144
215
(with-current-buffer buffer
@@ -151,9 +222,9 @@ Preformatted code text blocks are ignored."
151
222
(let ((beg (point )))
152
223
(when (search-forward " `" (line-end-position ) t )
153
224
(replace-match " " )
154
- (put-text-property beg (point ) 'face 'cider-doc -literal-face )))))))))
225
+ (put-text-property beg (point ) 'face 'cider-docview -literal-face )))))))))
155
226
156
- (defun cider-doc -fontify-emphasis (buffer )
227
+ (defun cider-docview -fontify-emphasis (buffer )
157
228
" Font lock BUFFER emphasized text and remove markdown characters.
158
229
One '*' represents emphasis, multiple '**'s represent strong emphasis.
159
230
Preformatted code text blocks are ignored."
@@ -166,19 +237,19 @@ Preformatted code text blocks are ignored."
166
237
(replace-match " \\ 2" )
167
238
(let ((beg (1- (point )))
168
239
(face (if (> (length (match-string 1 )) 1 )
169
- 'cider-doc -strong-face
170
- 'cider-doc -emphasis-face )))
240
+ 'cider-docview -strong-face
241
+ 'cider-docview -emphasis-face )))
171
242
(when (search-forward-regexp " \\ (\\ w\\ )\\ *+" (line-end-position ) t )
172
243
(replace-match " \\ 1" )
173
244
(put-text-property beg (point ) 'face face)))))))))
174
245
175
- (defun cider-doc -format-tables (buffer )
246
+ (defun cider-docview -format-tables (buffer )
176
247
" Align BUFFER tables and dim borders.
177
248
This processes the GFM table markdown extension using `org-table' .
178
249
Tables are marked to be ignored by line wrap."
179
250
(with-current-buffer buffer
180
251
(save-excursion
181
- (let ((border 'cider-doc -table-border-face ))
252
+ (let ((border 'cider-docview -table-border-face ))
182
253
(org-table-map-tables
183
254
(lambda ()
184
255
(org-table-align )
@@ -187,7 +258,7 @@ Tables are marked to be ignored by line wrap."
187
258
(put-text-property (match-beginning 0 ) (match-end 0 ) 'face border ))
188
259
(put-text-property (org-table-begin ) (org-table-end ) 'block 'table )))))))
189
260
190
- (defun cider-doc -wrap-text (buffer )
261
+ (defun cider-docview -wrap-text (buffer )
191
262
" For text in BUFFER not propertized as 'block', apply line wrap."
192
263
(with-current-buffer buffer
193
264
(save-excursion
@@ -196,23 +267,23 @@ Tables are marked to be ignored by line wrap."
196
267
(fill-region (point ) (line-end-position )))
197
268
(forward-line )))))
198
269
270
+
271
+ ; ;; Rendering
199
272
200
- ; ; Rendering
201
-
202
- (defun cider-doc-render-java-doc (buffer text )
273
+ (defun cider-docview-render-java-doc (buffer text )
203
274
" Emit into BUFFER formatted doc TEXT for a Java class or member."
204
275
(with-current-buffer buffer
205
276
(let ((beg (point )))
206
277
(insert text)
207
278
(save-excursion
208
279
(goto-char beg)
209
- (cider-doc -fontify-code-blocks buffer 'java-mode ) ; left alone hereafter
210
- (cider-doc -fontify-literals buffer)
211
- (cider-doc -fontify-emphasis buffer)
212
- (cider-doc -format-tables buffer) ; may contain literals, emphasis
213
- (cider-doc -wrap-text buffer))))) ; ignores code, table blocks
280
+ (cider-docview -fontify-code-blocks buffer 'java-mode ) ; left alone hereafter
281
+ (cider-docview -fontify-literals buffer)
282
+ (cider-docview -fontify-emphasis buffer)
283
+ (cider-docview -format-tables buffer) ; may contain literals, emphasis
284
+ (cider-docview -wrap-text buffer))))) ; ignores code, table blocks
214
285
215
- (defun cider-doc -render-info (buffer info )
286
+ (defun cider-docview -render-info (buffer info )
216
287
" Emit into BUFFER formatted INFO for the Clojure or Java symbol."
217
288
(let* ((ns (cadr (assoc " ns" info)))
218
289
(name (cadr (assoc " name" info)))
@@ -256,7 +327,7 @@ Tables are marked to be ignored by line wrap."
256
327
(emit (concat " Deprecated in " depr) 'font-lock-comment-face ))
257
328
(when doc
258
329
(if class
259
- (cider-doc -render-java-doc (current-buffer ) doc)
330
+ (cider-docview -render-java-doc (current-buffer ) doc)
260
331
(emit (concat " " doc))))
261
332
(when url
262
333
(newline )
@@ -284,22 +355,23 @@ Tables are marked to be ignored by line wrap."
284
355
(put-text-property beg end (car x) (cadr x)))))
285
356
(current-buffer ))))
286
357
287
- (defun cider-doc -render (buffer symbol info )
358
+ (defun cider-docview -render (buffer symbol info )
288
359
" Emit into BUFFER formatted documentation for SYMBOL's INFO."
289
360
(with-current-buffer buffer
290
361
(let ((javadoc (cadr (assoc " javadoc" info)))
291
362
(inhibit-read-only t ))
292
- (cider-doc -mode)
363
+ (cider-docview -mode)
293
364
294
- (setq-local cider-doc -symbol symbol)
295
- (setq-local cider-doc -javadoc-url javadoc)
365
+ (setq-local cider-docview -symbol symbol)
366
+ (setq-local cider-docview -javadoc-url javadoc)
296
367
297
368
(remove-overlays )
298
- (cider-doc -render-info buffer info)
369
+ (cider-docview -render-info buffer info)
299
370
300
371
(goto-char (point-min ))
301
372
(current-buffer ))))
302
373
374
+
303
375
(provide 'cider-doc )
304
376
305
377
; ;; cider-doc.el ends here
0 commit comments