diff --git a/eat.el b/eat.el index 3312ef9..52992f8 100644 --- a/eat.el +++ b/eat.el @@ -842,31 +842,33 @@ Don't `set' it, bind it to a value with `let'.") "Reset terminal." (let ((disp (eat--t-term-display eat--t-term))) ;; Reset most of the things to their respective default values. - (setf (eat--t-term-parser-state eat--t-term) nil - (eat--t-disp-begin disp) (point-min-marker) - (eat--t-disp-old-begin disp) (point-min-marker) - (eat--t-disp-cursor disp) (eat--t-make-cur :position (point-min-marker)) - (eat--t-disp-saved-cursor disp) (eat--t-make-cur) - (eat--t-term-scroll-begin eat--t-term) 1 - (eat--t-term-scroll-end eat--t-term) (eat--t-disp-height disp) - (eat--t-term-main-display eat--t-term) nil - (eat--t-term-face eat--t-term) (eat--t-make-face) - (eat--t-term-auto-margin eat--t-term) t - (eat--t-term-ins-mode eat--t-term) nil - (eat--t-term-charset eat--t-term) + (setf (eat--t-term-parser-state eat--t-term) nil) + (setf (eat--t-disp-begin disp) (point-min-marker)) + (setf (eat--t-disp-old-begin disp) (point-min-marker)) + (setf (eat--t-disp-cursor disp) + (eat--t-make-cur :position (point-min-marker))) + (setf (eat--t-disp-saved-cursor disp) (eat--t-make-cur)) + (setf (eat--t-term-scroll-begin eat--t-term) 1) + (setf (eat--t-term-scroll-end eat--t-term) + (eat--t-disp-height disp)) + (setf (eat--t-term-main-display eat--t-term) nil) + (setf (eat--t-term-face eat--t-term) (eat--t-make-face)) + (setf (eat--t-term-auto-margin eat--t-term) t) + (setf (eat--t-term-ins-mode eat--t-term) nil) + (setf (eat--t-term-charset eat--t-term) '(g0 (g0 . us-ascii) (g1 . dec-line-drawing) (g2 . dec-line-drawing) - (g3 . dec-line-drawing)) - (eat--t-term-saved-face eat--t-term) (eat--t-make-face) - (eat--t-term-bracketed-yank eat--t-term) nil - (eat--t-term-cur-state eat--t-term) :default - (eat--t-term-cur-blinking-p eat--t-term) nil - (eat--t-term-title eat--t-term) "" - (eat--t-term-keypad-mode eat--t-term) nil - (eat--t-term-mouse-mode eat--t-term) nil - (eat--t-term-mouse-encoding eat--t-term) nil - (eat--t-term-focus-event-mode eat--t-term) nil) + (g3 . dec-line-drawing))) + (setf (eat--t-term-saved-face eat--t-term) (eat--t-make-face)) + (setf (eat--t-term-bracketed-yank eat--t-term) nil) + (setf (eat--t-term-cur-state eat--t-term) :default) + (setf (eat--t-term-cur-blinking-p eat--t-term) nil) + (setf (eat--t-term-title eat--t-term) "") + (setf (eat--t-term-keypad-mode eat--t-term) nil) + (setf (eat--t-term-mouse-mode eat--t-term) nil) + (setf (eat--t-term-mouse-encoding eat--t-term) nil) + (setf (eat--t-term-focus-event-mode eat--t-term) nil) ;; Clear everything. (delete-region (point-min) (point-max)) ;; Inform the UI about our new state. @@ -1264,7 +1266,8 @@ character to actually show.") (defun eat--t-write (str &optional beg end) "Write STR from BEG to END on display." - (setq beg (or beg 0) end (or end (length str))) + (setq beg (or beg 0)) + (setq end (or end (length str))) (let* ((disp (eat--t-term-display eat--t-term)) (cursor (eat--t-disp-cursor disp)) (scroll-end (eat--t-term-scroll-end eat--t-term)) @@ -1521,18 +1524,17 @@ N default to 1." (let ((disp (eat--t-term-display eat--t-term)) (saved-face (eat--t-copy-face (eat--t-term-face eat--t-term)))) - (setf - ;; Save cursor position. - (eat--t-disp-saved-cursor disp) - (eat--t-copy-cur (eat--t-disp-cursor disp)) - ;; Save SGR attributes. - (eat--t-term-saved-face eat--t-term) saved-face - ;; We use side-effects, so make sure the saved face doesn't share - ;; structure with the current face. - (eat--t-face-face saved-face) - (copy-tree (eat--t-face-face saved-face)) - (eat--t-face-underline-color saved-face) - (copy-tree (eat--t-face-underline-color saved-face))))) + ;; Save cursor position. + (setf (eat--t-disp-saved-cursor disp) + (eat--t-copy-cur (eat--t-disp-cursor disp))) + ;; Save SGR attributes. + (setf (eat--t-term-saved-face eat--t-term) saved-face) + ;; We use side-effects, so make sure the saved face doesn't share + ;; structure with the current face. + (setf (eat--t-face-face saved-face) + (copy-tree (eat--t-face-face saved-face))) + (setf (eat--t-face-underline-color saved-face) + (copy-tree (eat--t-face-underline-color saved-face))))) (defun eat--t-restore-cur () "Restore previously save cursor position." @@ -1542,8 +1544,8 @@ N default to 1." (eat--t-goto (eat--t-cur-y saved) (eat--t-cur-x saved)) ;; Restore SGR attributes. (setf (eat--t-term-face eat--t-term) - (copy-tree (eat--t-term-saved-face eat--t-term)) - (eat--t-face-underline-color (eat--t-term-face eat--t-term)) + (copy-tree (eat--t-term-saved-face eat--t-term))) + (setf (eat--t-face-underline-color (eat--t-term-face eat--t-term)) (copy-tree (eat--t-face-underline-color (eat--t-term-face eat--t-term)))))) @@ -1750,16 +1752,16 @@ STATE one of the `:default', `:invisible', `:very-visible'." (let ((main-disp (eat--t-copy-disp (eat--t-term-display eat--t-term)))) (setf (eat--t-disp-begin main-disp) - (- (eat--t-disp-begin main-disp) (point-min)) - (eat--t-disp-old-begin main-disp) - (- (eat--t-disp-old-begin main-disp) (point-min)) - (eat--t-disp-cursor main-disp) - (eat--t-copy-cur (eat--t-disp-cursor main-disp)) - (eat--t-disp-saved-cursor main-disp) - (eat--t-copy-cur (eat--t-disp-saved-cursor main-disp)) - (eat--t-cur-position (eat--t-disp-cursor main-disp)) - (- (point) (point-min)) - (eat--t-term-main-display eat--t-term) + (- (eat--t-disp-begin main-disp) (point-min))) + (setf (eat--t-disp-old-begin main-disp) + (- (eat--t-disp-old-begin main-disp) (point-min))) + (setf (eat--t-disp-cursor main-disp) + (eat--t-copy-cur (eat--t-disp-cursor main-disp))) + (setf (eat--t-disp-saved-cursor main-disp) + (eat--t-copy-cur (eat--t-disp-saved-cursor main-disp))) + (setf (eat--t-cur-position (eat--t-disp-cursor main-disp)) + (- (point) (point-min))) + (setf (eat--t-term-main-display eat--t-term) (cons main-disp (buffer-string))) ;; Delete everything, and move to the beginning of terminal. (delete-region (point-min) (point-max)) @@ -1790,14 +1792,14 @@ position." (setf (eat--t-cur-position (eat--t-disp-cursor (car main-disp))) (copy-marker (+ (point-min) (eat--t-cur-position - (eat--t-disp-cursor (car main-disp))))) - (eat--t-disp-old-begin (car main-disp)) + (eat--t-disp-cursor (car main-disp)))))) + (setf (eat--t-disp-old-begin (car main-disp)) (copy-marker (+ (point-min) - (eat--t-disp-old-begin (car main-disp)))) - (eat--t-disp-begin (car main-disp)) + (eat--t-disp-old-begin (car main-disp))))) + (setf (eat--t-disp-begin (car main-disp)) (copy-marker (+ (point-min) - (eat--t-disp-begin (car main-disp)))) - (eat--t-term-display eat--t-term) (car main-disp) + (eat--t-disp-begin (car main-disp))))) + (setf (eat--t-term-display eat--t-term) (car main-disp) (eat--t-term-main-display eat--t-term) nil) (goto-char (eat--t-cur-position (eat--t-disp-cursor @@ -2033,7 +2035,8 @@ position." TOP defaults to 1 and BOTTOM defaults to the height of the display." (let ((disp (eat--t-term-display eat--t-term))) - (setq top (or top 1) bottom (or bottom (eat--t-disp-height disp))) + (setq top (or top 1)) + (setq bottom (or bottom (eat--t-disp-height disp))) ;; According to DEC's documentation (found somewhere on the ;; internet, but can't remember where), TOP and BOTTOM must be ;; within display, and BOTTOM must be below TOP. Otherwise the @@ -2058,17 +2061,17 @@ TOP defaults to 1 and BOTTOM defaults to the height of the display." (while params (pcase (pop params) (`(,(or 0 'nil)) - (1value (setf (eat--t-face-fg face) nil - (eat--t-face-bg face) nil - (eat--t-face-intensity face) nil - (eat--t-face-italic face) nil - (eat--t-face-underline face) nil - (eat--t-face-underline-color face) nil - (eat--t-face-crossed face) nil - (eat--t-face-conceal face) nil - (eat--t-face-inverse face) nil - (eat--t-face-blink face) nil - (eat--t-face-font face) 'eat-term-font-0))) + (1value (setf (eat--t-face-fg face) nil)) + (1value (setf (eat--t-face-bg face) nil)) + (1value (setf (eat--t-face-intensity face) nil)) + (1value (setf (eat--t-face-italic face) nil)) + (1value (setf (eat--t-face-underline face) nil)) + (1value (setf (eat--t-face-underline-color face) nil)) + (1value (setf (eat--t-face-crossed face) nil)) + (1value (setf (eat--t-face-conceal face) nil)) + (1value (setf (eat--t-face-inverse face) nil)) + (1value (setf (eat--t-face-blink face) nil)) + (1value (setf (eat--t-face-font face) 'eat-term-font-0))) ('(1) (1value (setf (eat--t-face-intensity face) 'eat-term-bold))) ('(2) @@ -2438,7 +2441,8 @@ DATA is the selection data encoded in base64." ;; No string to send, so send an empty string and an empty ;; target string meaning that we don't have any answer. (unless str - (setq str "" source "")) + (setq str "") + (setq source "")) (format "\e]52;%s;%s\e\\" source (base64-encode-string str)))) ;; The client is requesting to set clipboard content, let's try to @@ -3013,10 +3017,10 @@ DATA is the selection data encoded in base64." (>= width 1) (>= height 1)) ;; Update state. - (setf (eat--t-disp-width disp) width - (eat--t-disp-height disp) height - (eat--t-term-scroll-begin eat--t-term) 1 - (eat--t-term-scroll-end eat--t-term) + (setf (eat--t-disp-width disp) width) + (setf (eat--t-disp-height disp) height) + (setf (eat--t-term-scroll-begin eat--t-term) 1) + (setf (eat--t-term-scroll-end eat--t-term) (eat--t-disp-height disp)) (set-marker (eat--t-cur-position cursor) (point)) (if (eat--t-term-main-display eat--t-term) @@ -4074,8 +4078,8 @@ return \"eat-color\", otherwise return \"eat-mono\"." (eat--blink-stop-timers) (setq eat--slow-blink-timer (run-with-timer t (/ (float eat-slow-blink-frequency)) - #'eat--flip-slow-blink-state) - eat--fast-blink-timer + #'eat--flip-slow-blink-state)) + (setq eat--fast-blink-timer (run-with-timer t (/ (float eat-fast-blink-frequency)) #'eat--flip-fast-blink-state))) @@ -4091,10 +4095,12 @@ return \"eat-color\", otherwise return \"eat-mono\"." (require 'face-remap) (setq eat-blink-mode t) (mapc #'make-local-variable locals) - (setq eat--slow-blink-state nil eat--fast-blink-state nil - eat--slow-blink-remap - (face-remap-add-relative 'eat-term-slow-blink '(:box nil)) - eat--fast-blink-remap + (setq eat--slow-blink-state nil) + (setq eat--fast-blink-state nil) + (setq eat--slow-blink-remap + (face-remap-add-relative 'eat-term-slow-blink + '(:box nil))) + (setq eat--fast-blink-remap (face-remap-add-relative 'eat-term-fast-blink '(:box nil))) (add-hook 'pre-command-hook #'eat--blink-stop-timers nil t) @@ -4156,7 +4162,8 @@ return \"eat-color\", otherwise return \"eat-mono\"." (cond (eat--cursor-blink-mode (mapc #'make-local-variable locals) - (setq eat--cursor-blink-state nil eat--cursor-blink-timer nil) + (setq eat--cursor-blink-state nil) + (setq eat--cursor-blink-timer nil) (add-hook 'pre-command-hook #'eat--cursor-blink-stop-timers nil t) (add-hook 'post-command-hook #'eat--cursor-blink-start-timers @@ -4214,8 +4221,8 @@ Any other value Default cursor." (pcase state (:invisible eat-invisible-cursor-type) (:very-visible eat-very-visible-cursor-type) - (_ eat-default-cursor-type)) ; `:default' - cursor-type (car eat--cursor-blink-type)) + (_ eat-default-cursor-type))) ; `:default' + (setq-local cursor-type (car eat--cursor-blink-type)) (eat--cursor-blink-mode (if (cadr eat--cursor-blink-type) +1 -1))) (defun eat--manipulate-kill-ring (_ selection data) @@ -4496,8 +4503,8 @@ event." (unless eat--mouse-drag-transient-map-exit (let ((old-track-mouse track-mouse) (buffer (current-buffer))) - (setq track-mouse 'dragging - eat--mouse-drag-transient-map-exit + (setq track-mouse 'dragging) + (setq eat--mouse-drag-transient-map-exit (set-transient-map (let ((map (eat-term-make-keymap #'eat-self-input @@ -4796,13 +4803,13 @@ END if it's safe to do so." eat--process-output-queue-timer eat--shell-prompt-annotation-correction-timer)) ;; This is intended; input methods don't work on read-only buffers. - (setq buffer-read-only nil - buffer-undo-list t - eat--synchronize-scroll-function #'eat--synchronize-scroll - filter-buffer-substring-function - #'eat--filter-buffer-substring - eat--mouse-grabbing-type nil - mode-line-process + (setq buffer-read-only nil) + (setq buffer-undo-list t) + (setq eat--synchronize-scroll-function #'eat--synchronize-scroll) + (setq filter-buffer-substring-function + #'eat--filter-buffer-substring) + (setq eat--mouse-grabbing-type nil) + (setq mode-line-process '("" (:eval (when eat--process @@ -5078,22 +5085,23 @@ same Eat buffer. The hook `eat-exec-hook' is run after each exec." (with-selected-window window (eat-term-resize eat--terminal (window-max-chars-per-line) (floor (window-screen-lines))))) - (setf (eat-term-input-function eat--terminal) #'eat--send-input - (eat-term-set-cursor-function eat--terminal) - #'eat--set-cursor - (eat-term-grab-mouse-function eat--terminal) - #'eat--grab-mouse - (eat-term-manipulate-selection-function eat--terminal) - #'eat--manipulate-kill-ring - (eat-term-ring-bell-function eat--terminal) #'eat--bell - (eat-term-set-cwd-function eat--terminal) #'eat--set-cwd - (eat-term-prompt-start-function eat--terminal) - #'eat--pre-prompt - (eat-term-prompt-end-function eat--terminal) - #'eat--post-prompt - (eat-term-set-cmd-function eat--terminal) #'eat--set-cmd - (eat-term-cmd-start-function eat--terminal) #'eat--pre-cmd - (eat-term-cmd-finish-function eat--terminal) + (setf (eat-term-input-function eat--terminal) #'eat--send-input) + (setf (eat-term-set-cursor-function eat--terminal) + #'eat--set-cursor) + (setf (eat-term-grab-mouse-function eat--terminal) + #'eat--grab-mouse) + (setf (eat-term-manipulate-selection-function eat--terminal) + #'eat--manipulate-kill-ring) + (setf (eat-term-ring-bell-function eat--terminal) #'eat--bell) + (setf (eat-term-set-cwd-function eat--terminal) #'eat--set-cwd) + (setf (eat-term-prompt-start-function eat--terminal) + #'eat--pre-prompt) + (setf (eat-term-prompt-end-function eat--terminal) + #'eat--post-prompt) + (setf (eat-term-set-cmd-function eat--terminal) #'eat--set-cmd) + (setf (eat-term-cmd-start-function eat--terminal) + #'eat--pre-cmd) + (setf (eat-term-cmd-finish-function eat--terminal) #'eat--set-cmd-status) ;; Crank up a new process. (let* ((size (eat-term-size eat--terminal)) @@ -5350,16 +5358,16 @@ PROGRAM can be a shell command." (setq eat--terminal (eat-term-make (current-buffer) (process-mark proc))) (set-marker (process-mark proc) (eat-term-end eat--terminal)) - (setf (eat-term-input-function eat--terminal) #'eat--send-input - (eat-term-set-cursor-function eat--terminal) - #'eat--set-cursor - (eat-term-grab-mouse-function eat--terminal) - #'eat--grab-mouse - (eat-term-manipulate-selection-function eat--terminal) - #'eat--manipulate-kill-ring - (eat-term-ring-bell-function eat--terminal) #'eat--bell - (eat-term-set-cwd-function eat--terminal) #'eat--set-cwd - (eat-term-set-cmd-function eat--terminal) #'eat--set-cmd) + (setf (eat-term-input-function eat--terminal) #'eat--send-input) + (setf (eat-term-set-cursor-function eat--terminal) + #'eat--set-cursor) + (setf (eat-term-grab-mouse-function eat--terminal) + #'eat--grab-mouse) + (setf (eat-term-manipulate-selection-function eat--terminal) + #'eat--manipulate-kill-ring) + (setf (eat-term-ring-bell-function eat--terminal) #'eat--bell) + (setf (eat-term-set-cwd-function eat--terminal) #'eat--set-cwd) + (setf (eat-term-set-cmd-function eat--terminal) #'eat--set-cmd) (when-let* ((window (get-buffer-window nil t))) (with-selected-window window (eat-term-resize eat--terminal (window-max-chars-per-line) @@ -5384,7 +5392,8 @@ PROGRAM can be a shell command." (eat--grab-mouse nil nil) (eat-term-delete eat--terminal) (set-process-filter eat--process #'eshell-output-filter) - (setq eat--terminal nil eat--process nil) + (setq eat--process nil) + (setq eat--terminal nil) (kill-local-variable 'eshell-output-filter-functions) (eat--eshell-semi-char-mode -1) (eat--eshell-char-mode -1) @@ -5475,8 +5484,8 @@ modify its argument to change the filter, the sentinel and invoke #'eshell-sentinel))))) (apply make-process plist) (unless (< emacs-major-version 29) - (setf (plist-get plist :filter) #'eat--eshell-filter - (plist-get plist :sentinel) + (setf (plist-get plist :filter) #'eat--eshell-filter) + (setf (plist-get plist :sentinel) #'eat--eshell-sentinel)) (setf (plist-get plist :command) `("/usr/bin/env" "sh" "-c" @@ -5548,8 +5557,8 @@ sane 2>%s ; if [ $1 = .. ]; then shift; fi; exec \"$@\"" (eat--eshell-local-mode (mapc #'make-local-variable locals) (setq eat--synchronize-scroll-function - #'eat--eshell-synchronize-scroll - filter-buffer-substring-function + #'eat--eshell-synchronize-scroll) + (setq filter-buffer-substring-function #'eat--filter-buffer-substring) ;; Make sure glyphless character don't display a huge box glyph, ;; that would break the display. @@ -5738,8 +5747,8 @@ allowed." (with-current-buffer eat-buf (switch-to-buffer eat-buf) (eat-mode) - (setq-local eshell-parent-buffer eshell-buf - eat-kill-buffer-on-exit nil) + (setq-local eshell-parent-buffer eshell-buf) + (setq-local eat-kill-buffer-on-exit nil) (eat-exec eat-buf program program nil args) (let ((proc (get-buffer-process eat-buf))) (if (and proc (eq 'run (process-status proc))) @@ -5844,7 +5853,8 @@ FN, `eat-exec', which see." (setq-local eat--trace-output-buffer buf) (add-hook 'kill-buffer-hook #'eat--trace-stop nil t) (let ((size (eat-term-size eat--terminal))) - (setq width (car size) height (cdr size))) + (setq width (car size)) + (setq height (cdr size))) (dolist (var eat--trace-recorded-variables) (push (cons var (symbol-value var)) variables))) (with-current-buffer buf @@ -5966,7 +5976,8 @@ see." (setq-local eat--trace-output-buffer buf) (add-hook 'kill-buffer-hook #'eat--trace-stop nil t) (let ((size (eat-term-size eat--terminal))) - (setq width (car size) height (cdr size))) + (setq width (car size)) + (setq height (cdr size))) (dolist (var eat--trace-recorded-variables) (push (cons var (symbol-value var)) variables)) (with-current-buffer buf @@ -6084,14 +6095,14 @@ FN is the original definition of `eat--eshell-cleanup', which see." (- (car data) eat--trace-replay-recording-start-time)) (pcase-exhaustive data (`(,time create ,_ui ,width ,height ,variables) - (setq eat--trace-replay-recording-start-time time - eat--trace-replay-progress 0) + (setq eat--trace-replay-recording-start-time time) + (setq eat--trace-replay-progress 0) (dolist (var eat--trace-recorded-variables) (set (make-local-variable var) (alist-get var variables))) (setq eat--terminal (eat-term-make (current-buffer) (point))) (setf (eat-term-set-cursor-function eat--terminal) - #'eat--set-cursor - (eat-term-ring-bell-function eat--terminal) #'eat--bell) + #'eat--set-cursor) + (setf (eat-term-ring-bell-function eat--terminal) #'eat--bell) (eat-term-resize eat--terminal width height) (eat-term-redisplay eat--terminal)) (`(,_time output ,string) @@ -6128,8 +6139,8 @@ FN is the original definition of `eat--eshell-cleanup', which see." (unless (buffer-live-p eat--trace-replay-buffer) (setq-local eat--trace-replay-buffer (generate-new-buffer - (format "*eat-trace-replay*: %s" (buffer-name))) - eat--trace-replay-marker (point-min-marker)) + (format "*eat-trace-replay*: %s" (buffer-name)))) + (setq-local eat--trace-replay-marker (point-min-marker)) (let ((ov (make-overlay (point-min) (point-min)))) (overlay-put ov 'before-string #(" " 0 1 (display (left-fringe right-triangle)))) @@ -6143,8 +6154,8 @@ FN is the original definition of `eat--eshell-cleanup', which see." (goto-char (point-min)) (with-current-buffer eat--trace-replay-buffer (eat-trace-replay-mode) - (setq eat--trace-replay-source-buffer source - eat--trace-replay-frame-count frame-count)))) + (setq eat--trace-replay-source-buffer source) + (setq eat--trace-replay-frame-count frame-count)))) (display-buffer eat--trace-replay-buffer)) (defun eat-trace-replay-next-frame (&optional n) @@ -6159,7 +6170,8 @@ N defaults to 1. Interactively, N is the prefix argument." "Clean up the source buffer before the terminal being killed." (when (buffer-live-p eat--trace-replay-source-buffer) (with-current-buffer eat--trace-replay-source-buffer - (setq eat--trace-replay-buffer nil eat--trace-replay-marker nil) + (setq eat--trace-replay-buffer nil) + (setq eat--trace-replay-marker nil) (delete-overlay eat--trace-replay-current-sexp-overlay)))) (defvar eat-trace-replay-mode-map