It’s just so good.
fzf and zoxide are probably my two most game changing cli tools. They make the terminal feel so good.
fzf and zoxide are probably my two most game changing cli tools. They make the terminal feel so good.
I haven’t used it in a while though because I switched from git to jj.
#!ruby
if ARGV.size < 1
puts "Usage: wz path"
exit
end
# Get current working directory
current_dir = "#{Dir.pwd}/"
# puts "Current directory: #{current_dir}"
# Run git worktree list and capture the output
worktree_output = `git worktree list`
# Split output into lines and process
worktrees = worktree_output.split("\n")
# Extract all worktree paths
worktree_paths = worktrees.map { |wt| "#{wt.split.first}/" }
# puts "Worktree paths: #{worktree_paths}"
# First path is always the root worktree
root_wt_path = worktree_paths[0]
# Find current worktree by comparing with pwd
current_wt_path = worktree_paths.find do |path|
# puts "Path: #{path}"
current_dir.start_with?(path)
end
if current_wt_path == root_wt_path
zoxide_destination = `zoxide query --exclude "#{Dir.pwd}" "#{ARGV[0]}"`.strip
puts zoxide_destination
exit 0
end
current_dir_in_root_wt = current_dir.sub(current_wt_path, root_wt_path)
Dir.chdir(current_dir_in_root_wt)
current_dir = "#{Dir.pwd}/"
# puts "Current directory: #{current_dir}"
# puts "Querying zoxide for #{ARGV[0]}"
zoxide_destination = `zoxide query --exclude "#{Dir.pwd}" "#{ARGV[0]}"`.strip
# puts "zoxide destination: #{zoxide_destination}"
Dir.chdir(zoxide_destination)
current_dir = "#{Dir.pwd}/"
if current_dir.start_with?(root_wt_path)
target_dir = current_dir.sub(root_wt_path, current_wt_path)
puts target_dir
exit 0
end
puts Dir.pwd
exit 0
Then put this function in your .zshrc: # Worktree aware form of zoxide's z command.
function w() {
cd $(wz $@)
}