5 个版本

0.2.2 2024 年 6 月 1 日
0.2.1 2023 年 12 月 31 日
0.2.0 2023 年 12 月 30 日
0.1.1 2023 年 11 月 1 日
0.1.0 2023 年 9 月 29 日

#105 in 配置

Download history 126/week @ 2024-05-26 69/week @ 2024-06-02 1/week @ 2024-06-09

264 个月的下载量

Apache-2.0

63KB
1.5K SLoC

Tuxmux

ci-badge crates-io-badge license-badge

Tuxmux (tux) 是 tmux 的会话和窗口管理器。

demo

特性

  • 模糊查找 tmux 会话以创建/附加。

  • 跳转列表以快速打开 tmux 会话(类似 harpoon)

  • 支持跳转的关键绑定

  • 高度可配置

  • 会话创建时支持 git 工作树

安装

Cargo

cargo install tuxmux

Nix

# Try out tuxmux with `nix run`
nix run github:EdenEast/tuxmux

# Create a devshell with `nix shell`
nix shell github:EdenEast/tuxmux

# Install into profile
nix profile install github:EdenEast/tuxmux

# Install from nixpkgs
nix-env -iA nixpkgs.tuxmux

源代码

cargo install --path .

补全

将此添加到您的配置文件末尾(通常是 ~/.bashrc

eval "$(tux completion bash)"

将此添加到您的配置文件末尾(通常是 ~/.elvish/rc.elv

eval (tux completion elvish | slurp)

将此添加到您的配置文件末尾(通常是 ~/.config/fish/config.fish)

tux completion fish | source

将此添加到您的配置文件末尾(在 PowerShell 中运行 echo $profile 以查找它)

Invoke-Expression (& { (tux compltion powershell | Out-String) })

将此添加到您的配置文件末尾(通常是 ~/.zshrc

eval "$(tux completion zsh)"

为了使补全工作,上述行必须在调用 compinit 之后添加。您可能需要通过运行 rm ~/.zcompdump*; compinit 来重新构建您的补全缓存。

Nix

如果使用 nix 安装,以下默认安装

  • Bash

  • Fish

  • Zsh

Jumplist

113f268c ceb8 4b01 a28c 69676da778b0

Tuxmux 包含一个称为“跳转列表”的功能,旨在简化导航和快速附加到不同会话的过程。这个概念受到在 ThePrimeagen/harpoon 中引入的“harpooning”概念的启发。跳转列表是一个强大的工具,用于促进与多个会话的无缝交互。

什么是 Harpooning?

Harpooning 是来自 ThePrimeagen 的 GitHub 项目的概念,涉及快速高效地连接到终端环境中不同的会话或目标。这是一种常用于同时处理多个终端会话的开发人员和高级用户的技术。

使用跳转列表

跳转列表的主要用途是通过快捷键快速访问和连接到特定的会话。以下是工作原理

填充跳转列表
在您可以使用跳转列表之前,您需要将其填充您希望与之交互的会话。这通常可以通过在应用程序配置中定义一组会话或目标来实现。

shell

# Appends the path argument to the jumplist
tux jump --path ~/.config/nvim

# Append the current path to the jumplist
tux jump --path .

# Open the jumplist in your $EDITOR
tux jump --edit

使用快捷键导航
一旦跳转列表填充完毕,您可以使用快捷键或键盘快捷方式导航到列表中的特定索引。每个索引通常对应一个会话或目标。这允许您通过单个键组合跳转到所需的会话。

~/.config/tmux.conf

# Bind homerow keys to tuxmux jumplist indices
bind-key -r J   run-shell "tux jump --index 1"
bind-key -r K   run-shell "tux jump --index 2"
bind-key -r L   run-shell "tux jump --index 3"
bind-key -r '"' run-shell "tux jump --index 4"

无缝会话附加
当您激活跳转列表中的特定索引时,应用程序将迅速将您附加到相应的会话,简化了与多个会话交互的过程。

Git Worktree

此应用程序支持 Git worktree,允许您更高效地管理 Git 仓库中的多个 worktree。当使用此应用程序创建 Tmux 会话时,您可以选择将哪个 worktree 附加到仓库(如果仓库包含多个 worktree)。

当您使用此应用程序创建 Tmux 会话时,可能会遇到 Git 仓库包含多个 worktree 的情况。为了提供无缝体验,应用程序将提示您选择在 Tmux 会话中附加哪个 worktree。

配置

Tuxmux 使用 KDL 作为其配置语言。

快速入门

mkdir -p ~/.config/tuxmux
tux --default-config > ~/.config/tuxmux/config.kdl

文件位置

Tuxmux 从两种来源加载配置信息,本地和全局。文件由在每个路径中搜索第一个 config.kdl 文件来确定。

本地 全局
$TUXMUX_DATA_PATH $TUXMUX_CONFIG_PATH
$XDG_DATA_HOME/tuxmux $XDG_CONFIG_HOME/tuxmux
~/.local/share/tuxmux ~/.config/tuxmux

在本地配置文件中定义的值具有高于全局值的优先级。包含列表的值将合并而不是覆盖。

选项

config.kdl 中定义的值的全列表。

depth

设置工作区路径的最大搜索深度。

类型: number
默认: 5

depth 3

height

模糊查找选择窗口的高度。值可以是数字或字符串。数字表示要显示的行数或条目数。字符串可以是字符串 "full",表示全屏,或是一个数字后跟一个 "%"(百分号)。百分比是终端高度用于的百分比。

类型: string | number
默认: 50%

height 10

default_worktree

如果找到多个 worktree,选择仓库的远程默认分支。如果找不到默认 worktree,将回退到选择正确的 one。

类型: boolean
默认: false

default_worktree true

exclude_paths

工作区目录爬虫将剪枝包含这些组件的路径。

可选参数

  • default: (boolean) 如果为 true,则附加到默认值(默认: true)

类型: string list
默认: { - ".direnv" "node_modules" }

exclude_paths default=false {
  - ".direnv"
  - "node_modules"
}

paths

配置用于搜索有效工作区的搜索路径列表。Tux 使用这些有效工作区作为附加选项。

paths.workspace

工作区路径是递归搜索以找到有效工作区的路径。Tux 将递归搜索工作区路径,直到达到最大深度。要覆盖默认工作区值,设置可选 default=false

可选参数

  • default: (boolean) 如果为 true,则附加到默认值(默认: true)

类型: string list
默认: { - "~" }

paths {
  workspaces default=false {
    - "~/code"
  }
}

paths.single

单个路径是指添加到有效工作区路径列表中的路径。如果您想添加一个不应定义为有效工作区的路径,这很有用。

可选参数

  • default: (boolean) 如果为 true,则附加到默认值(默认: true)

类型: string list
默认值:{}

paths {
  single default=false {
    - "~/.config/nvim"
  }
}

开发

Tuxmux 目前处于开发阶段,在 v1 版本发布之前可能会发生变化。您对 tuxmux 有什么想法?可以提交一个 issue 或 fork 项目并创建一个 PR。

Tuxmux 最初是我 dotfiles 中的一个 shell 脚本,后来发展成这个实用程序。

许可证

Tuxmux 根据 Apache 许可证(版本 2)授权。

有关更多详细信息,请参阅 LICENSE 文件。

依赖项

~22–34MB
~563K SLoC