#tmux #tmux-session #search #setup

app dmux

DMux是一个快速且简单的tmux工作空间打开工具

6个版本

0.6.4 2023年9月9日
0.6.3 2022年11月4日
0.6.2 2020年9月11日
0.5.2 2020年5月24日

#226 in 文件系统

每月50次下载

MIT/Apache

34KB
744

DMUX

(开发tMUX)

正在考虑新的名称

这是什么?

如果你经常使用tmux,那么你可能有一个像这样的脚本

tmux new-window -n $WINDOW_NAME
tmux split-window -h
tmux select-pane -t 0
tmux send-keys "fish" C-m
tmux send-keys "nvim" C-m
tmux select-pane -t 1
tmux send-keys "fish" C-m
tmux resize-pane -R 80
tmux -2 attach-session -t $SESSION

上面的脚本设置并打开一个带有指定命令和布局的tmux会话。但是,如果我想再开一个用于运行测试的窗口,或者另一个用于记笔记的窗口,我就必须创建一个全新的脚本。我还想能够使用像fzfskim这样的程序来选择要打开的目录。这太烦人了。

DMux旨在为你处理所有这些。它的主要工作是打开配置好的“工作空间”,无论在哪个目录下。它还允许你指定通常在上述脚本中设置的任何内容。

例如,上述使用DMux的脚本将是:dmux -c nvim fish <path> 然后,如果我想工作空间打开3个窗口而不是2个,我可以添加:dmux -c nvim fish "npm i" -p 3 <path>

但是,如果我想使用fzf来选择一个目录来打开。如果我在我的系统上安装了它,那么我只需省略参数,DMux就会自动打开一个fzf选择器,其中包含可以选择的目录。

如果这部分启动有点慢,不用担心,你可以通过安装fd来加速目录搜索。

你还可以通过管道将路径输入DMux来使用任何组合的目录搜索、选择器或硬编码路径:fd -td | fzf | dmux或者直接提供路径参数:dmux <path>

为什么还需要另一个Tmux管理器?

还有很多其他出色的项目也在做类似的事情,你应该去看看

那么为什么我会制作DMux呢?

  • dmux 是一个独立的二进制程序,不依赖于特定语言即可运行。
  • 其他工具(如可能最受欢迎的管理器 tmuxinator)围绕一个具有特定根目录的“项目”系统构建。这使得重用这些配置变得困难。dmux 则相反,它基于目录无关的配置文件,可以在任何根目录下运行。
  • 由于 dmux 对根目录无感知,它还专注于快速选择和打开目录。您可以轻松设置选择脚本将目录管道输入 dmux,或者如果您已安装 fzf,dmux 将在无参数运行时使用它来选择目录。
  • 这些“配置文件”还可以很好地与命令行参数混合(所有工作空间设置都可以在任一位置设置)因此可以在脚本或绑定中轻松扩展。

安装

macOS
brew tap zdcthomas/tools
brew install dmux

或者如果您已安装 rust

cargo install dmux
AUR
Coming soon

用法

  • dmux 独自运行将使用 fzf 打开 ~ 中的目录列表。这相当于说 fd -td . ~/ | fzf | dmux
  • dmux <path><path> | dmux 将在提供的路径中打开工作空间
  • dmux clone 将克隆一个 git 仓库并在工作空间中打开它
  • dmux layout 将描述当前的 Tmux 布局。这使用 Tmux 布局表示法
  • dmux --help 获取更多信息

配置

Dmux 的配置在配置文件类型方面力求尽可能包容。Dmux 支持 JSON, YAML, TOML, HJSON。它还支持包括 ~/.dmux.conf.{file_type}~/.config/dmux/dmux.conf.{file_type} 以及在 Linux 上的 $XDG_CONFIG_HOME/dmux/dmux.conf.{file_type} 在内的多种路径

示例配置文件

此配置文件有一个名为 javascript 的配置文件和默认设置

TOML
layout = "5e09,281x67,0,0{133x67,0,0,17,147x67,134,0[147x33,134,0,18,147x33,134,34{73x33,134,34,136,73x33,208,34[73x16,208,34,164,73x16,208,51,165]}]}"
session_name = "development"
number_of_panes = 5
commands = ["nvim", "fish"]

[javascript]
number_of_panes = 3
session_name = "frontend"
commands = ["nvim", "fish", "yarn watch"]

外部依赖

目前 dmux 依赖于 fzf 来选择目标目录以在其中打开工作空间。如果您已安装 fd,dmux 将使用它来加快目录搜索速度。

潜在特性

  • 启动时读取配置文件
  • 布局字符串的参数
  • 配置中的配置文件表示配置集合
  • 目录搜索命令的配置/参数
  • 可选使用 fd 以加快/异步目录搜索
  • 子命令描述当前布局
  • 子命令用于从 fzf 中杀死窗口
  • 子命令用于生成默认配置文件
  • 目录搜索深度的配置/参数
  • 一次性命令,一旦完成,就会杀死其所在的窗格,例如 npm imix deps.get
  • dmux.local.{yml|json|toml} 文件,以便特定目录可以具有特定的布局。这是危险的,因为 dmux 允许运行任意命令,可能会被恶意利用
  • 切换到 skim 以避免外部依赖

错误

请将错误作为问题提交,我将在此处添加它们

依赖关系

~10–23MB
~309K SLoC