14个版本 (8个破坏性更新)
0.10.2 | 2024年6月3日 |
---|---|
0.9.1 | 2024年5月16日 |
0.9.0 | 2024年1月31日 |
0.8.2 | 2023年12月30日 |
0.6.0 | 2023年4月26日 |
#250 in 数据库接口
240KB
1.5K SLoC
twm
Tmux工作空间管理器
twm
是一个高性能、可定制的工具,用于将工作空间作为tmux
会话进行管理。合理的默认设置可以让您无需配置即可开始使用,或者您可以将其设置为您喜欢的任何工作流程。
目录
命令行界面使用
安装说明
公开的环境变量
配置twm
配置方案
贡献指南
使用方法
twm (tmux workspace manager) is a customizable tool for managing workspaces in tmux sessions.
Workspaces are defined as a directory matching any workspace pattern from your configuration. If no configuration is set, any directory containing a `.git` file/folder or a `.twm.yaml` file is considered a workspace.
Usage: twm [OPTIONS]
Options:
-e, --existing
Prompt user to select an existing tmux session to attach to.
This shouldn't be used with other options.
-g, --group
Prompt user to start a new session in the same group as an existing session.
Setting this option will cause `-l/--layout` and `-p/--path` to be ignored.
-d, --dont-attach
Don't attach to the workspace session after opening it
-l, --layout
Prompt user to select a globally-defined layout to open the workspace with.
Using this option will override any other layout definitions that would otherwise automatically be used when opening the workspace.
-p, --path <PATH>
Open the given path as a workspace.
Using this option does not require that the path be a valid workspace according to your configuration.
-n, --name <NAME>
Force the workspace to be opened with the given name.
When setting this option, you should be aware that twm will not "see" this session when performing other automatic actions. For example, if you have a workspace at ~/foobar and run `twm -n jimbob -p ~/foobar`, and then run `twm` and select `~/foobar` from the picker, a new session `foobar` will be created. If you then run `twm -g` and select `foobar`, `foobar-1` will be created in the `foobar` group.
--make-default-config
Make default configuration file.
By default will attempt to write a default configuration file and configuration schema in `$XDG_CONFIG_HOME/twm/` Using `-p/--path` with this flag will attempt to write the files to the folder specified. twm will not overwrite existing files. You will be prompted to rename/move the existing files before retrying.
--make-default-layout-config
Make default local layout configuration file.
Will attempt to create `.twm.yaml` in the current directory. Will not overwrite existing files. You can use `-p/--path <PATH>` to specify a different directory to write the file to.
--print-config-schema
Print the configuration file (twm.yaml) schema.
This can be used with tools (e.g. language servers) to provide autocompletion and validation when editing your configuration.
--print-layout-config-schema
Print the local layout configuration file (.twm.yaml) schema.
This can be used with tools (e.g. language servers) to provide autocompletion and validation when editing your configuration.
--print-bash-completion
Print bash completions to stdout
--print-zsh-completion
Print zsh completions to stdout
--print-fish-completion
Print fish completions to stdout
--print-man
Print man(1) page to stdout
-h, --help
Print help (see a summary with '-h')
-V, --version
Print version
环境变量
twm
将在它生成的所有会话中设置几个环境变量。它们用于帮助您与twm
交互的脚本或快捷键。它们是
TWM
- 如果当前shell处于twm
会话中,则设置为1
TWM_ROOT
- 新工作空间的根目录TWM_TYPE
- 工作空间的类型。如果没有定义工作空间类型,则为空字符串。TWM_NAME
- 由twm
创建的tmux会话的名称。
这些可以用很多方式使用
- 您不必在特定工作空间类型的布局中定义所有设置命令,而可以有一个1个共享的设置脚本定义全局,该脚本在进入工作空间时运行,检查
TWM_TYPE
以进行特定类型的设置 - 您可以使用
TWM_ROOT
来执行特定目录内的操作 - 您可以通过检查
TWM
来确保在自动化任务中手动创建的会话与twm
创建的会话处理不同
此外,设置 TWM_CONFIG_FILE
环境变量将覆盖默认的配置搜索路径。如果您的配置文件位于非标准位置,可以使用以下命令测试 twm 与默认配置:TWM_CONFIG_FILE= twm
,或者如果您的配置文件位于标准位置,使用以下命令:TWM_CONFIG_FILE=/dev/null twm
。
安装
欢迎贡献!如果您认为某些工作流程很有用,或者发现了错误,请打开一个问题或 PR。对于样式和 linting,我简单地使用 cargo fmt
和 clippy::all
。
Cargo
最简单的安装方法是使用 Cargo
cargo install twm
Nix
如果您使用 Nix,它也包含在 nixpkgs 中,并且也被包含在这个仓库的 flake 中。
自动完成
如果您使用 Nix,自动完成脚本会随 twm
一起安装,无论是从这个 flake 还是 nixpkgs。
我认为它没有被包含在任何其他操作系统上。您可以通过在您的 shell 配置中添加以下内容来手动设置 shell 完成功能
Bash
# ~/.bashrc
eval "$(twm --print-bash-completion)"
Zsh
# ~/.zshrc
eval "$(twm --print-zsh-completion)"
Fish
# ~/.config/fish/config.fish
twm --print-fish-completion | source
配置
twm
运行不需要任何配置。您可以仅安装它并运行 twm
,默认设置应该适用于一些人。
要获取一个合理的默认配置文件,您可以运行 twm --make-default-config
,这将尝试写入两个文件:$XDG_CONFIG_HOME/twm/{twm.yaml,twm.schema.json}
。
您可以使用 --make-default-config
与 --p/---path <PATH>
将文件写入不同的文件夹。
如果您使用 yaml-language-server
,默认配置文件将自动设置为使用 twm.schema.json
文件进行验证和完成。
当您更新 twm
时,您可以运行 twm --print-config-schema > $XDG_CONFIG_HOME/twm/twm.schema.json
以确保您有最新的模式文件。
有关配置选项的完整列表和示例,请参阅 CONFIGURATION.md
配置验证示例
以下是使用 yaml-language-server
在 neovim 中进行编辑器内配置验证的外观
食谱
tmux 键绑定
以下是个人使用的 twm 基本绑定
# ~/.tmux.conf
bind f run-shell "tmux neww twm"
bind F run-shell "tmux neww twm -l"
bind s run-shell "tmux neww twm -e" # i rebind the original `s` to `S` so I can still use it
bind g run-shell "tmux neww twm -g"
bind e run-shell "tmux switch -t $TWM_DEFAULT" # i set TWM_DEFAULT in my shellrc, just a session that is always available as a scratch area
有用的别名 / 脚本
twm 有意不添加可以通过一些轻量级脚本轻松完成的特性。以下是我使用的一些简化示例
# ~/.zshrc
alias twm-clone='git clone $1 $2 && twm -p $2' # clone repo $1 to path $2 and open $2 with twm
# kill current session and switch to last/next/previous session
# i bind this to K in tmux
kt() {
ORIG_SESS="$TWM_NAME"
tmux switch -l || tmux switch -n || tmux switch -p
tmux kill-session -t "$ORIG_SESS"
}
贡献
贡献当然欢迎!这不是一个大项目,所以我没有很多指南。确保测试(test*,目前是这样:\) 通过。《code>cargo fmt。 cargo clippy -- -D clippy::all
。我只能想到这些。
特性哲学
我尽量避免在 twm
内添加没有明显价值的东西。如果某些事情可以用简单的shell脚本或类似的东西很好地完成,那么它可能应该这样。
不会添加的功能示例
- 打开模糊查找器以选择要终止的会话。简单的shell脚本/足以用内置的tmux功能完成。
- 在窗口中打开git工作树分支。使用布局来完成这个。检测你在一个包含工作树的工作区中,然后运行一个脚本来以你想要的方式打开它们。这总是比任何内置的功能更灵活。
- 将git存储库克隆到新的工作区。这个和上面都相当特定于
tmux-sessionizer
,但有助于突出我们目标的不同。《code>twm 提供了-p
来在特定路径打开工作区,所以这样的功能可以用一个简单的别名alias twm-clone='git clone $1 $2 && twm -p $2'
来实现。你可以用mercurial,svn,你想要做什么都可以。
可能添加的功能示例
- 支持不同的多路复用器(例如,Zellij)。将
twm
的tmux特定部分抽象为可以与不同的多路复用器后端一起设置的东西,这将是一个很好的补充。但我只使用tmux/没有人问,所以我没有费心。
意外加入的功能
有一些功能我最初不想添加,但后来还是添加了。
- 模糊查找现有会话以附加到。最初我想这更适合留给内置的tmux功能,但当有人要求添加打开组中的会话的功能(
twm -g
)时,我不得不添加twm -e
所需的一切。此外,如果你想 模糊查找 现有的会话,那么这个功能在twm
之外将依赖于某些其他的模糊查找器。twm
内置自己的查找器的部分原因是为了避免一开始就依赖于其他工具。因此,twm -g
和twm -
应运而生。我认为-
是将被添加到twm
中的最无用的功能。
许可
类似的项目
依赖项
~12-19MB
~251K SLoC