Zsh ZLE tip

In my home directory, I have several subdirectories that contain my software projects, for example:

/home/me
        /src
             /wp-plugin-x
             /project-y
        /config
               /puppet
               /nagios
               /package-z

Some of these trees can get quite deep, and sometimes, when I’m working in one of the directories deep in the tree, I need to access a file somewhere else in the tree. Now, you can do that via ../../../path/to/file, or ~/src/project/path/to/file, but neither are very efficient. I wanted a way to efficiently refer to the root of the current project.

Finding the root is easy. In my case, $(pwd) | cut -d / -f 1-5 gives me what I need. Now I use some Zsh trickery to efficiently use that in commands. I want ‘~~‘ to expand to this directory. Enter the following code in my .zshrc:

my-expand-tilde() {
  local MATCH
  if [[ $LBUFFER = *~ ]]; then
    p=$(pwd | cut -d / -f 1-5)
    LBUFFER=${LBUFFER%~}
    LBUFFER+="${p}/"
  else
    LBUFFER+=~
  fi
}

zle -N my-expand-tilde
bindkey "~" my-expand-tilde

Every time you press ‘~’, the widget ‘my-expand-tilde’ is run. If this is the second ‘~’ in a row, it will strip of the previous ‘~’ and add the root of the current project to the command I am typing. So effectively, whenever I type ‘~~’, it is immediately substituted by the directory that I need.

Ideas for this code where borrowed from ZSH-LOVERS(1), look in that page for a widget named ‘rationalise-dot‘.

Both comments and pings are currently closed.

Comments are closed.