2019-02-04 19:56:14 +00:00
# tmux-thumbs
2019-02-04 21:40:45 +00:00
2019-02-28 23:12:53 +00:00
![](https://travis-ci.com/fcsonline/tmux-thumbs.svg?branch=master)
2019-02-28 18:51:33 +00:00
A lightning fast version of [tmux-fingers ](https://github.com/Morantron/tmux-fingers ) written in [Rust ](https://www.rust-lang.org/ ) for copy pasting with vimium/vimperator like hints.
2019-03-09 22:39:16 +00:00
## Usage
2019-02-28 18:51:33 +00:00
2019-03-09 22:39:16 +00:00
Press ( < kbd > prefix< / kbd > + < kbd > Space< / kbd > ) to highlist in you current tmux
2019-03-10 09:35:42 +00:00
visible pane all text that match specific pattern. Then press the highlighted
2019-03-09 22:39:16 +00:00
letter hint to yank the text in your tmux buffer.
### Matched patterns
2019-02-28 18:51:33 +00:00
- File paths
- File in diff
- Git SHAs
2019-11-17 17:44:08 +00:00
- IPFS CID's
2019-02-28 18:51:33 +00:00
- Colors in hex
- Numbers ( 4+ digits )
- Hex numbers
2019-05-01 21:04:47 +00:00
- Markdown urls
2019-02-28 18:51:33 +00:00
- IP4 addresses
2020-05-05 18:30:47 +00:00
- Docker images
2019-02-28 18:51:33 +00:00
- kubernetes resources
- UUIDs
2020-05-02 22:45:29 +00:00
These are the list of matched patterns that will be highlighted by default. If
2019-03-09 22:39:16 +00:00
you want to highlight a pattern that is not in this list you can add one or
more with `--regexp` parameter.
## Demo
2019-03-27 23:53:04 +00:00
[![demo ](https://asciinema.org/a/232775.png?ts=1 )](https://asciinema.org/a/232775?autoplay=1)
2019-03-09 22:39:16 +00:00
## Tmux integration
Clone the repo:
```
git clone https://github.com/fcsonline/tmux-thumbs ~/.tmux/plugins/tmux-thumbs
```
2019-03-10 09:35:42 +00:00
Compile it with [cargo ](https://doc.rust-lang.org/cargo/getting-started/installation.html ):
2019-03-09 22:39:16 +00:00
```
2019-03-10 09:35:42 +00:00
cd ~/.tmux/plugins/tmux-thumbs
cargo build --release
2019-03-09 22:39:16 +00:00
```
2019-03-10 09:35:42 +00:00
Source it in your `.tmux.conf` :
2019-02-28 18:51:33 +00:00
```
2019-03-10 09:35:42 +00:00
run-shell ~/.tmux/plugins/tmux-thumbs/tmux-thumbs.tmux
2019-02-28 18:51:33 +00:00
```
2019-03-10 09:35:42 +00:00
Reload TMUX conf by running:
2019-02-28 18:51:33 +00:00
```
2019-03-10 09:35:42 +00:00
tmux source-file ~/.tmux.conf
2019-02-28 18:51:33 +00:00
```
2020-03-14 18:38:31 +00:00
## Using Tmux Plugin Manager
You can add this line to your list of [TPM ](https://github.com/tmux-plugins/tpm ) plugins in `.tmux.conf` :
```
set -g @plugin 'fcsonline/tmux-thumbs'
```
To be able to install the plugin just hit < kbd > prefix< / kbd > + < kbd > I< / kbd > . You should now be able to use
the plugin!
2019-02-28 18:51:33 +00:00
## Configuration
2019-03-20 23:31:28 +00:00
If you want to customize how is shown your tmux-thumbs hints those all available
2019-03-10 09:35:42 +00:00
parameters to set your perfect profile.
2019-03-09 22:39:16 +00:00
2019-03-20 23:31:28 +00:00
NOTE: for changes to take effect, you'll need to source again your `.tmux.conf` file.
2019-02-28 18:51:33 +00:00
2019-05-02 20:20:33 +00:00
* [@thumbs-key ](#thumbs-key )
2019-03-20 23:31:28 +00:00
* [@thumbs-alphabet ](#thumbs-alphabet )
* [@thumbs-reverse ](#thumbs-reverse )
* [@thumbs-unique ](#thumbs-unique )
* [@thumbs-position ](#thumbs-position )
* [@thumbs-regexp-N ](#thumbs-regexp-N )
* [@thumbs-command ](#thumbs-command )
* [@thumbs-upcase-command ](#thumbs-upcase-command )
* [@thumbs-bg-color ](#thumbs-bg-color )
* [@thumbs-fg-color ](#thumbs-fg-color )
* [@thumbs-hint-bg-color ](#thumbs-hint-bg-color )
* [@thumbs-hint-fg-color ](#thumbs-hint-fg-color )
* [@thumbs-select-fg-color ](#thumbs-select-fg-color )
2019-12-11 18:02:17 +00:00
* [@thumbs-select-bg-color ](#thumbs-select-bg-color )
2019-08-01 18:41:20 +00:00
* [@thumbs-contrast ](#thumbs-contrast )
2019-03-20 23:31:28 +00:00
2019-05-02 20:20:33 +00:00
### @thumbs-key
`default: space`
Choose which key is used to enter in thumbs mode.
For example:
```
set -g @thumbs -key F
```
2019-03-20 23:31:28 +00:00
### @thumbs-alphabet
`default: qwerty`
Choose which set of characters is used to build hints. Review all [available alphabets ](#Alphabets )
For example:
2019-02-28 18:51:33 +00:00
```
2019-03-20 23:31:28 +00:00
set -g @thumbs -alphabet dvorak-homerow
2019-02-28 18:51:33 +00:00
```
2019-03-20 23:31:28 +00:00
### @thumbs-reverse
`default: disabled`
Choose in which direction you want to assign hints. Useful to get shorter hints closer to the cursor.
For example:
2019-02-28 18:51:33 +00:00
```
2019-03-20 23:31:28 +00:00
set -g @thumbs -reverse
```
2019-02-28 18:51:33 +00:00
2019-03-20 23:31:28 +00:00
### @thumbs-unique
2019-02-28 18:51:33 +00:00
2019-03-20 23:31:28 +00:00
`default: disabled`
2019-02-28 18:51:33 +00:00
2019-03-20 23:31:28 +00:00
Choose if you want to assign the same hint for the same matched strings.
2019-02-28 18:51:33 +00:00
2019-03-20 23:31:28 +00:00
For example:
2019-03-02 18:49:00 +00:00
2019-03-20 23:31:28 +00:00
```
set -g @thumbs -unique
2019-02-28 18:51:33 +00:00
```
2019-03-20 23:31:28 +00:00
### @thumbs-position
2019-03-10 09:35:42 +00:00
2019-03-20 23:31:28 +00:00
`default: left`
Choose where do you want to show the hint in the matched string. Options (left, right).
For example:
```
set -g @thumbs -position right
```
### @thumbs-regexp-N
2020-05-02 22:45:29 +00:00
Add extra patterns to match. This parameter can have multiple instances.
2019-03-20 23:31:28 +00:00
For example:
```
2019-12-08 23:21:25 +00:00
set -g @thumbs -regexp-1 '[a-z]+@[a-z]+.com' # Match emails
set -g @thumbs -regexp-2 '[a-f0-9]{2}:[a-f0-9]{2}:[a-f0-9]{2}:[a-f0-9]{2}:[a-f0-9]{2}:[a-f0-9]{2}:' # Match MAC addresses
2019-03-20 23:31:28 +00:00
```
### @thumbs-command
`default: 'tmux set-buffer {}'`
2019-12-03 20:54:04 +00:00
Choose which command execute when you press a hint. `tmux-thumbs` will replace `{}` with the picked hint.
2019-03-20 23:31:28 +00:00
For example:
```
2019-12-11 11:22:46 +00:00
set -g @thumbs -command 'echo -n {} | pbcopy'
2019-03-20 23:31:28 +00:00
```
### @thumbs-upcase-command
2019-12-08 11:02:58 +00:00
`default: 'tmux set-buffer {} && tmux paste-buffer'`
2019-03-20 23:31:28 +00:00
2019-12-03 20:54:04 +00:00
Choose which command execute when you press a upcase hint. `tmux-thumbs` will replace `{}` with the picked hint.
2019-03-20 23:31:28 +00:00
For example:
```
2019-12-11 11:22:09 +00:00
set -g @thumbs -upcase-command 'echo -n {} | pbcopy'
2019-03-20 23:31:28 +00:00
```
### @thumbs-bg-color
`default: black`
Sets the background color for matches
For example:
```
set -g @thumbs -bg-color blue
```
### @thumbs-fg-color
`default: green`
2019-12-11 18:02:17 +00:00
Sets the foreground color for matches
2019-03-20 23:31:28 +00:00
For example:
```
set -g @thumbs -fg-color green
```
### @thumbs-hint-bg-color
`default: black`
2019-03-10 09:35:42 +00:00
2019-03-20 23:31:28 +00:00
Sets the background color for hints
2019-02-28 18:51:33 +00:00
2019-03-20 23:31:28 +00:00
For example:
```
set -g @thumbs -hint-bg-color blue
```
2019-02-28 18:51:33 +00:00
2019-03-20 23:31:28 +00:00
### @thumbs-hint-fg-color
`default: yellow`
2019-12-11 18:02:17 +00:00
Sets the foreground color for hints
2019-03-20 23:31:28 +00:00
For example:
```
set -g @thumbs -hint-fg-color green
```
### @thumbs-select-fg-color
`default: blue`
2019-12-11 18:02:17 +00:00
Sets the foreground color for selection
2019-03-20 23:31:28 +00:00
For example:
```
set -g @thumbs -select-fg-color red
```
2019-12-11 18:02:17 +00:00
### @thumbs-select-bg-color
`default: black`
Sets the background color for selection
For example:
```
set -g @thumbs -select-bg-color red
```
2019-08-01 18:41:20 +00:00
### @thumbs-contrast
`default: 0`
Displays hint character in square brackets for extra visibility.
For example:
```
set -g @thumbs -contrast 1
```
2019-03-20 23:31:28 +00:00
#### Colors
This is the list of available colors:
- black
- red
- green
- yellow
- blue
- magenta
- cyan
- white
- default
2019-02-28 18:51:33 +00:00
2019-03-09 22:39:16 +00:00
#### Alphabets
2019-02-28 18:51:33 +00:00
2019-02-28 23:11:16 +00:00
This is the list of available alphabets:
2019-02-28 18:51:33 +00:00
- `numeric` : 1234567890
- `abcd` : abcd
- `qwerty` : asdfqwerzxcvjklmiuopghtybn
- `qwerty-homerow` : asdfjklgh
- `qwerty-left-hand` : asdfqwerzcxv
- `qwerty-right-hand` : jkluiopmyhn
- `azerty` : qsdfazerwxcvjklmuiopghtybn
- `azerty-homerow` : qsdfjkmgh
- `azerty-left-hand` : qsdfazerwxcv
- `azerty-right-hand` : jklmuiophyn
- `qwertz` : asdfqweryxcvjkluiopmghtzbn
- `qwertz-homerow` : asdfghjkl
- `qwertz-left-hand` : asdfqweryxcv
- `qwertz-right-hand` : jkluiopmhzn
- `dvorak` : aoeuqjkxpyhtnsgcrlmwvzfidb
- `dvorak-homerow` : aoeuhtnsid
- `dvorak-left-hand` : aoeupqjkyix
- `dvorak-right-hand` : htnsgcrlmwvz
- `colemak` : arstqwfpzxcvneioluymdhgjbk
- `colemak-homerow` : arstneiodh
- `colemak-left-hand` : arstqwfpzxcv
- `colemak-right-hand` : neioluymjhk
2019-03-20 23:31:28 +00:00
## Extra features
2019-02-28 23:11:16 +00:00
2020-05-02 22:45:29 +00:00
- **Arrow navigation:** You can use the arrows to move around between all matched items.
2019-03-20 23:31:28 +00:00
- **Auto paste:** If your last typed hint character is uppercase, you are going to pick and paste the desired hint.
2019-12-14 00:41:16 +00:00
- **Multi selection:** If you run thumb with multi selection mode you will be able to choose multiple hints pressing the desired letter and `Space` to finalize the selection.
2019-02-28 23:11:16 +00:00
2019-12-06 16:23:33 +00:00
## Tmux compatibility
This is the known list of versions of `tmux` compatible with `tmux-thumbs` :
| Version | Compatible |
|:-------:|:----------:|
| 3.0a | ❓ |
2019-12-08 11:09:48 +00:00
| 2.9a | ✅ |
2019-12-06 16:23:33 +00:00
| 2.8 | ❓ |
| 2.7 | ❓ |
| 2.6 | ✅ |
| 2.5 | ❓ |
| 2.4 | ❓ |
| 2.3 | ❓ |
| 1.8 | ❓ |
| 1.7 | ❓ |
If you can check hat `tmux-thumbs` is or is not compatible with some specific version of `tmux` , let me know.
2019-12-14 00:32:14 +00:00
## Standalone `thumbs`
This project started as a `tmux` plugin but after reviewing it with some
2020-05-02 22:45:29 +00:00
friends we decided to explore all the possibilities of decoupling thumbs from
2020-01-30 08:38:29 +00:00
`tmux` . You can install it with a simple command:
```
cargo install thumbs
```
And those are all available options:
2019-12-14 00:32:14 +00:00
```
2020-05-05 18:31:35 +00:00
thumbs 0.4.1
2019-12-14 00:32:14 +00:00
A lightning fast version copy/pasting like vimium/vimperator
USAGE:
thumbs [FLAGS] [OPTIONS]
FLAGS:
-c, --contrast Put square brackets around hint for visibility
-h, --help Prints help information
-m, --multi Enable multi-selection
-r, --reverse Reverse the order for assigned hints
-u, --unique Don't show duplicated hints for the same match
-V, --version Prints version information
OPTIONS:
-a, --alphabet < alphabet > Sets the alphabet [default: qwerty]
--bg-color < background_color > Sets the background color for matches [default: black]
--fg-color < foreground_color > Sets the foregroud color for matches [default: green]
-f, --format < format >
Specifies the out format for the picked hint. (%U: Upcase, %H: Hint) [default: %H]
--hint-bg-color < hint_background_color > Sets the background color for hints [default: black]
--hint-fg-color < hint_foreground_color > Sets the foregroud color for hints [default: yellow]
-p, --position < position > Hint position [default: left]
-x, --regexp < regexp > ... Use this regexp as extra pattern to match
--select-bg-color < select_background_color > Sets the background color for selection [default: black]
--select-fg-color < select_foreground_color > Sets the foreground color for selection [default: blue]
2020-05-04 17:37:21 +00:00
-t, --target < target > Stores the hint in the specified path
2019-12-14 00:32:14 +00:00
```
If you want to enjoy terminal hints, you can do things like this without `tmux` :
```
> alias pick='thumbs -u -r | xsel --clipboard -i'
> git log | pick
```
2019-12-14 00:41:16 +00:00
Or multi selection:
```
> git log | thumbs -m
1df9fa69c8831ac042c6466af81e65402ee2a007
4897dc4ecbd2ac90b17de95e00e9e75bb540e37f
```
2020-01-30 08:38:29 +00:00
Standalone `thumbs` has some similarities to [FZF ](https://github.com/junegunn/fzf ).
2019-03-10 09:35:42 +00:00
## Background
2019-02-28 18:51:33 +00:00
2019-03-27 23:53:04 +00:00
As I said, this project is based in [tmux-fingers ](https://github.com/Morantron/tmux-fingers ). Morantron did an extraordinary job, building all necessary pieces in Bash to achieve the text picker behaviour. He only deserves my gratitude for all the time I have been using [tmux-fingers ](https://github.com/Morantron/tmux-fingers ).
2019-03-10 09:35:42 +00:00
During a [Fosdem ](https://fosdem.org/ ) conf, we had the idea to rewrite it to another language. He had these thoughts many times ago but it was hard to start from scratch. So, we decided to start playing with Node.js and [react-blessed ](https://github.com/Yomguithereal/react-blessed ), but we detected some unacceptable latency when the program booted. We didn't investigate much about this latency.
During those days another alternative appeared, called [tmux-picker ](https://github.com/RTBHOUSE/tmux-picker ), implemented in python and reusing many parts from [tmux-fingers ](https://github.com/Morantron/tmux-fingers ). It was nice, because it was fast and added original terminal color support.
2019-02-28 18:51:33 +00:00
2019-03-10 09:35:42 +00:00
I was curious to know if this was possible to be written in [Rust ](https://www.rust-lang.org/ ), and soon I realized that was something doable. The ability to implement tests for all critic parts of the application give you a great confidence about it. On the other hand, Rust has an awesome community that lets you achieve this kind of project in a short period of time.
2019-03-09 22:39:16 +00:00
2019-12-14 00:32:14 +00:00
## Roadmap
- [X] Support multi selection
- [X] Decouple `tmux-thumbs` from `tmux`
- [ ] Code [Kitty ](https://github.com/kovidgoyal/kitty ) plugin, now that `thumbs` can run standalone
2019-03-09 22:39:16 +00:00
## Contribute
This project started as a side project to learn Rust, so I'm sure that is full
of mistakes and areas to be improve. If you think you can tweak the code to
make it better, I'll really appreaciate a pull request. ;)
2019-02-28 18:51:33 +00:00
# License
[MIT ](https://github.com/fcsonline/tmux-thumbs/blob/master/LICENSE )