|
45 | 45 | (defvar cider-browse-ns-mode-map
|
46 | 46 | (let ((map (make-sparse-keymap)))
|
47 | 47 | (set-keymap-parent map cider-popup-buffer-mode-map)
|
48 |
| - (define-key map [return] #'cider-browse-ns-operate-on-point) |
| 48 | + (define-key map "d" #'cider-browse-ns--doc-at-point) |
| 49 | + (define-key map "s" #'cider-browse-ns--find-at-point) |
| 50 | + (define-key map [return] #'cider-browse-ns--doc-at-point) |
49 | 51 | (define-key map "^" #'cider-browse-ns-all)
|
50 | 52 | (define-key map "n" #'next-line)
|
51 | 53 | (define-key map "p" #'previous-line)
|
52 | 54 | map))
|
53 | 55 |
|
54 | 56 | (defvar cider-browse-ns-mouse-map
|
55 | 57 | (let ((map (make-sparse-keymap)))
|
56 |
| - (define-key map [mouse-1] #'cider-browse-ns-handle-mouse) |
| 58 | + (define-key map [mouse-1] #'cider-browse-ns--handle-mouse) |
57 | 59 | map))
|
58 | 60 |
|
59 | 61 | (define-derived-mode cider-browse-ns-mode special-mode "browse-ns"
|
|
66 | 68 | (setq-local truncate-lines t)
|
67 | 69 | (setq-local cider-browse-ns-current-ns nil))
|
68 | 70 |
|
69 |
| -(defun cider-browse-ns-properties (text) |
| 71 | +(defun cider-browse-ns--properties (text) |
70 | 72 | "Decorate TEXT with a clickable keymap and function face."
|
71 | 73 | (propertize text
|
72 | 74 | 'font-lock-face 'font-lock-function-name-face
|
73 | 75 | 'mouse-face 'highlight
|
74 | 76 | 'keymap cider-browse-ns-mouse-map))
|
75 | 77 |
|
76 |
| -(defun cider-browse-ns-list (buffer title items) |
| 78 | +(defun cider-browse-ns--list (buffer title items) |
77 | 79 | "Reset contents of BUFFER. Then display TITLE at the top and ITEMS are indented underneath."
|
78 | 80 | (with-current-buffer buffer
|
79 | 81 | (cider-browse-ns-mode)
|
|
94 | 96 | (interactive (list (completing-read "Browse namespace: " (cider-sync-request:ns-list))))
|
95 | 97 | (with-current-buffer (cider-popup-buffer cider-browse-ns-buffer t)
|
96 | 98 | (let ((vars (cider-sync-request:ns-vars namespace)))
|
97 |
| - (cider-browse-ns-list (current-buffer) |
| 99 | + (cider-browse-ns--list (current-buffer) |
98 | 100 | namespace
|
99 | 101 | (mapcar (lambda (var)
|
100 |
| - (format "/%s" |
101 |
| - (cider-browse-ns-properties var))) |
| 102 | + (format "%s" |
| 103 | + (cider-browse-ns--properties var))) |
102 | 104 | vars))
|
103 | 105 | (setq-local cider-browse-ns-current-ns namespace))))
|
104 | 106 |
|
|
108 | 110 | (interactive)
|
109 | 111 | (with-current-buffer (cider-popup-buffer cider-browse-ns-buffer t)
|
110 | 112 | (let ((names (cider-sync-request:ns-list)))
|
111 |
| - (cider-browse-ns-list (current-buffer) |
112 |
| - "All loaded namespaces" |
113 |
| - (mapcar (lambda (name) |
114 |
| - (cider-browse-ns-properties name)) |
115 |
| - names)) |
| 113 | + (cider-browse-ns--list (current-buffer) |
| 114 | + "All loaded namespaces" |
| 115 | + (mapcar (lambda (name) |
| 116 | + (cider-browse-ns--properties name)) |
| 117 | + names)) |
116 | 118 | (setq-local cider-browse-ns-current-ns nil))))
|
117 | 119 |
|
118 |
| -(defun cider-browse-ns-operate-on-point () |
| 120 | +(defun cider-browse-ns--var-at-point () |
| 121 | + (let ((line (buffer-substring-no-properties (line-beginning-position) (line-end-position)))) |
| 122 | + (when (string-match " +\\(.+\\)" line) |
| 123 | + (format "%s/%s" cider-browse-ns-current-ns (match-string 1 line))))) |
| 124 | + |
| 125 | +(defun cider-browse-ns--doc-at-point () |
119 | 126 | "Expand browser according to thing at current point."
|
120 | 127 | (interactive)
|
121 |
| - (let ((line (buffer-substring-no-properties (line-beginning-position) (line-end-position)))) |
122 |
| - (cond |
123 |
| - ((= 1 (line-number-at-pos)) |
124 |
| - 'nothing-to-do) |
125 |
| - ((string-match " +/\\(.+\\)" line) |
126 |
| - (cider-doc-lookup (format "%s/%s" cider-browse-ns-current-ns (match-string 1 line)))) |
127 |
| - (t |
128 |
| - (cider-browse-ns (replace-regexp-in-string " " "" line)))))) |
129 |
| - |
130 |
| -(defun cider-browse-ns-handle-mouse (event) |
| 128 | + (-when-let (var (cider-browse-ns--var-at-point)) |
| 129 | + ((cider-doc-lookup var)))) |
| 130 | + |
| 131 | +(defun cider-browse-ns--find-at-point () |
| 132 | + (interactive) |
| 133 | + (when-let (var (cider-browse-ns--var-at-point)) |
| 134 | + (cider-find-var current-prefix-arg var))) |
| 135 | + |
| 136 | +(defun cider-browse-ns--handle-mouse (event) |
131 | 137 | "Handle mouse click EVENT."
|
132 | 138 | (interactive "e")
|
133 |
| - (cider-browse-ns-operate-on-point)) |
| 139 | + (cider-browse-ns--doc-at-point)) |
134 | 140 |
|
135 | 141 | (provide 'cider-browse-ns)
|
136 | 142 |
|
|
0 commit comments