1- ; ;; cider-doc.el --- Documentation viewer -*- lexical-binding : t -*-
1+ ; ;; cider-doc.el --- CIDER documentation functionality -*- lexical-binding : t -*-
22
33; ; Copyright © 2014 Jeff Valk
44
3131(require 'dash )
3232(require 'easymenu )
3333
34- ; ; Variables
34+
35+ ; ;; Variables
3536
3637(defgroup cider-doc nil
37- " Formatting/fontifying documentation viewer ."
38+ " Documentation for CIDER ."
3839 :prefix " cider-doc-"
3940 :group 'cider )
4041
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
4279 " Fill column for docstrings in doc buffer."
4380 :type 'list
44- :group 'cider-doc
81+ :group 'cider-docview-mode
4582 :package-version '(cider . " 0.7.0" ))
4683
4784
85+
4886; ; Faces
4987
50- (defface cider-doc -emphasis-face
88+ (defface cider-docview -emphasis-face
5189 '((t (:inherit default :underline t )))
5290 " Face for emphasized text"
53- :group 'cider-doc
91+ :group 'cider-docview-mode
5492 :package-version '(cider . " 0.7.0" ))
5593
56- (defface cider-doc -strong-face
94+ (defface cider-docview -strong-face
5795 '((t (:inherit default :underline t :weight bold )))
5896 " Face for strongly emphasized text"
59- :group 'cider-doc
97+ :group 'cider-docview-mode
6098 :package-version '(cider . " 0.7.0" ))
6199
62- (defface cider-doc -literal-face
100+ (defface cider-docview -literal-face
63101 '((t (:inherit font-lock-string-face )))
64102 " Face for literal text"
65- :group 'cider-doc
103+ :group 'cider-docview-mode
66104 :package-version '(cider . " 0.7.0" ))
67105
68- (defface cider-doc -table-border-face
106+ (defface cider-docview -table-border-face
69107 '((t (:inherit shadow )))
70108 " Face for table borders"
71- :group 'cider-doc
109+ :group 'cider-docview-mode
72110 :package-version '(cider . " 0.7.0" ))
73111
74-
112+
75113; ; Colors & Theme Support
76114
77- (defvar cider-doc -code-background-color
115+ (defvar cider-docview -code-background-color
78116 (cider-scale-background-color)
79117 " Background color for code blocks." )
80118
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)))
85122
123+
86124; ; Mode & key bindings
87125
88- (defvar cider-doc -mode-map
126+ (defvar cider-docview -mode-map
89127 (let ((map (make-sparse-keymap )))
90128 (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 )
92130 (define-key map (kbd " <backtab>" ) 'backward-button )
93131 (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
95155 " 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+ ))
99170 map))
100171
101- (define-derived-mode cider-doc -mode fundamental -mode " Doc"
172+ (define-derived-mode cider-docview -mode special -mode " Doc"
102173 " Major mode for displaying CIDER documentation
103174
104- \\ {cider-doc -mode-map}"
175+ \\ {cider-docview -mode-map}"
105176 (setq buffer-read-only t )
106177 (setq-local truncate-lines t )
107178 (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 ))
111181
112- ; ; Interactive functions
182+
183+ ; ;; Interactive functions
113184
114- (defun cider-doc -javadoc ()
185+ (defun cider-docview -javadoc ()
115186 " Open the Javadoc for the current class, if available."
116187 (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)))
120191
192+
193+ ; ;; Font Lock and Formatting
121194
122- ; ; Font Lock and Formatting
123-
124- (defun cider-doc-fontify-code-blocks (buffer mode )
195+ (defun cider-docview-fontify-code-blocks (buffer mode )
125196 " Font lock BUFFER code blocks using MODE and remove markdown characters.
126197This processes the triple backtick GFM markdown extension. An overlay is used
127198to shade the background. Blocks are marked to be ignored by other fonification
@@ -131,14 +202,14 @@ and line wrap."
131202 (while (search-forward-regexp " ```\n " nil t )
132203 (replace-match " " )
133204 (let ((beg (point ))
134- (bg `(:background , cider-doc -code-background-color )))
205+ (bg `(:background , cider-docview -code-background-color )))
135206 (when (search-forward-regexp " ```\n " nil t )
136207 (replace-match " " )
137208 (cider-font-lock-region-as mode beg (point ))
138209 (overlay-put (make-overlay beg (point )) 'face bg)
139210 (put-text-property beg (point ) 'block 'code )))))))
140211
141- (defun cider-doc -fontify-literals (buffer )
212+ (defun cider-docview -fontify-literals (buffer )
142213 " Font lock BUFFER literal text and remove backtick markdown characters.
143214Preformatted code text blocks are ignored."
144215 (with-current-buffer buffer
@@ -151,9 +222,9 @@ Preformatted code text blocks are ignored."
151222 (let ((beg (point )))
152223 (when (search-forward " `" (line-end-position ) t )
153224 (replace-match " " )
154- (put-text-property beg (point ) 'face 'cider-doc -literal-face )))))))))
225+ (put-text-property beg (point ) 'face 'cider-docview -literal-face )))))))))
155226
156- (defun cider-doc -fontify-emphasis (buffer )
227+ (defun cider-docview -fontify-emphasis (buffer )
157228 " Font lock BUFFER emphasized text and remove markdown characters.
158229One '*' represents emphasis, multiple '**'s represent strong emphasis.
159230Preformatted code text blocks are ignored."
@@ -166,19 +237,19 @@ Preformatted code text blocks are ignored."
166237 (replace-match " \\ 2" )
167238 (let ((beg (1- (point )))
168239 (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 )))
171242 (when (search-forward-regexp " \\ (\\ w\\ )\\ *+" (line-end-position ) t )
172243 (replace-match " \\ 1" )
173244 (put-text-property beg (point ) 'face face)))))))))
174245
175- (defun cider-doc -format-tables (buffer )
246+ (defun cider-docview -format-tables (buffer )
176247 " Align BUFFER tables and dim borders.
177248This processes the GFM table markdown extension using `org-table' .
178249Tables are marked to be ignored by line wrap."
179250 (with-current-buffer buffer
180251 (save-excursion
181- (let ((border 'cider-doc -table-border-face ))
252+ (let ((border 'cider-docview -table-border-face ))
182253 (org-table-map-tables
183254 (lambda ()
184255 (org-table-align )
@@ -187,7 +258,7 @@ Tables are marked to be ignored by line wrap."
187258 (put-text-property (match-beginning 0 ) (match-end 0 ) 'face border ))
188259 (put-text-property (org-table-begin ) (org-table-end ) 'block 'table )))))))
189260
190- (defun cider-doc -wrap-text (buffer )
261+ (defun cider-docview -wrap-text (buffer )
191262 " For text in BUFFER not propertized as 'block', apply line wrap."
192263 (with-current-buffer buffer
193264 (save-excursion
@@ -196,23 +267,23 @@ Tables are marked to be ignored by line wrap."
196267 (fill-region (point ) (line-end-position )))
197268 (forward-line )))))
198269
270+
271+ ; ;; Rendering
199272
200- ; ; Rendering
201-
202- (defun cider-doc-render-java-doc (buffer text )
273+ (defun cider-docview-render-java-doc (buffer text )
203274 " Emit into BUFFER formatted doc TEXT for a Java class or member."
204275 (with-current-buffer buffer
205276 (let ((beg (point )))
206277 (insert text)
207278 (save-excursion
208279 (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
214285
215- (defun cider-doc -render-info (buffer info )
286+ (defun cider-docview -render-info (buffer info )
216287 " Emit into BUFFER formatted INFO for the Clojure or Java symbol."
217288 (let* ((ns (cadr (assoc " ns" info)))
218289 (name (cadr (assoc " name" info)))
@@ -256,7 +327,7 @@ Tables are marked to be ignored by line wrap."
256327 (emit (concat " Deprecated in " depr) 'font-lock-comment-face ))
257328 (when doc
258329 (if class
259- (cider-doc -render-java-doc (current-buffer ) doc)
330+ (cider-docview -render-java-doc (current-buffer ) doc)
260331 (emit (concat " " doc))))
261332 (when url
262333 (newline )
@@ -284,22 +355,23 @@ Tables are marked to be ignored by line wrap."
284355 (put-text-property beg end (car x) (cadr x)))))
285356 (current-buffer ))))
286357
287- (defun cider-doc -render (buffer symbol info )
358+ (defun cider-docview -render (buffer symbol info )
288359 " Emit into BUFFER formatted documentation for SYMBOL's INFO."
289360 (with-current-buffer buffer
290361 (let ((javadoc (cadr (assoc " javadoc" info)))
291362 (inhibit-read-only t ))
292- (cider-doc -mode)
363+ (cider-docview -mode)
293364
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)
296367
297368 (remove-overlays )
298- (cider-doc -render-info buffer info)
369+ (cider-docview -render-info buffer info)
299370
300371 (goto-char (point-min ))
301372 (current-buffer ))))
302373
374+
303375(provide 'cider-doc )
304376
305377; ;; cider-doc.el ends here
0 commit comments