@@ -796,27 +796,44 @@ the NAME. The whole group is prefixed by string INDENT."
796
796
797
797
(declare-function cider-inspector-inspect-last-exception " cider-inspector" )
798
798
799
- (defun cider-stacktrace--inspect-class (event )
799
+ (defun cider-stacktrace--inspect-mouse (event &optional ex-data )
800
800
" Mouse handler for EVENT."
801
801
(interactive " e" )
802
802
(let* ((pos (posn-point (event-end event)))
803
803
(window (posn-window (event-end event)))
804
804
(buffer (window-buffer window))
805
805
(inspect-index (with-current-buffer buffer
806
806
(get-text-property pos 'inspect-index ))))
807
- (cider-inspector-inspect-last-exception inspect-index)))
807
+ (cider-inspector-inspect-last-exception inspect-index ex-data )))
808
808
809
- (defun cider-stacktrace--inspect-class- kbd ()
809
+ (defun cider-stacktrace--inspect-kbd (&optional ex-data )
810
810
" Keyboard handler."
811
811
(interactive )
812
812
(when-let ((inspect-index (get-text-property (point ) 'inspect-index )))
813
- (cider-inspector-inspect-last-exception inspect-index)))
813
+ (cider-inspector-inspect-last-exception inspect-index ex-data)))
814
+
815
+ (defun cider-stacktrace--inspect-ex-data-mouse (event )
816
+ (interactive " e" )
817
+ (cider-stacktrace--inspect-mouse event t ))
818
+
819
+ (defun cider-stacktrace--inspect-ex-data-kbd ()
820
+ (interactive )
821
+ (cider-stacktrace--inspect-kbd t ))
814
822
815
823
(defvar cider-stacktrace-exception-map
816
824
(let ((map (make-sparse-keymap )))
817
- (define-key map [mouse-1] #'cider-stacktrace--inspect-class )
818
- (define-key map (kbd " p" ) #'cider-stacktrace--inspect-class-kbd )
819
- (define-key map (kbd " i" ) #'cider-stacktrace--inspect-class-kbd )
825
+ (define-key map [mouse-1] #'cider-stacktrace--inspect-mouse )
826
+ (define-key map (kbd " p" ) #'cider-stacktrace--inspect-kbd )
827
+ (define-key map (kbd " i" ) #'cider-stacktrace--inspect-kbd )
828
+ (define-key map (kbd " RET" ) #'cider-stacktrace--inspect-kbd )
829
+ map))
830
+
831
+ (defvar cider-stacktrace-ex-data-map
832
+ (let ((map (make-sparse-keymap )))
833
+ (define-key map [mouse-1] #'cider-stacktrace--inspect-ex-data-mouse )
834
+ (define-key map (kbd " p" ) #'cider-stacktrace--inspect-ex-data-kbd )
835
+ (define-key map (kbd " i" ) #'cider-stacktrace--inspect-ex-data-kbd )
836
+ (define-key map (kbd " RET" ) #'cider-stacktrace--inspect-ex-data-kbd )
820
837
map))
821
838
822
839
(defun cider-stacktrace-render-cause (buffer cause num note &optional inspect-index )
@@ -839,10 +856,10 @@ make INSPECT-INDEX actionable if present."
839
856
, cider-stacktrace-exception-map )
840
857
(insert (format " %d . " num)
841
858
(propertize note 'font-lock-face 'font-lock-comment-face ) " "
842
- (propertize class 'font-lock-face class-face 'mouse-face 'highlight )))
859
+ (propertize class 'font-lock-face class-face 'mouse-face 'highlight )
860
+ " \n " ))
843
861
; ; Detail level 1: message + ex-data
844
862
(cider-propertize-region '(detail 1 )
845
- (insert " \n " )
846
863
(if (equal class " clojure.lang.Compiler$CompilerException" )
847
864
(cider-stacktrace-render-compile-error buffer cause)
848
865
(cider-stacktrace-emit-indented
@@ -859,18 +876,25 @@ make INSPECT-INDEX actionable if present."
859
876
(cider-stacktrace--emit-spec-problems spec (concat indent " " )))
860
877
(when data
861
878
(insert " \n " )
862
- (cider-stacktrace-emit-indented data indent nil t )))
879
+ (cider-propertize-region `(inspect-index
880
+ , inspect-index
881
+ keymap
882
+ , cider-stacktrace-ex-data-map
883
+ mouse-face
884
+ highlight )
885
+ (cider-stacktrace-emit-indented data indent nil t )))
886
+ (insert " \n " ))
863
887
; ; Detail level 2: stacktrace
864
888
(cider-propertize-region '(detail 2 )
865
889
(let ((beg (point ))
866
890
(bg `(:background , cider-stacktrace-frames-background-color :extend t )))
867
891
(dolist (frame stacktrace)
868
- (insert " \n " )
869
- (cider-stacktrace-render-frame buffer frame ))
892
+ (cider-stacktrace-render-frame buffer frame )
893
+ (insert " \n " ))
870
894
(overlay-put (make-overlay beg (point )) 'font-lock-face bg)))
871
895
; ; Add line break between causes, even when collapsed.
872
896
(cider-propertize-region '(detail 0 )
873
- (insert " \n\n " )))))))
897
+ (insert " \n " )))))))
874
898
875
899
(defun cider-stacktrace-initialize (causes )
876
900
" Set and apply CAUSES initial visibility, filters, and cursor position."
0 commit comments