summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md23
-rw-r--r--README.md2
-rw-r--r--TESTS.md8
-rw-r--r--functions/icons.zsh10
-rwxr-xr-xpowerlevel9k.zsh-theme18
-rw-r--r--test-bsd-vm/Vagrantfile87
-rw-r--r--test-bsd-vm/bootstrap-zero.sh3
-rw-r--r--test-bsd-vm/bootstrap.sh8
-rw-r--r--test-vm-providers/plain.sh4
-rw-r--r--test-vm/Vagrantfile2
-rw-r--r--test-vm/plain.sh3
-rwxr-xr-xtest/segments/dir.spec106
-rwxr-xr-xtest/segments/vcs.spec6
13 files changed, 257 insertions, 23 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4b27a514..7cfcd4a3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,4 @@
-## next
+## v0.6.0
- Fixed a bug where the tag display was broken on detached HEADs.
- Fixed a bug where SVN detection sometimes failed.
@@ -10,6 +10,10 @@
- Added Github syntax highlighting to README.
- Various documentation cleanup.
+### New Font Option: nerd-fonts
+
+There is now an option to use [nerd-fonts](https://github.com/ryanoasis/nerd-fonts) with P9k. Simply configure the `nerdfont-fontconfig`, and you'll be set!
+
### `vcs` changes
The VCS segment can now display icons for remote repo hosting services, including Github, Gitlab, and 'other'.
@@ -20,28 +24,33 @@ Added an option to configure the path separator. If you want something
else than an ordinary slash, you could set
`POWERLEVEL9K_DIR_PATH_SEPARATOR` to whatever you want.
-### New segment 'command_execution_time' added
+#### `truncate_with_package_name` now searches for `composer.json` as well
+
+Now `composer.json` files are searched as well. By default `package.json` still takes
+precedence. If you want to change that, set `POWERLEVEL9K_DIR_PACKAGE_FILES=(composer.json package.json)`.
+
+### New segment `command_execution_time` added
Shows the duration a command needed to run. By default only durations over 3 seconds
are shown (can be adjusted by setting POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD).
-### New segment 'dir_writable' added
+### New segment `dir_writable` added
This segment displays a lock icon if your user has no write permissions in the current folder.
-### New segment 'disk_usage' added
+### New segment `disk_usage` added
This segment will show the usage level of your current partition.
-### New segment 'public_ip' added
+### New segment `public_ip` added
Fetches your Public IP (using ident.me) and displays it in your prompt.
-### New segment 'swift_version' added
+### New segment `swift_version` added
This segment displays the version of Swift that is installed / in your path.
-### New segment 'detect_virt' added
+### New segment `detect_virt` added
Detects and reports if you are in a virtualized session using `systemd`.
diff --git a/README.md b/README.md
index 4440ecf6..00982a67 100644
--- a/README.md
+++ b/README.md
@@ -312,7 +312,7 @@ Customizations available are:
|Default|Truncate whole directories from left. How many is defined by `POWERLEVEL9K_SHORTEN_DIR_LENGTH`|
|`truncate_middle`|Truncates the middle part of a folder. E.g. you are in a folder named "~/MySuperProjects/AwesomeFiles/BoringOffice", then it will truncated to "~/MyS..cts/Awe..les/BoringOffice", if `POWERLEVEL9K_SHORTEN_DIR_LENGTH=3` is also set (controls the amount of characters to be left).|
|`truncate_from_right`|Just leaves the beginning of a folder name untouched. E.g. your folders will be truncated like so: "/ro../Pr../office". How many characters will be untouched is controlled by `POWERLEVEL9K_SHORTEN_DIR_LENGTH`.|
-|`truncate_with_package_name`|Use the `package.json` `name` field to abbreviate the directory path.|
+|`truncate_with_package_name`|Search for a `package.json` or `composer.json` and prints the `name` field to abbreviate the directory path. The precedence and/or files could be set by `POWERLEVEL9K_DIR_PACKAGE_FILES=(package.json composer.json)`. If you have [jq](https://stedolan.github.io/jq/) installed, it will dramatically improve the speed of this strategy.|
|`truncate_with_folder_marker`|Search for a file that is specified by `POWERLEVEL9K_SHORTEN_FOLDER_MARKER` and truncate everything before that (if found, otherwise stop on $HOME and ROOT).|
For example, if you wanted the truncation behavior of the `fish` shell, which
diff --git a/TESTS.md b/TESTS.md
index d4e663dc..d51051c5 100644
--- a/TESTS.md
+++ b/TESTS.md
@@ -12,3 +12,11 @@ Tests in separate files under `test/functions`.
These Tests tend to be more complex in setup than the basic tests. To avoid ending
up in a huge single file, there is one file per segment in `test/segments`.
+
+# Test-VMs
+
+If unit tests are not sufficient (e.g. you have an issue with your prompt that
+occurs only in a specific ZSH framework), then you could use our Test-VMs!
+Currently there are two test VMs. `test-vm` is an Ubuntu machine with several
+pre-installed ZSH frameworks. And there is `test-bsd-vm` which is a FreeBSD!
+For how to run the machines see [here](test-vm/README.md). \ No newline at end of file
diff --git a/functions/icons.zsh b/functions/icons.zsh
index 25150c9b..26412543 100644
--- a/functions/icons.zsh
+++ b/functions/icons.zsh
@@ -66,7 +66,7 @@ case $POWERLEVEL9K_MODE in
VCS_TAG_ICON $'\uE817 ' # 
VCS_BOOKMARK_ICON $'\uE87B' # 
VCS_COMMIT_ICON $'\uE821 ' # 
- VCS_BRANCH_ICON $'\uE220 ' # 
+ VCS_BRANCH_ICON $'\uE220' # 
VCS_REMOTE_BRANCH_ICON $'\u2192' # →
VCS_GIT_ICON $'\uE20E ' # 
VCS_GIT_GITHUB_ICON $'\uE20E ' #
@@ -95,7 +95,7 @@ case $POWERLEVEL9K_MODE in
CARRIAGE_RETURN_ICON $'\u21B5' # ↵
ROOT_ICON $'\uF201' # 
RUBY_ICON $'\uF219 ' # 
- AWS_ICON $'\uF296' # 
+ AWS_ICON $'\uF270' # 
AWS_EB_ICON $'\U1F331 ' # 🌱
BACKGROUND_JOBS_ICON $'\uF013 ' # 
TEST_ICON $'\uF291' # 
@@ -129,7 +129,7 @@ case $POWERLEVEL9K_MODE in
VCS_TAG_ICON $'\uF217 ' # 
VCS_BOOKMARK_ICON $'\uF27B' # 
VCS_COMMIT_ICON $'\uF221 ' # 
- VCS_BRANCH_ICON $'\uF126 ' # 
+ VCS_BRANCH_ICON $'\uF126' # 
VCS_REMOTE_BRANCH_ICON $'\u2192' # →
VCS_GIT_ICON $'\uF1D3 ' # 
VCS_GIT_GITHUB_ICON $'\uF113 ' # 
@@ -158,7 +158,7 @@ case $POWERLEVEL9K_MODE in
CARRIAGE_RETURN_ICON $'\u21B5' # ↵
ROOT_ICON $'\u26A1' # ⚡
RUBY_ICON $'\uF219 ' # 
- AWS_ICON $'\uE7AD' # 
+ AWS_ICON $'\uF270' # 
AWS_EB_ICON $'\U1F331 ' # 🌱
BACKGROUND_JOBS_ICON $'\uF013 ' # 
TEST_ICON $'\uF188' # 
@@ -248,7 +248,7 @@ case $POWERLEVEL9K_MODE in
VCS_TAG_ICON ''
VCS_BOOKMARK_ICON $'\u263F' # ☿
VCS_COMMIT_ICON ''
- VCS_BRANCH_ICON $'\uE0A0 ' # 
+ VCS_BRANCH_ICON $'\uE0A0' # 
VCS_REMOTE_BRANCH_ICON $'\u2192' # →
VCS_GIT_ICON ''
VCS_GIT_GITHUB_ICON ''
diff --git a/powerlevel9k.zsh-theme b/powerlevel9k.zsh-theme
index 6a137049..2af8ff14 100755
--- a/powerlevel9k.zsh-theme
+++ b/powerlevel9k.zsh-theme
@@ -655,12 +655,24 @@ prompt_dir() {
subdirectory_path=$(truncatePathFromRight "${current_dir:${#${(S%%)package_path//$~zero/}}}")
# Parse the 'name' from the package.json; if there are any problems, just
# print the file path
- if name=$( cat "$package_path/package.json" 2> /dev/null | grep -m 1 "\"name\""); then
- name=$(echo $name | awk -F ':' '{print $2}' | awk -F '"' '{print $2}')
+ defined POWERLEVEL9K_DIR_PACKAGE_FILES || POWERLEVEL9K_DIR_PACKAGE_FILES=(package.json composer.json)
+ local pkgFile="unknown"
+ for file in "${POWERLEVEL9K_DIR_PACKAGE_FILES[@]}"; do
+ if [[ -f "${package_path}/${file}" ]]; then
+ pkgFile="${package_path}/${file}"
+ break;
+ fi
+ done
+
+ local packageName=$(jq '.name' ${pkgFile} 2> /dev/null \
+ || node -e 'console.log(require(process.argv[1]).name);' ${pkgFile} 2>/dev/null \
+ || cat "${pkgFile}" 2> /dev/null | grep -m 1 "\"name\"" | awk -F ':' '{print $2}' | awk -F '"' '{print $2}' 2>/dev/null \
+ )
+ if [[ -n "${packageName}" ]]; then
# Instead of printing out the full path, print out the name of the package
# from the package.json and append the current subdirectory
- current_path="`echo $name | tr -d '"'`$subdirectory_path"
+ current_path="`echo $packageName | tr -d '"'`$subdirectory_path"
else
current_path=$(truncatePathFromRight "$(pwd | sed -e "s,^$HOME,~,")" )
fi
diff --git a/test-bsd-vm/Vagrantfile b/test-bsd-vm/Vagrantfile
new file mode 100644
index 00000000..7df512a3
--- /dev/null
+++ b/test-bsd-vm/Vagrantfile
@@ -0,0 +1,87 @@
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+
+# All Vagrant configuration is done below. The "2" in Vagrant.configure
+# configures the configuration version (we support older styles for
+# backwards compatibility). Please don't change it unless you know what
+# you're doing.
+Vagrant.configure("2") do |config|
+ # The most common configuration options are documented and commented below.
+ # For a complete reference, please see the online documentation at
+ # https://docs.vagrantup.com.
+
+ # Every Vagrant development environment requires a box. You can search for
+ # boxes at https://atlas.hashicorp.com/search.
+ config.vm.box = "freebsd/FreeBSD-11.0-STABLE"
+
+ # Bootstrap
+ config.vm.provision :shell, path: "bootstrap-zero.sh", privileged: true
+ config.vm.provision :shell, path: "bootstrap.sh", privileged: false
+ config.vm.provision :shell, path: "../test-vm-providers/plain.sh", privileged: false
+
+ # Disable automatic box update checking. If you disable this, then
+ # boxes will only be checked for updates when the user runs
+ # `vagrant box outdated`. This is not recommended.
+ # config.vm.box_check_update = false
+
+ # Create a forwarded port mapping which allows access to a specific port
+ # within the machine from a port on the host machine. In the example below,
+ # accessing "localhost:8080" will access port 80 on the guest machine.
+ # config.vm.network "forwarded_port", guest: 80, host: 8080
+
+ # Create a private network, which allows host-only access to the machine
+ # using a specific IP.
+ config.vm.network "private_network", ip: "192.168.33.10"
+
+ # Create a public network, which generally matched to bridged network.
+ # Bridged networks make the machine appear as another physical device on
+ # your network.
+ #config.vm.network "public_network"
+
+ # The BSD base box does not define a MAC address. Whysoever.
+ config.vm.base_mac = "8AAB4975994A"
+
+ # There is no BASH for root on BSD. We need to set another shell.
+ # See https://www.freebsd.org/doc/en/articles/linux-users/shells.html
+ config.ssh.shell = "/bin/sh"
+
+ # Share an additional folder to the guest VM. The first argument is
+ # the path on the host to the actual folder. The second argument is
+ # the path on the guest to mount the folder. And the optional third
+ # argument is a set of non-required options.
+ config.vm.synced_folder "..", "/vagrant_data", type: "nfs"
+ config.vm.synced_folder ".", "/vagrant", type: "nfs"
+
+ # Provider-specific configuration so you can fine-tune various
+ # backing providers for Vagrant. These expose provider-specific options.
+ # Example for VirtualBox:
+ config.vm.provider "virtualbox" do |vb|
+
+ # Change name to "powerlevel9k-bsd"
+ vb.name = "powerlevel9k-bsd"
+
+ # Display the VirtualBox GUI when booting the machine
+ #vb.gui = true
+
+ # Customize the amount of memory on the VM:
+ vb.memory = "256"
+ end
+
+ # View the documentation for the provider you are using for more
+ # information on available options.
+
+ # Define a Vagrant Push strategy for pushing to Atlas. Other push strategies
+ # such as FTP and Heroku are also available. See the documentation at
+ # https://docs.vagrantup.com/v2/push/atlas.html for more information.
+ # config.push.define "atlas" do |push|
+ # push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME"
+ # end
+
+ # Enable provisioning with a shell script. Additional provisioners such as
+ # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
+ # documentation for more information about their specific syntax and use.
+ # config.vm.provision "shell", inline: <<-SHELL
+ # apt-get update
+ # apt-get install -y apache2
+ # SHELL
+end
diff --git a/test-bsd-vm/bootstrap-zero.sh b/test-bsd-vm/bootstrap-zero.sh
new file mode 100644
index 00000000..35dcd7f3
--- /dev/null
+++ b/test-bsd-vm/bootstrap-zero.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pkg install -y sudo \ No newline at end of file
diff --git a/test-bsd-vm/bootstrap.sh b/test-bsd-vm/bootstrap.sh
new file mode 100644
index 00000000..f78b3078
--- /dev/null
+++ b/test-bsd-vm/bootstrap.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+# Install ZSH
+sudo pkg install -y zsh
+sudo chsh -s `which zsh` vagrant
+
+# Install git
+sudo pkg install -y git \ No newline at end of file
diff --git a/test-vm-providers/plain.sh b/test-vm-providers/plain.sh
new file mode 100644
index 00000000..a87220f8
--- /dev/null
+++ b/test-vm-providers/plain.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/zsh
+
+echo 'LANG=en_US.UTF-8' !> ~/.zshrc
+echo 'source /vagrant_data/powerlevel9k.zsh-theme' >> ~/.zshrc \ No newline at end of file
diff --git a/test-vm/Vagrantfile b/test-vm/Vagrantfile
index ee53fcdf..a421c706 100644
--- a/test-vm/Vagrantfile
+++ b/test-vm/Vagrantfile
@@ -16,7 +16,7 @@ Vagrant.configure(2) do |config|
# Bootstrap
config.vm.provision :shell, path: "bootstrap.sh", privileged: false
- config.vm.provision :shell, path: "plain.sh", privileged: false
+ config.vm.provision :shell, path: "../test-vm-providers/plain.sh", privileged: false
config.vm.provision :shell, path: "antigen.sh"
config.vm.provision :shell, path: "prezto.sh"
config.vm.provision :shell, path: "omz.sh"
diff --git a/test-vm/plain.sh b/test-vm/plain.sh
deleted file mode 100644
index 9c8445f4..00000000
--- a/test-vm/plain.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/zsh
-
-echo 'source /vagrant_data/powerlevel9k.zsh-theme' > ~/.zshrc
diff --git a/test/segments/dir.spec b/test/segments/dir.spec
index ce6869b7..b2991175 100755
--- a/test/segments/dir.spec
+++ b/test/segments/dir.spec
@@ -114,6 +114,112 @@ function testTruncateWithFolderMarkerWithChangedFolderMarker() {
unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
}
+function testTruncateWithPackageNameWorks() {
+ local p9kFolder=$(pwd)
+ local BASEFOLDER=/tmp/powerlevel9k-test
+ local FOLDER=$BASEFOLDER/1/12/123/1234/12345/123456/1234567/12345678/123456789
+ mkdir -p $FOLDER
+
+ cd /tmp/powerlevel9k-test
+ echo '
+{
+ "name": "My_Package"
+}
+' > package.json
+ # Unfortunately: The main folder must be a git repo..
+ git init &>/dev/null
+
+ # Go back to deeper folder
+ cd "${FOLDER}"
+
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
+ POWERLEVEL9K_SHORTEN_STRATEGY='truncate_with_package_name'
+
+ assertEquals "%K{blue} %F{black}My_Package/1/12/123/12…/12…/12…/12…/12…/123456789 %k%F{blue}%f " "$(build_left_prompt)"
+
+ # Go back
+ cd $p9kFolder
+ rm -fr $BASEFOLDER
+ unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ unset POWERLEVEL9K_SHORTEN_STRATEGY
+ unset POWERLEVEL9K_SHORTEN_DIR_LENGTH
+}
+
+function testTruncateWithPackageNameIfRepoIsSymlinkedInsideDeepFolder() {
+ local p9kFolder=$(pwd)
+ local BASEFOLDER=/tmp/powerlevel9k-test
+ local FOLDER=$BASEFOLDER/1/12/123/1234/12345/123456/1234567/12345678/123456789
+ mkdir -p $FOLDER
+ cd $FOLDER
+
+ # Unfortunately: The main folder must be a git repo..
+ git init &>/dev/null
+
+ echo '
+{
+ "name": "My_Package"
+}
+' > package.json
+
+ # Create a subdir inside the repo
+ mkdir -p asdfasdf/qwerqwer
+
+ cd $BASEFOLDER
+ ln -s ${FOLDER} linked-repo
+
+ # Go to deep folder inside linked repo
+ cd linked-repo/asdfasdf/qwerqwer
+
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
+ POWERLEVEL9K_SHORTEN_STRATEGY='truncate_with_package_name'
+
+ assertEquals "%K{blue} %F{black}My_Package/as…/qwerqwer %k%F{blue}%f " "$(build_left_prompt)"
+
+ # Go back
+ cd $p9kFolder
+ rm -fr $BASEFOLDER
+ unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ unset POWERLEVEL9K_SHORTEN_STRATEGY
+ unset POWERLEVEL9K_SHORTEN_DIR_LENGTH
+}
+
+function testTruncateWithPackageNameIfRepoIsSymlinkedInsideGitDir() {
+ local p9kFolder=$(pwd)
+ local BASEFOLDER=/tmp/powerlevel9k-test
+ local FOLDER=$BASEFOLDER/1/12/123/1234/12345/123456/1234567/12345678/123456789
+ mkdir -p $FOLDER
+ cd $FOLDER
+
+ # Unfortunately: The main folder must be a git repo..
+ git init &>/dev/null
+
+ echo '
+{
+ "name": "My_Package"
+}
+' > package.json
+
+ cd $BASEFOLDER
+ ln -s ${FOLDER} linked-repo
+
+ cd linked-repo/.git/refs/heads
+
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
+ POWERLEVEL9K_SHORTEN_STRATEGY='truncate_with_package_name'
+
+ assertEquals "%K{blue} %F{black}My_Package/.g…/re…/heads %k%F{blue}%f " "$(build_left_prompt)"
+
+ # Go back
+ cd $p9kFolder
+ rm -fr $BASEFOLDER
+ unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ unset POWERLEVEL9K_SHORTEN_STRATEGY
+ unset POWERLEVEL9K_SHORTEN_DIR_LENGTH
+}
+
function testHomeFolderDetectionWorks() {
POWERLEVEL9K_HOME_ICON='home-icon'
diff --git a/test/segments/vcs.spec b/test/segments/vcs.spec
index c33b564d..4467145e 100755
--- a/test/segments/vcs.spec
+++ b/test/segments/vcs.spec
@@ -21,7 +21,7 @@ function testColorOverridingForCleanStateWorks() {
cd $FOLDER
git init 1>/dev/null
- assertEquals "%K{white} %F{cyan} master %k%F{white}%f " "$(build_left_prompt)"
+ assertEquals "%K{white} %F{cyan}master %k%F{white}%f " "$(build_left_prompt)"
cd -
rm -fr /tmp/powerlevel9k-test
@@ -47,7 +47,7 @@ function testColorOverridingForModifiedStateWorks() {
git commit -m "test" 1>/dev/null
echo "test" > testfile
- assertEquals "%K{yellow} %F{red} master ● %k%F{yellow}%f " "$(build_left_prompt)"
+ assertEquals "%K{yellow} %F{red}master ● %k%F{yellow}%f " "$(build_left_prompt)"
cd -
rm -fr /tmp/powerlevel9k-test
@@ -68,7 +68,7 @@ function testColorOverridingForUntrackedStateWorks() {
git init 1>/dev/null
touch testfile
- assertEquals "%K{yellow} %F{cyan} master ? %k%F{yellow}%f " "$(build_left_prompt)"
+ assertEquals "%K{yellow} %F{cyan}master ? %k%F{yellow}%f " "$(build_left_prompt)"
cd -
rm -fr /tmp/powerlevel9k-test