Many changes

This commit is contained in:
Alexander Rosenberg 2025-02-13 00:13:43 -08:00
parent e2db4e1193
commit 816e696f47
Signed by: Zander671
GPG Key ID: 5FD0394ADBD72730
2 changed files with 152 additions and 57 deletions

View File

@ -224,7 +224,9 @@ the arguments to pass. They default to `jshell-switches'."
(goto-char (point-max))
(insert code)
(goto-char (point-max))
(jshell-send-input)
;; don't save history
(let ((comint-input-filter #'ignore))
(jshell-send-input))
(goto-char (point-max))
(insert old)
(goto-char (point-max))))))
@ -252,35 +254,40 @@ START and END default to the current region."
"Send the Java expression under point to a live JShell buffer.
This only works in `java-ts-mode'."
(interactive)
(let ((root (treesit-buffer-root-node)))
(let ((node (car (or (treesit-query-range
root '([(expression_statement)
(field_declaration)
(local_variable_declaration)
(import_declaration)]
@exp)
(point) (1+ (point)))
(treesit-query-range
root '([(parenthesized_expression)
(binary_expression)
(update_expression)
(unary_expression)]
@exp)
(point) (1+ (point)))))))
(unless node
(user-error "No expression found under point"))
(let ((text (buffer-substring-no-properties (car node) (cdr node))))
(when (string-match (rx (* (syntax whitespace))
";"
(* (syntax whitespace)) eos)
text)
(setq text (substring text 0 (match-beginning 0))))
(when (string-match (rx bos (* (syntax whitespace)) "("
(group (* any))
")" (* (syntax whitespace)) eos)
text)
(setq text (match-string 1 text)))
(jshell-eval text)))))
(save-excursion
(let ((start (point)))
(back-to-indentation)
(unless (> (point) start)
(goto-char start)))
(let ((root (treesit-buffer-root-node)))
(let ((node (car (or (treesit-query-range
root '([(expression_statement)
(field_declaration)
(local_variable_declaration)
(import_declaration)]
@exp)
(point) (1+ (point)))
(treesit-query-range
root '([(parenthesized_expression)
(binary_expression)
(update_expression)
(unary_expression)]
@exp)
(point) (1+ (point)))))))
(unless node
(user-error "No expression found under point"))
(let ((text (buffer-substring-no-properties (car node) (cdr node))))
(when (string-match (rx (* (syntax whitespace))
";"
(* (syntax whitespace)) eos)
text)
(setq text (substring text 0 (match-beginning 0))))
(when (string-match (rx bos (* (syntax whitespace)) "("
(group (* any))
")" (* (syntax whitespace)) eos)
text)
(setq text (match-string 1 text)))
(jshell-eval text))))))
(provide 'inferior-jshell)

142
init.el
View File

@ -2093,6 +2093,9 @@ Note that this erases the buffer before doing anything."
(advice-add 'jupyter-kernel-language-mode-properties
:filter-return #'my/-jupyter-dont-use-ts-modes)
:config
(face-spec-set 'jupyter-repl-traceback
'((default . (:background unspecified)))
'face-override-spec)
(defun company-doc-buffer (&optional string)
"Emulate company's `company-doc-buffer'."
(with-current-buffer (get-buffer-create "*company-documentation*")
@ -2133,8 +2136,10 @@ Note that this erases the buffer before doing anything."
(with-current-buffer buf
(and (derived-mode-p 'jupyter-repl-mode)
jupyter-current-client
(eq lang (jupyter-kernel-language
jupyter-current-client)))))
(cl-equalp lang
(symbol-name
(jupyter-kernel-language
jupyter-current-client))))))
(buffer-list))))
(when-let (((not res))
(real (alist-get lang my/jupyter-extra-language-associations)))
@ -2146,9 +2151,8 @@ Note that this erases the buffer before doing anything."
MODE defaults to `major-mode'."
(when-let ((name (symbol-name (or mode major-mode)))
((string-match (rx bos (group (+? any)) (? "-ts") "-mode" eos)
name))
(sym (intern-soft (match-string 1 name))))
(my/-find-jupyter-buffer-for-lang sym)))
name)))
(my/-find-jupyter-buffer-for-lang (match-string 1 name))))
(defun my/-jupyter-find-proper-buffer ()
"Find the buffer for `my/jupyter-eval-in-proper-buffer'."
@ -2178,7 +2182,7 @@ current buffer is a Jupyter buffer, just use that."
(unless no-error (user-error "No Jupyter buffer found for mode: %s"
major-mode))))
(defun my/c++-ts-jupyter-eval-defun ()
(defun my/jupyter-eval-defun ()
"Eval the defun under point by sending it to a Jupyter repl."
(interactive)
(if-let ((code (thing-at-point 'defun)))
@ -2187,9 +2191,25 @@ current buffer is a Jupyter buffer, just use that."
(message "Evaluated defun"))
(user-error "Nothing to evaluate under point")))
(defun my/jupyter-eval-buffer ()
"Eval the current buffer by sending it to a Jupyter repl."
(interactive)
(my/jupyter-eval-in-proper-buffer (buffer-substring-no-properties
(point-min) (point-max)))
(message "Evaluated buffer"))
(defun my/c++-jupyter-eval-region (start end)
"Send the current buffer between START and END to a Jupyter repl."
(interactive "r")
(let ((code (buffer-substring-no-properties start end)))
(when (string-suffix-p ";" code)
(setq code (substring code 0 (1- (length code)))))
(my/jupyter-eval-in-proper-buffer code)
(message "Evaluated region")))
(defun my/c++-ts-jupyter-eval-expression ()
"Eval the expression under point by sending it to a Jupyter repl."
(interactive)
(interactive nil c-ts-mode c++-ts-mode)
(save-excursion
(let ((start (point)))
(back-to-indentation)
@ -2219,34 +2239,47 @@ current buffer is a Jupyter buffer, just use that."
(message "Evaluated: %s" code))
(user-error "Nothing to evaluate under point"))))
(defun my/c++-ts-jupyter-eval-region ()
"Eval the region by sending it to a Jupyter repl."
(interactive)
(if mark-active
(let ((code (buffer-substring-no-properties (region-beginning)
(region-end))))
(when (string-suffix-p ";" code)
(setq code (substring code 0 (1- (length code)))))
(my/jupyter-eval-in-proper-buffer code)
(message "Evaluated region"))
(user-error "No active region")))
(defun my/rust-jupyter-eval-region (start end)
"Send the current buffer between START and END to a Jupyter repl."
(interactive "r")
(let ((code (buffer-substring-no-properties start end)))
(my/jupyter-eval-in-proper-buffer code)
(message "Evaluated region")))
(defun my/c++-ts-jupyter-eval-buffer ()
"Eval the current buffer by sending it to a Jupyter repl."
(interactive)
(my/jupyter-eval-in-proper-buffer (buffer-substring-no-properties
(point-min) (point-max)))
(message "Evaluated buffer"))
(defun my/rust-ts-jupyter-eval-expression ()
"Eval the expression under point by sending it to a Jupyter repl."
(interactive nil rust-ts-mode)
(save-excursion
(let ((start (point)))
(back-to-indentation)
(unless (> (point) start)
(goto-char start)))
(if-let ((thing (treesit-thing-at-point "_" 'nested))
(code (treesit-node-text thing)))
(progn
(my/jupyter-eval-in-proper-buffer code)
(message "Evaluated: %s" code))
(user-error "Nothing to evaluate under point"))))
(with-eval-after-load 'c-ts-mode
(keymap-set c-ts-base-mode-map
"C-M-x" #'my/c++-ts-jupyter-eval-defun)
"C-M-x" #'my/jupyter-eval-defun)
(keymap-set c-ts-base-mode-map
"C-c C-e" #'my/c++-ts-jupyter-eval-expression)
(keymap-set c-ts-base-mode-map
"C-c C-r" #'my/c++-ts-jupyter-eval-region)
"C-c C-r" #'my/c++-jupyter-eval-region)
(keymap-set c-ts-base-mode-map
"C-c C-b" #'my/c++-ts-jupyter-eval-buffer))
"C-c C-b" #'my/jupyter-eval-buffer))
(with-eval-after-load 'rust-ts-mode
(keymap-set rust-ts-mode-map
"C-M-x" #'my/jupyter-eval-defun)
(keymap-set rust-ts-mode-map
"C-c C-e" #'my/rust-ts-jupyter-eval-expression)
(keymap-set rust-ts-mode-map
"C-c C-r" #'my/rust-jupyter-eval-region)
(keymap-set rust-ts-mode-map
"C-c C-b" #'my/jupyter-eval-buffer))
;; pdf-tools
(use-package pdf-tools
@ -3057,6 +3090,61 @@ buffers `helpful--sym' to `my/helpful-symbol-history'."
(setq helpful-switch-buffer-function 'my/-helpful-switch-buffer-function
helpful-max-buffers 2))
;; useful for debugging
(defun my/describe-symbol-plist (symbol)
"Descrive the plist of SYMBOL in a buffer."
(interactive (list (intern (completing-read
"Symbol: "
(let ((syms))
(mapatoms (##push (symbol-name %) syms))
syms)
nil t))))
(with-current-buffer (get-buffer-create "*describe-symbol-plist*")
(unless (derived-mode-p 'special-mode)
(special-mode))
(let ((inhibit-read-only t)
(keys)
(values))
(map-do (lambda (k v)
(push k keys)
(push v values))
(symbol-plist symbol))
(setq keys (nreverse keys)
values (nreverse values))
(erase-buffer)
(insert (propertize "Plist of "
'face 'shortdoc-heading))
(insert (propertize (format "%S" symbol)
'face '((:weight normal) shortdoc-heading)))
(insert "\n\n")
(with-temp-buffer
(let ((delayed-mode-hooks nil))
(delay-mode-hooks
(lisp-mode))
(font-lock-mode)
(show-paren-mode)
(when (fboundp 'rainbow-delimiters-mode)
(rainbow-delimiters-mode)))
(let ((pp-max-width fill-column)
(pp-use-max-width t))
(setq values (mapcar (lambda (val)
(erase-buffer)
(pp val (current-buffer))
(font-lock-ensure)
(buffer-string))
values))))
(goto-char (point-max))
(cl-loop for key in keys
for value in values
do
(insert (propertize (prin1-to-string key)
'face 'bold))
(insert "\n")
(insert value)
(insert "\n"))
(delete-char -1))
(pop-to-buffer (current-buffer))))
(defun my/greyify-color (color percent &optional frame)
"Make COLOR closer to black by PERCENT on FRAME.
Color can be any color which can be passed to `color-values'."