forked from edani/ensime-emacs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathensime-stacktrace.el
57 lines (48 loc) · 1.98 KB
/
ensime-stacktrace.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
;;; ensime-stacktrace.el - Paste buffer for stack traces
(defconst ensime-stacktrace-buffer-name-base "*ensime-stacktrace*")
(defvar ensime-stacktrace-buffer-map
(let ((map (make-sparse-keymap)))
(define-key map (kbd "C-c C-c") 'ensime-stacktrace-highlight)
(define-key map (kbd "C-c C-q") 'quit-window)
map)
"Keymap for `ensime-stacktrace-buffer-mode'.")
(define-minor-mode ensime-stacktrace-buffer-mode
"Mode for highlighting stack traces"
nil
nil
ensime-stacktrace-buffer-map)
(defun ensime-stacktrace-build-buffer-name ()
"Return the name of the project-specific stacktrace buffer."
(format "%s<%s>"
ensime-stacktrace-buffer-name-base
(plist-get (ensime-config) :project-name)))
(defun ensime-stacktrace-switch ()
"Switch to buffer containing the stack trace parser"
(interactive)
(let ((stacktrace-buf-name (ensime-stacktrace-build-buffer-name)))
(unless (equal stacktrace-buf-name (buffer-name))
(ensime-with-conn-interactive
conn
(let ((buf (get-buffer-create stacktrace-buf-name)))
(switch-to-buffer-other-window buf)
(setq ensime-buffer-connection conn)
(ensime-stacktrace-buffer-mode 1)
(font-lock-mode 1)
(when (= (buffer-size buf) 0)
(insert ";; Stack trace buffer\n")
(insert ";; Paste a stack trace below and press `C-c C-c' to create links to source code.\n")
(insert ";; Press `C-c C-q' to leave this buffer\n")
(insert "\n"))
(local-set-key (kbd "C-c C-c") 'ensime-stacktrace-highlight)
(local-set-key (kbd "C-c C-q") 'quit-window)
(current-buffer))))))
(defun ensime-stacktrace-highlight ()
(interactive)
"Parse the current buffer and look for lines that looks for a stack trace.
Create links to the source code."
(set-text-properties (point-min) (point-max) nil)
(ensime-inf-highlight-stack-traces (point-min) (point-max)))
(provide 'ensime-stacktrace)
;; Local Variables:
;; no-byte-compile: t
;; End: