diff --git a/README.md b/README.md index 326b735474..24445cb53f 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Installation ------------ Prezto will work with any recent release of Zsh, but the minimum recommended -version is 4.3.10. +version is 4.3.11. 1. Launch Zsh: @@ -36,7 +36,7 @@ version is 4.3.10. ### Troubleshooting If you are not able to find certain commands after switching to *Prezto*, -modify the `PATH` variable in *~/.zshenv* then open a new Zsh terminal +modify the `PATH` variable in *~/.zprofile* then open a new Zsh terminal window or tab. Updating @@ -85,7 +85,8 @@ License (The MIT License) -Copyright (c) 2009-2012 Robby Russell, Sorin Ionescu, and contributors. +Copyright (c) 2009-2011 Robby Russell and contributors. +Copyright (c) 2011-2014 Sorin Ionescu and contributors. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/prezto/init.zsh b/prezto/init.zsh index f4a9faa594..8fd01218a9 100644 --- a/prezto/init.zsh +++ b/prezto/init.zsh @@ -10,7 +10,7 @@ # # Check for the minimum supported version. -min_zsh_version='4.3.10' +min_zsh_version='4.3.11' if ! autoload -Uz is-at-least || ! is-at-least "$min_zsh_version"; then print "prezto: old shell detected, minimum required: $min_zsh_version" >&2 return 1 @@ -25,7 +25,7 @@ unset min_zsh_version function pmodload { local -a pmodules local pmodule - local pfunction_glob='^([_.]*|prompt_*_setup|README*)(.N:t)' + local pfunction_glob='^([_.]*|prompt_*_setup|README*)(-.N:t)' # $argv is overridden in the anonymous function. pmodules=("$argv[@]") diff --git a/prezto/modules/README.md b/prezto/modules/README.md index 63484e4ca7..42583980d0 100644 --- a/prezto/modules/README.md +++ b/prezto/modules/README.md @@ -31,6 +31,16 @@ Dpkg Defines dpkg aliases and functions. +Editor +------ + +Sets key bindings. + +Emacs +----- + +Enables Emacs dependency management. + Environment ----------- @@ -41,13 +51,19 @@ Fasd Maintains a frequently used file and directory list for fast access. +Git +--- + +Enhances the Git distributed version control system by providing aliases, +functions and by exposing repository status information to prompts. + GNU Utility ----------- Provides for the interactive use of GNU utilities on non-GNU systems. GPG ---------- +--- Provides for an easier use of GPG by setting up gpg-agent. @@ -61,16 +77,16 @@ Helper Provides helper functions for developing modules. -History Substring Search ------------------------- - -Integrates zsh-history-substring-search into Prezto. - History ------- Sets history options and defines history aliases. +History Substring Search +------------------------ + +Integrates zsh-history-substring-search into Prezto. + Homebrew -------- @@ -86,6 +102,11 @@ Node.js Provides utility functions for Node.js and loads npm completion. +Ocaml +----- + +Initializes Ocaml package management. + OSX --- @@ -137,10 +158,10 @@ Spectrum Provides for easier use of 256 colors and effects. -SSH-Agent ---------- +SSH +--- -Provides for an easier use of ssh-agent. +Provides for an easier use of SSH by setting up ssh-agent. Syntax Highlighting ------------------- diff --git a/prezto/modules/command-not-found/README.md b/prezto/modules/command-not-found/README.md index 91a67f25c5..691806a427 100644 --- a/prezto/modules/command-not-found/README.md +++ b/prezto/modules/command-not-found/README.md @@ -1,7 +1,8 @@ Command-Not-Found ================= -Loads the [command-not-found][1] tool on Debian-based distributions. +Displays installation information for not found commands by loading the +[command-not-found][1] tool on Debian-based and Arch Linux-based distributions. Authors ------- diff --git a/prezto/modules/command-not-found/init.zsh b/prezto/modules/command-not-found/init.zsh index 7b554e86ac..c4d1b9f9ee 100644 --- a/prezto/modules/command-not-found/init.zsh +++ b/prezto/modules/command-not-found/init.zsh @@ -5,10 +5,14 @@ # Joseph Jon Booker # +# Load command-not-found on Debian-based distributions. +if [[ -s '/etc/zsh_command_not_found' ]]; then + source '/etc/zsh_command_not_found' +# Load command-not-found on Arch Linux-based distributions. +elif [[ -s '/usr/share/doc/pkgfile/command-not-found.zsh' ]]; then + source '/usr/share/doc/pkgfile/command-not-found.zsh' # Return if requirements are not found. -if [[ ! -s '/etc/zsh_command_not_found' ]]; then +else return 1 fi -source '/etc/zsh_command_not_found' - diff --git a/prezto/modules/completion/external b/prezto/modules/completion/external index 662229f6f0..4ffedd4ac8 160000 --- a/prezto/modules/completion/external +++ b/prezto/modules/completion/external @@ -1 +1 @@ -Subproject commit 662229f6f0ce391ef7c1a41c398e28a31e847182 +Subproject commit 4ffedd4ac8ec5b5911046c93ed9f0bb017ead25f diff --git a/prezto/modules/editor/init.zsh b/prezto/modules/editor/init.zsh index 0fe9885836..9a347a0948 100644 --- a/prezto/modules/editor/init.zsh +++ b/prezto/modules/editor/init.zsh @@ -107,31 +107,40 @@ function editor-info { } zle -N editor-info -# Ensures that $terminfo values are valid and updates editor information when -# the keymap changes. -function zle-keymap-select zle-line-init zle-line-finish { +# Updates editor information when the keymap changes. +function zle-keymap-select { + zle editor-info +} +zle -N zle-keymap-select + +# Enables terminal application mode and updates editor information. +function zle-line-init { # The terminal must be in application mode when ZLE is active for $terminfo # values to be valid. - if (( $+terminfo[smkx] && $+terminfo[rmkx] )); then - case "$0" in - (zle-line-init) - # Enable terminal application mode. - echoti smkx - ;; - (zle-line-finish) - # Disable terminal application mode. - echoti rmkx - ;; - esac + if (( $+terminfo[smkx] )); then + # Enable terminal application mode. + echoti smkx fi # Update editor information. zle editor-info } -zle -N zle-keymap-select -zle -N zle-line-finish zle -N zle-line-init +# Disables terminal application mode and updates editor information. +function zle-line-finish { + # The terminal must be in application mode when ZLE is active for $terminfo + # values to be valid. + if (( $+terminfo[rmkx] )); then + # Disable terminal application mode. + echoti rmkx + fi + + # Update editor information. + zle editor-info +} +zle -N zle-line-finish + # Toggles emacs overwrite mode and updates editor information. function overwrite-mode { zle .overwrite-mode diff --git a/prezto/modules/gpg/init.zsh b/prezto/modules/gpg/init.zsh index 2e4c4eab02..48f1715a83 100644 --- a/prezto/modules/gpg/init.zsh +++ b/prezto/modules/gpg/init.zsh @@ -12,7 +12,7 @@ fi # Set the default paths to gpg-agent files. _gpg_agent_conf="$HOME/.gnupg/gpg-agent.conf" -_gpg_agent_env="$TMPDIR/gpg-agent.env" +_gpg_agent_env="${TMPDIR:-/tmp}/gpg-agent.env" # Start gpg-agent if not started. if ! ps -U "$USER" -o ucomm | grep -q gpg-agent; then diff --git a/prezto/modules/history-substring-search/external b/prezto/modules/history-substring-search/external index d9b28ed7f9..1e76804052 160000 --- a/prezto/modules/history-substring-search/external +++ b/prezto/modules/history-substring-search/external @@ -1 +1 @@ -Subproject commit d9b28ed7f9c62d843c6f3e599ab4f3aa0bdd37b5 +Subproject commit 1e7680405239a835aa403a7457cad23750f98e72 diff --git a/prezto/modules/ocaml/README.md b/prezto/modules/ocaml/README.md new file mode 100644 index 0000000000..7d56fec8a5 --- /dev/null +++ b/prezto/modules/ocaml/README.md @@ -0,0 +1,28 @@ +Ocaml +===== + +Initializes [Ocaml][1] package management. + +OPAM +---- + +[OPAM][2] is a package manager for Ocaml. + +This module enables local package installation with OPAM by extending the +relevant path and Ocaml variables. + +### Usage + +Install packages to your local package directory with `opam install`. + +Authors +------- + +*The authors of this module should be contacted via the [issue tracker][3].* + + - [Sebastian Wiesner](https://github.com/lunaryorn) + +[1]: http://ocaml.org/ +[2]: http://opam.ocamlpro.com/ +[3]: https://github.com/sorin-ionescu/prezto/issues + diff --git a/prezto/modules/ocaml/init.zsh b/prezto/modules/ocaml/init.zsh new file mode 100644 index 0000000000..2e5b71e552 --- /dev/null +++ b/prezto/modules/ocaml/init.zsh @@ -0,0 +1,15 @@ +# +# Initializes Ocaml package management. +# +# Authors: +# Sebastian Wiesner +# + +# Return if requirements are not found. +if (( ! $+commands[opam] )); then + return 1 +fi + +# Initialize OPAM. +eval "$(opam config env)" + diff --git a/prezto/modules/pacman/functions/pacman-list-disowned b/prezto/modules/pacman/functions/pacman-list-disowned index 2cd8a92bbb..d6b6f289b2 100644 --- a/prezto/modules/pacman/functions/pacman-list-disowned +++ b/prezto/modules/pacman/functions/pacman-list-disowned @@ -6,7 +6,7 @@ # Sorin Ionescu # -local tmp="$TMPDIR/pacman-disowned-$UID-$$" +local tmp="${TMPDIR:-/tmp}/pacman-disowned-$UID-$$" local db="$tmp/db" local fs="$tmp/fs" diff --git a/prezto/modules/pacman/init.zsh b/prezto/modules/pacman/init.zsh index bbbdcfb523..8b9a43305b 100644 --- a/prezto/modules/pacman/init.zsh +++ b/prezto/modules/pacman/init.zsh @@ -27,6 +27,8 @@ if (( $+commands[$_pacman_frontend] )); then if [[ -s "${0:h}/${_pacman_frontend}.zsh" ]]; then source "${0:h}/${_pacman_frontend}.zsh" fi +else + _pacman_sudo='sudo ' fi # @@ -34,49 +36,49 @@ fi # # Pacman. -alias pac='pacman' +alias pac= "${_pacman_frontend}" # Installs packages from repositories. -alias paci='sudo pacman --sync' +alias paci="${_pacman_sudo}${_pacman_frontend} --sync" # Installs packages from files. -alias pacI='sudo pacman --upgrade' +alias pacI="${_pacman_sudo}${_pacman_frontend} --upgrade" # Removes packages and unneeded dependencies. -alias pacx='sudo pacman --remove' +alias pacx="${_pacman_sudo}${_pacman_frontend} --remove" # Removes packages, their configuration, and unneeded dependencies. -alias pacX='sudo pacman --remove --nosave --recursive' +alias pacX="${_pacman_sudo}${_pacman_frontend} --remove --nosave --recursive" # Displays information about a package from the repositories. -alias pacq='pacman --sync --info' +alias pacq="${_pacman_frontend} --sync --info" # Displays information about a package from the local database. -alias pacQ='pacman --query --info' +alias pacQ="${_pacman_frontend} --query --info" # Searches for packages in the repositories. -alias pacs='pacman --sync --search' +alias pacs="${_pacman_frontend} --sync --search" # Searches for packages in the local database. -alias pacS='pacman --query --search' +alias pacS="${_pacman_frontend} --query --search" # Lists orphan packages. -alias pacman-list-orphans='sudo pacman --query --deps --unrequired' +alias pacman-list-orphans="${_pacman_sudo}${_pacman_frontend} --query --deps --unrequired" # Removes orphan packages. -alias pacman-remove-orphans='sudo pacman --remove --recursive $(pacman --quiet --query --deps --unrequired)' +alias pacman-remove-orphans="${_pacman_sudo}${_pacman_frontend} --remove --recursive \$(${_pacman_frontend} --quiet --query --deps --unrequired)" # Synchronizes the local package and Arch Build System databases against the # repositories. if (( $+commands[abs] )); then - alias pacu='sudo pacman --sync --refresh && sudo abs' + alias pacu="${_pacman_sudo}${_pacman_frontend} --sync --refresh && ${_pacman_sudo}abs" else - alias pacu='sudo pacman --sync --refresh' + alias pacu="${_pacman_sudo}${_pacman_frontend} --sync --refresh" fi # Synchronizes the local package database against the repositories then # upgrades outdated packages. -alias pacU='sudo pacman --sync --refresh --sysupgrade' +alias pacU="${_pacman_sudo}${_pacman_frontend} --sync --refresh --sysupgrade" -unset _pacman_frontend +unset _pacman_{frontend,sudo} diff --git a/prezto/modules/pacman/yaourt.zsh b/prezto/modules/pacman/yaourt.zsh index fb2a8dc2a0..f4709e083e 100644 --- a/prezto/modules/pacman/yaourt.zsh +++ b/prezto/modules/pacman/yaourt.zsh @@ -11,9 +11,9 @@ # Disable color. if ! zstyle -t ':prezto:module:pacman:yaourt' color; then - alias pacman='pacman --nocolor' + alias pacman='yaourt --nocolor' fi # Manages .pac* files. -alias pacc='pacman -C' +alias pacc='yaourt -C' diff --git a/prezto/modules/rails/init.zsh b/prezto/modules/rails/init.zsh index e51185bb8c..70f50ce8ea 100644 --- a/prezto/modules/rails/init.zsh +++ b/prezto/modules/rails/init.zsh @@ -7,39 +7,30 @@ # Sorin Ionescu # +# Load dependencies. +pmodload 'ruby' + # Return if requirements are not found. -if (( ! $+commands[rails] )); then +if (( ! $+commands[bundle] )); then return 1 fi # -# Aliases (Compatible with Rails 2) -# - -alias ror='rails' -alias rorc='_rails-command console' -alias rordc='_rails-command dbconsole' -alias rordm='rake db:migrate' -alias rordM='rake db:migrate db:test:clone' -alias rordr='rake db:rollback' -alias rorg='_rails-command generate' -alias rorl='tail -f log/development.log' -alias rorlc='rake log:clear' -alias rorp='_rails-command plugin' -alias rorr='_rails-command runner' -alias rors='_rails-command server' -alias rorsd='_rails-command server --debugger' -alias rorx='_rails-command destroy' - -# -# Functions +# Aliases # -function _rails-command { - if [[ -e "script/server" ]]; then - ruby script/"$@" - else - ruby script/rails "$@" - fi -} +alias ror='bundle exec rails' +alias rorc='bundle exec rails console' +alias rordc='bundle exec rails dbconsole' +alias rordm='bundle exec rake db:migrate' +alias rordM='bundle exec rake db:migrate db:test:clone' +alias rordr='bundle exec rake db:rollback' +alias rorg='bundle exec rails generate' +alias rorl='tail -f "$(ruby-app-root)/log/development.log"' +alias rorlc='bundle exec rake log:clear' +alias rorp='bundle exec rails plugin' +alias rorr='bundle exec rails runner' +alias rors='bundle exec rails server' +alias rorsd='bundle exec rails server --debugger' +alias rorx='bundle exec rails destroy' diff --git a/prezto/modules/ruby/README.md b/prezto/modules/ruby/README.md index 42e63be6d1..e78d7576d6 100644 --- a/prezto/modules/ruby/README.md +++ b/prezto/modules/ruby/README.md @@ -59,6 +59,7 @@ Aliases Functions --------- + - `ruby-app-root` displays the path to the Ruby application root directory. - `ruby-info` exposes information about the Ruby environment via the `$ruby_info` associative array. diff --git a/prezto/modules/ruby/functions/ruby-app-root b/prezto/modules/ruby/functions/ruby-app-root new file mode 100644 index 0000000000..cff8966fc4 --- /dev/null +++ b/prezto/modules/ruby/functions/ruby-app-root @@ -0,0 +1,19 @@ +# +# Displays the path to the Ruby application root directory. +# +# Authors: +# Sorin Ionescu +# + +local root_dir="$PWD" + +while [[ "$root_dir" != '/' ]]; do + if [[ -f "$root_dir/Gemfile" ]]; then + print "$root_dir" + break + fi + root_dir="$root_dir:h" +done + +return 1 + diff --git a/prezto/modules/ruby/init.zsh b/prezto/modules/ruby/init.zsh index 1f748098e6..89b1345a08 100644 --- a/prezto/modules/ruby/init.zsh +++ b/prezto/modules/ruby/init.zsh @@ -43,15 +43,17 @@ alias rb='ruby' # Bundler if (( $+commands[bundle] )); then alias rbb='bundle' - alias rbbe='rbb exec' - alias rbbi='rbb install --path vendor/bundle' - alias rbbl='rbb list' - alias rbbo='rbb open' - alias rbbp='rbb package' - alias rbbu='rbb update' + alias rbbe='bundle exec' + alias rbbi='bundle install --path vendor/bundle' + alias rbbl='bundle list' + alias rbbo='bundle open' + alias rbbp='bundle package' + alias rbbu='bundle update' alias rbbI='rbbi \ - && rbb package \ + && bundle package \ && print .bundle >>! .gitignore \ + && print vendor/assets >>! .gitignore \ && print vendor/bundle >>! .gitignore \ && print vendor/cache >>! .gitignore' fi + diff --git a/prezto/modules/ssh/init.zsh b/prezto/modules/ssh/init.zsh index daa4372f50..608e34e628 100644 --- a/prezto/modules/ssh/init.zsh +++ b/prezto/modules/ssh/init.zsh @@ -14,10 +14,10 @@ fi _ssh_dir="$HOME/.ssh" # Set the path to the environment file if not set by another module. -_ssh_agent_env="${_ssh_agent_env:-$TMPDIR/ssh-agent.env}" +_ssh_agent_env="${_ssh_agent_env:-${TMPDIR:-/tmp}/ssh-agent.env}" # Set the path to the persistent authentication socket. -_ssh_agent_sock="$TMPDIR/ssh-agent.sock" +_ssh_agent_sock="${TMPDIR:-/tmp}/ssh-agent.sock" # Start ssh-agent if not started. if [[ ! -S "$SSH_AUTH_SOCK" ]]; then diff --git a/prezto/modules/syntax-highlighting/external b/prezto/modules/syntax-highlighting/external index dbd27cb30a..c83e266888 160000 --- a/prezto/modules/syntax-highlighting/external +++ b/prezto/modules/syntax-highlighting/external @@ -1 +1 @@ -Subproject commit dbd27cb30a710809dd070669c331574fdc15b397 +Subproject commit c83e266888b9ea4db05dbdc8d1df57ca34818eea diff --git a/prezto/modules/terminal/README.md b/prezto/modules/terminal/README.md index f1256c69e2..435d97205e 100644 --- a/prezto/modules/terminal/README.md +++ b/prezto/modules/terminal/README.md @@ -13,23 +13,33 @@ directory, add the following to *zpreztorc*: zstyle ':prezto:module:terminal' auto-title 'yes' +Auto titling is disabled inside terminal multiplexers, except inside dvtm, since +it interferes with window names defined in configuration files and profile +managers. + +To format terminal window and tab titles, add the following to *zpreztorc*: + + zstyle ':prezto:module:terminal:window-title' format '%n@%m: %s' + zstyle ':prezto:module:terminal:tab-title' format '%m: %s' + +`%s` will be replaced with the current working directory path or the currently +executing program name. + +For a list of sequences, see [Expansion of Prompt Sequences][1]. + Functions --------- -- `set-screen-window-title` sets the screen title. -- `set-terminal-tab-title` sets the terminal tab title. -- `set-terminal-window-title` sets the terminal window title. -- `set-titles-with-command` sets the screen and terminal titles with - a given command. -- `set-titles-with-path` sets the screen and terminal titles with a given path. +- `set-tab-title` sets the terminal tab title. +- `set-window-title` sets the terminal or terminal multiplexer window title. Authors ------- -*The authors of this module should be contacted via the [issue tracker][1].* +*The authors of this module should be contacted via the [issue tracker][2].* - - [James Cox](https://github.com/imajes) - [Sorin Ionescu](https://github.com/sorin-ionescu) -[1]: https://github.com/sorin-ionescu/prezto/issues +[1]: http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html#Expansion-of-Prompt-Sequences +[2]: https://github.com/sorin-ionescu/prezto/issues diff --git a/prezto/modules/terminal/init.zsh b/prezto/modules/terminal/init.zsh index dc78a3bec0..e35b77dbe5 100644 --- a/prezto/modules/terminal/init.zsh +++ b/prezto/modules/terminal/init.zsh @@ -2,122 +2,123 @@ # Sets terminal window and tab titles. # # Authors: -# James Cox # Sorin Ionescu # # Return if requirements are not found. -if [[ "$TERM" == 'dumb' ]]; then +if [[ "$TERM" == (dumb|linux|*bsd*) ]]; then return 1 fi -# Set the GNU Screen window number. -if [[ -n "$WINDOW" ]]; then - export SCREEN_NO="%B${WINDOW}%b " -else - export SCREEN_NO="" -fi +# Sets the terminal or terminal multiplexer window title. +function set-window-title { + local title_format{,ted} + zstyle -s ':prezto:module:terminal:window-title' format 'title_format' || title_format="%s" + zformat -f title_formatted "$title_format" "s:$argv" -# Sets the GNU Screen title. -function set-screen-window-title { if [[ "$TERM" == screen* ]]; then - printf "\ek%s\e\\" ${(V)argv} + title_format="\ek%s\e\\" + else + title_format="\e]2;%s\a" fi -} -# Sets the terminal window title. -function set-terminal-window-title { - if [[ "$TERM" == ((x|a|ml|dt|E)term*|(u|)rxvt*) ]]; then - printf "\e]2;%s\a" ${(V)argv} - fi + printf "$title_format" "${(V%)title_formatted}" } # Sets the terminal tab title. -function set-terminal-tab-title { - if [[ "$TERM" == ((x|a|ml|dt|E)term*|(u|)rxvt*) ]]; then - printf "\e]1;%s\a" ${(V)argv} - fi +function set-tab-title { + local title_format{,ted} + zstyle -s ':prezto:module:terminal:tab-title' format 'title_format' || title_format="%s" + zformat -f title_formatted "$title_format" "s:$argv" + + printf "\e]1;%s\a" ${(V%)title_formatted} } # Sets the tab and window titles with a given command. -function set-titles-with-command { - # Do not set the window and tab titles in Terminal.app because they are not - # reset upon command termination. - if [[ "$TERM_PROGRAM" == 'Apple_Terminal' ]]; then - return 1 - fi - +function _terminal-set-titles-with-command { emulate -L zsh setopt EXTENDED_GLOB # Get the command name that is under job control. - if [[ "${1[(w)1]}" == (fg|%*)(\;|) ]]; then + if [[ "${2[(w)1]}" == (fg|%*)(\;|) ]]; then # Get the job name, and, if missing, set it to the default %+. - local job_name="${${1[(wr)%*(\;|)]}:-%+}" + local job_name="${${2[(wr)%*(\;|)]}:-%+}" # Make a local copy for use in the subshell. local -A jobtexts_from_parent_shell jobtexts_from_parent_shell=(${(kv)jobtexts}) - jobs $job_name 2>/dev/null > >( + jobs "$job_name" 2>/dev/null > >( read index discarded # The index is already surrounded by brackets: [1]. - set-titles-with-command "${(e):-\$jobtexts_from_parent_shell$index}" + _terminal-set-titles-with-command "${(e):-\$jobtexts_from_parent_shell$index}" ) else # Set the command name, or in the case of sudo or ssh, the next command. - local cmd=${${1[(wr)^(*=*|sudo|ssh|-*)]}:t} + local cmd="${${2[(wr)^(*=*|sudo|ssh|-*)]}:t}" local truncated_cmd="${cmd/(#m)?(#c15,)/${MATCH[1,12]}...}" unset MATCH - if [[ "$TERM" == screen* ]]; then - set-screen-window-title "$truncated_cmd" - else - set-terminal-window-title "$cmd" - set-terminal-tab-title "$truncated_cmd" - fi + set-window-title "$cmd" + set-tab-title "$truncated_cmd" fi } # Sets the tab and window titles with a given path. -function set-titles-with-path { +function _terminal-set-titles-with-path { emulate -L zsh setopt EXTENDED_GLOB local absolute_path="${${1:a}:-$PWD}" + local abbreviated_path="${absolute_path/#$HOME/~}" + local truncated_path="${abbreviated_path/(#m)?(#c15,)/...${MATCH[-12,-1]}}" + unset MATCH - if [[ "$TERM_PROGRAM" == 'Apple_Terminal' ]]; then - printf '\e]7;%s\a' "file://$HOST${absolute_path// /%20}" - else - local abbreviated_path="${absolute_path/#$HOME/~}" - local truncated_path="${abbreviated_path/(#m)?(#c15,)/...${MATCH[-12,-1]}}" - unset MATCH + set-window-title "$abbreviated_path" + set-tab-title "$truncated_path" +} - if [[ "$TERM" == screen* ]]; then - set-screen-window-title "$truncated_path" - else - set-terminal-window-title "$abbreviated_path" - set-terminal-tab-title "$truncated_path" - fi - fi +# Sets the Terminal.app proxy icon. +function _terminal-set-terminal-app-proxy-icon { + printf '\e]7;%s\a' "file://$HOST${${1:-$PWD}// /%20}" } -# Don't override precmd/preexec; append to hook array. +# Do not override precmd/preexec; append to the hook array. autoload -Uz add-zsh-hook -# Sets the tab and window titles before the prompt is displayed. -function set-titles-precmd { - if zstyle -t ':prezto:module:terminal' auto-title; then - set-titles-with-path - fi -} -add-zsh-hook precmd set-titles-precmd +# Set up the Apple Terminal. +if [[ "$TERM_PROGRAM" == 'Apple_Terminal' ]] \ + && ( ! [[ -n "$STY" || -n "$TMUX" || -n "$DVTM" ]] ) +then + # Sets the Terminal.app current working directory before the prompt is + # displayed. + add-zsh-hook precmd _terminal-set-terminal-app-proxy-icon + + # Unsets the Terminal.app current working directory when a terminal + # multiplexer or remote connection is started since it can no longer be + # updated, and it becomes confusing when the directory displayed in the title + # bar is no longer synchronized with real current working directory. + function _terminal-unset-terminal-app-proxy-icon { + if [[ "${2[(w)1]:t}" == (screen|tmux|dvtm|ssh|mosh) ]]; then + _terminal-set-terminal-app-proxy-icon ' ' + fi + } + add-zsh-hook preexec _terminal-unset-terminal-app-proxy-icon -# Sets the tab and window titles before command execution. -function set-titles-preexec { - if zstyle -t ':prezto:module:terminal' auto-title; then - set-titles-with-command "$2" - fi -} -add-zsh-hook preexec set-titles-preexec + # Do not set the tab and window titles in Terminal.app since it sets the tab + # title to the currently running process by default and the current working + # directory is set separately. + return +fi + +# Set up non-Apple terminals. +if zstyle -t ':prezto:module:terminal' auto-title \ + && ( ! [[ -n "$STY" || -n "$TMUX" ]] ) +then + # Sets the tab and window titles before the prompt is displayed. + add-zsh-hook precmd _terminal-set-titles-with-path + + # Sets the tab and window titles before command execution. + add-zsh-hook preexec _terminal-set-titles-with-command +fi diff --git a/zshenv b/zshenv index ab29054df4..159679d3f6 100644 --- a/zshenv +++ b/zshenv @@ -72,3 +72,8 @@ if [[ ! -d "$TMPPREFIX" ]]; then mkdir -p "$TMPPREFIX" fi +# Ensure that a non-login, non-interactive shell has a defined environment. +if [[ "$SHLVL" -eq 1 && ! -o LOGIN && -s "${ZDOTDIR:-$HOME}/.zprofile" ]]; then + source "${ZDOTDIR:-$HOME}/.zprofile" +fi + diff --git a/zshrc b/zshrc index e32c15c6ed..82e388237c 100644 --- a/zshrc +++ b/zshrc @@ -110,4 +110,5 @@ zstyle ':completion:*:complete:(cd|pushd):*' tag-order \ 'local-directories named-directories path-directories' zstyle ':completion:*' group-name '' + setopt localoptions nonomatch