Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/zsh-users/zsh-apple-touchbar
Make your touchbar more powerful.
https://github.com/zsh-users/zsh-apple-touchbar
apple iterm2 macbook-pro on-my-zsh touchbar touchbar-support zsh zsh-apple-touchbar zsh-custom zsh-plugin
Last synced: 1 day ago
JSON representation
Make your touchbar more powerful.
- Host: GitHub
- URL: https://github.com/zsh-users/zsh-apple-touchbar
- Owner: zsh-users
- License: mit
- Created: 2018-04-14T06:28:46.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2023-03-27T19:16:39.000Z (almost 2 years ago)
- Last Synced: 2025-01-29T05:09:41.847Z (9 days ago)
- Topics: apple, iterm2, macbook-pro, on-my-zsh, touchbar, touchbar-support, zsh, zsh-apple-touchbar, zsh-custom, zsh-plugin
- Language: Ruby
- Size: 1.24 MB
- Stars: 350
- Watchers: 10
- Forks: 22
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# zsh-apple-touchbar
Make your touchbar more powerful.
![preview](./preview.gif)
## Requirements
* iTerm2 3.1 or later
* zsh
* ruby 2.3.4 or later (only if you want automatic generation)**In iterm2:** Go to `View -> Customize Tool Bar...` and drag & drop the `Fn` module
## Installation
### Manual
1. Clone this repository somewhere on your machine. This guide will assume `~/.zsh/zsh-apple-touchbar`.
```sh
git clone https://github.com/zsh-users/zsh-apple-touchbar ~/.zsh/zsh-apple-touchbar
```2. Add the following to your `.zshrc`:
```sh
source ~/.zsh/zsh-apple-touchbar/zsh-apple-touchbar.zsh
```3. Start a new terminal session.
### Oh My Zsh
1. Clone this repository into `$ZSH_CUSTOM/plugins` (by default `~/.oh-my-zsh/custom/plugins`)
```sh
git clone https://github.com/zsh-users/zsh-apple-touchbar $ZSH_CUSTOM/plugins/zsh-apple-touchbar
```2. Add the plugin to the list of plugins for Oh My Zsh to load:
```sh
plugins=(zsh-apple-touchbar)
```3. Start a new terminal session.
## Customization
### Automatic
You can define simple commands for FN keys in `config.yml` file.
#### Structure
File should have two base keys:
1. `default_view` - default view to show.
2. `views` - list of defined views.`views` section contains views you want to show. **Key is a view name.**
Under view name key you should define next keys:
1. `text` - text that will show on touchbar key.
2. `command` or `view` - `command` means executing some command that under is this key and `view` means show view that is under this key
3. `back` - under this key should be a view name that will be shown after executing some command.#### Example
```yml
default_view: first
views:
first:
1:
text: 👉 pwd
command: pwd |tr -d "\\n" |pbcopy
2:
text: second view
view: second
3:
text: third view
view: third
second:
1:
text: 👈 back
view: first
2:
text: current path
command: pwd
back: first
third:
1:
text: 👈 back
view: first
2:
text: ls
command: ls -la
```For generating view from `config.yml` file go to its folder:
```sh
cd $ZSH_CUSTOM/plugins/zsh-apple-touchbar
```and run `generate.rb` file:
```sh
ruby generate.rb
```### Custom
If you need more complicated logic you can rewrite `zsh-apple-touchbar.zsh` file on your own.#### View functions
For each `view` you need to define separate function that will contain keys creation. E.G.```bash
function first_view() {
remove_and_unbind_keysset_state 'first'
create_key 1 '👉 pwd' 'pwd |tr -d "\\n" |pbcopy' '-s'
create_key 2 'second view' 'second_view'
}function second_view() {
remove_and_unbind_keysset_state 'second'
create_key 1 '👈 back' 'first_view'
create_key 2 'current path' 'pwd' '-s'set_state 'first'
}
```In every function first, you need to remove and unbind old keys with `remove_and_unbind_keys` function.
Then you need to set a state (`state` variable define which view to show after reinitialization) with `set_state` function.
After that, you can create keys for this view with `create_key` function.
And after keys part you can set new state (if you want to show some view after executing key command).
#### Keys creation
Keys creates with `create_key` functionThis function accept 4 arguments:
1. number of key (from 1 to 12)
2. key text
3. `command` or `view`
4. bind option (`-s` if third argument isn't a view, nothing if it is)#### Init widgets
For calling views in main function you need to init widgets for every view function.```bash
zle -N first
zle -N second
```#### Main function
Here you need to define which view to show for every state.```bash
precmd_apple_touchbar() {
case $state in
first) first_view ;;
second) second_view ;;
esac
}
```#### Full example
```bash
source ${0:A:h}/functions.zshset_state 'first'
function first_view() {
remove_and_unbind_keysset_state 'first'
create_key 1 '👉 pwd' 'pwd |tr -d "\\n" |pbcopy' '-s'
create_key 2 'second view' 'second_view'
}function second_view() {
remove_and_unbind_keysset_state 'second'
create_key 1 '👈 back' 'first_view'
create_key 2 'current path' 'pwd' '-s'set_state 'first'
}zle -N first_view
zle -N second_viewprecmd_apple_touchbar() {
case $state in
first) first_view ;;
second) second_view ;;
esac
}autoload -Uz add-zsh-hook
add-zsh-hook precmd precmd_apple_touchbar
```## Contributing
If you have some proposals how to improve this boilerplate feel free to open issues and send pull requests!
1. Fork it
2. Create your feature branch (git checkout -b my-new-feature)
3. Commit your changes (git commit -am 'Add some feature')
4. Push to the branch (git push origin my-new-feature)
5. Create new Pull Request## License
Available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).