zsh-apple-touchbar
Make your touchbar more powerful.
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
Customization
Automatic
You can define simple commands for FN keys in config.yml
file.
Structure
File should have two base keys:
default_view
- default view to show.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:
text
- text that will show on touchbar key.command
orview
-command
means executing some command that under is this key andview
means show view that is under this keyback
- under this key should be a view name that will be shown after executing some command.
Example
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:
cd $ZSH_CUSTOM/plugins/zsh-apple-touchbar
and run generate.rb
file:
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.
function first_view() {
remove_and_unbind_keys
set_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_keys
set_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
function
This function accept 4 arguments:
- number of key (from 1 to 12)
- key text
command
orview
- 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.
zle -N first
zle -N second
Main function
Here you need to define which view to show for every state.
precmd_apple_touchbar() {
case $state in
first) first_view ;;
second) second_view ;;
esac
}
Full example
source ${0:A:h}/functions.zsh
set_state 'first'
function first_view() {
remove_and_unbind_keys
set_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_keys
set_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_view
precmd_apple_touchbar() {
case $state in
first) first_view ;;
second) second_view ;;
esac
}
autoload -Uz add-zsh-hook
add-zsh-hook precmd precmd_apple_touchbar