emacs/lisp/init-term.el 2.5 K raw
1
;;; init-term.el -*- lexical-binding: t; -*-
2
3
;; Ghostel: libghostty-vt backed terminal. Native module downloads on first use.
4
(use-package ghostel
5
  :commands (ghostel ghostel-project)
6
  :init
7
  (setq ghostel-timer-delay 0.01
8
        ghostel-max-scrollback (* 1024 1024)))
9
10
(use-package evil-ghostel
11
  :after (ghostel evil)
12
  :hook (ghostel-mode . evil-ghostel-mode))
13
14
;; Terminal perf tweaks, adapted from James Cherti (MIT):
15
(defun my/speed-up-terminal-buffer ()
16
  "Reduce unnecessary Emacs features in terminal buffers."
17
  (let ((ghostel-buffer (derived-mode-p 'ghostel-mode)))
18
    (setq-local font-lock-defaults '(nil t))
19
20
    (setq-local scroll-conservatively most-positive-fixnum)
21
    (setq-local hscroll-margin 0)
22
    (setq-local scroll-margin 0)
23
    (setq-local auto-hscroll-mode nil)
24
25
    (setq-local truncate-lines t)
26
    (setq-local nobreak-char-display nil)
27
    (setq-local bidi-paragraph-direction 'left-to-right)
28
    (setq-local bidi-inhibit-bpa t)
29
30
    ;; Ghostel computes row height from ghostel-line-spacing
31
    (unless ghostel-buffer
32
      (setq-local line-spacing 0)
33
      (setq-local mode-line-format nil))
34
35
    (setq-local process-adaptive-read-buffering nil)
36
    (let ((output-max (* 1024 1024)))
37
      (when (< read-process-output-max output-max)
38
        (setq-local read-process-output-max output-max)))
39
40
    (buffer-disable-undo)
41
42
    ;; Evil jump list hooks (C-o / C-i won't work in terminals)
43
    (remove-hook 'pre-command-hook 'evil--jump-hook t)
44
    (remove-hook 'post-command-hook 'evil--jump-handle-buffer-crossing t)
45
46
    (let ((inhibit-redisplay t)
47
          (inhibit-message t)
48
          (modes (list 'electric-pair-local-mode
49
                       'electric-indent-local-mode
50
                       'display-line-numbers-mode
51
                       'display-fill-column-indicator-mode
52
                       'hl-line-mode
53
                       'show-paren-local-mode
54
                       'flymake-mode
55
                       'flycheck-mode
56
                       'evil-surround-mode
57
                       'yas-minor-mode
58
                       'company-mode
59
                       'corfu-mode)))
60
      ;; Ghostel relies on eldoc (link targets) and auto-composition
61
      (unless ghostel-buffer
62
        (push 'eldoc-mode modes)
63
        (push 'auto-composition-mode modes))
64
      (dolist (mode modes)
65
        (when (fboundp mode)
66
          (ignore-errors (funcall mode -1)))))))
67
68
(add-hook 'term-mode-hook #'my/speed-up-terminal-buffer t)
69
(add-hook 'ghostel-mode-hook #'my/speed-up-terminal-buffer t)
70
71
(provide 'init-term)