返回

文章详情

Ghostel.el:由libghostty驱动的终端模拟器

Hacker News2026年7月12日 08:52

Ghostel是一个由libghostty-vt驱动的Emacs终端模拟器——同样驱动Ghostty终端的VT引擎。一个用Zig编写的本地动态模块处理终端状态、渲染和本地PTY I/O;Elisp管理键映射、缓冲区、命令和远程进程集成。Ghostel受到emacs-libvterm的启发,遵循相同的双层设计,但使用Ghostty的现代VT引擎而非libvterm。这带来了Kitty键盘和图形协议、丰富的下划线样式、OSC 8超链接、OSC 4/10/11颜色查询和同步输出(DEC 2026)——而libvterm不支持这些。请参见Ghostel与vterm和eat的详细比较。该本地模块将在首次使用时自动下载,因此普通情况下不需要工具链。使用M-x ghostel打开终端。1. 快速入门(use-package ghostel :bind (("C-x m" . ghostel) :map ghostel-semi-char-mode-map ("C-s" . consult-line) ("M-<backspace>" . ghostel-backward-kill-word) ("M-p" . (lambda () (interactive) (ghostel-send-key "p" "ctrl"))) ("M-n" . (lambda () (interactive) (ghostel-send-key "n" "ctrl"))) :map project-prefix-map ("m" . ghostel-project) ("M" . ghostel-project-list-buffers)) :config (defun ghostel-send-C-k-and-kill () "将'C-k'发送到ghostel。像普通的Emacs 'C-k'一样。杀死到行末并放入杀死环。" (interactive) (kill-ring-save (point) (line-end-position)) (ghostel-send-key "k" "ctrl")) (add-to-list 'project-switch-commands '(ghostel-project "Ghostel") t) (add-to-list 'project-switch-commands '(ghostel-project-list-buffers "Ghostel buffers") t) (add-to-list 'ghostel-eval-cmds '("magit-status-setup-buffer" magit-status-setup-buffer)));(use-package ghostel-eshell :hook (eshell-load . ghostel-eshell-visual-command-mode)) (use-package ghostel-compile :hook (after-init . ghostel-compile-global-mode)) (use-package ghostel-comint :hook (after-init . ghostel-comint-global-mode))如果你是恶意用户,可以安装evil-ghostel扩展:(use-package evil-ghostel :after (ghostel evil) :hook (ghostel-mode . evil-ghostel-mode)) 1.1. 外壳集成概述 目录跟踪和提示导航在本地bash、zsh或fish会话中默认自动开启。请参见外壳集成以获取TRAMP支持和更多信息。要从你的shell调用Emacs函数,你必须将其添加到ghostel-eval-cmds白名单,然后像这样将内容添加到你的bashrc中:if [[ "$INSIDE_EMACS" = 'ghostel' ]]; then e() { ghostel_cmd find-file-other-window "$@"; } dow() { ghostel_cmd dired-other-window "$@"; } gst() { ghostel_cmd magit-status-setup-buffer " $(pwd)"; } fi 1.2. 输入模式概述 Ghostel提供五种eat.el风格的输入模式。默认是semi-char模式,几乎将所有按键转发到终端,除了少数例外(例如M-x,C-c)。在char模式中,所有按键都发送到终端。按M-RET退出。在line模式中,Ghostel表现得像M-x shell:缓冲区是普通的Emacs缓冲区,没有按键发送到终端。只有在你输入一行并按RET后,整行才会一次性发送到终端。emacs模式和copy模式临时将缓冲区切换为普通的Emacs缓冲区,你可以用它来导航、查看和复制文本。两者的不同在于copy模式冻结终端,因此如果你有持续的输出,在尝试选择某些内容时不会有任何内容“滚动”消失。emacs模式是实时的,所以在你滚动和选择时,新的输出持续到来。这些只读模式默认启用ghostel-readonly-fast-exit(默认值为t),这在大多数期望发送到终端的按键上自动退出它们。这使过渡无缝:比如说你有一些正在运行的输出,看到你想复制的东西——你按C-c C-t进入copy模式,像在普通Emacs缓冲区中一样导航并选择你的文本。当你复制某些东西或输入任何字符时,你会自动返回到正常的ghostel终端会话中。某些操作也会自动激活copy模式,例如使用鼠标选择,导航到超链接(C-c C-p)或激活标记。2. 需求 Emacs 28.1+需要动态模块支持,macOS、Linux、FreeBSD或本地Windows。本地模块将在首次使用时自动下载。已为以下平台提供预构建的二进制文件:aarch64-macos(Apple Silicon),x86_64-macos(Intel Mac),x86_64-linux,aarch64-linux,x86_64-freebsd,x86_64-windows,aarch64-windows。如果你更喜欢从源代码构建或需要其他平台,你还需要Zig 0.15.2 - 请参见从源代码构建。3. 安装 3.1. MELPA(use-package ghostel :ensure t) 3.2. 使用:vc的use-package(Emacs 30+) (use-package ghostel :vc(:url "https://github.com/dakra/ghostel" :lisp-dir "lisp" :rev :newest)) :lisp-dir "lisp"仅在Emacs <31.1时需要。 3.3. 使用:load-path的use-package(use-package ghostel :load-path "/path/to/ghostel/lisp") 3.4. 手动(add-to-list 'load-path "/path/to/ghostel/lisp")

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡