diff --git a/README.md b/README.md index e3368bf..4fe0936 100644 --- a/README.md +++ b/README.md @@ -28,13 +28,17 @@ in a git repository on a server, at branch "myb": A liquid prompt displaying everything (a rare event!) may look like this: -`code ⌁24% ⌂42% 3d/2&/1z [user@server:~/ … /code/liquidprompt]↥ master(+10/-5,3)*+ 125 ± ` +`code 🕤 ⌁24% ⌂42% 3d/2&/1z [user@server:~/ … /code/liquidprompt][pyenv]↥ master(+10/-5,3)*+ 125 ± ` -It displays: +It (may) displays: -* a green ⌁ if the battery is charging and above a given threshold, -a yellow ⌁ if the battery is charging and under threshold, -a red ⌁ if the battery is discharging but above threshold; +* A tag associated to the current shell session (you can easily add any +prefix tag to your prompt, by invoking `prompt_tag MYTAG`). +* The current time, either as numerci values or an analog clock, +* a green ⏚ if the battery is charging, above the given threshold, but not charged, +a yellow ⏚ if the battery is charging and under threshold, +a yellow ⌁ if the battery is discharging but above threshold, +a red ⌁ if the battery is discharging and under threshold; * the average of the batteries remaining power, if it is under the given threshold, with a colormap, going more and more red with decreasing power; * the average of the processors load, if it is over a given limit, with a @@ -66,11 +70,10 @@ changes have been made and the number of pending commits, if any; * a yellow plus if there is stashed modifications; * a red star if there is some untracked files in the repository; * the error code of the last command, if it has failed in some way; -* a smart mark: ± for git directories, ☿ for mercurial, ‡ for svn, ⌘ -for fossil, $ for simple user, a red # for root; +* a smart mark: ± for git directories, ☿ for mercurial, ‡ for svn, +‡± for git-svn, ⌘ for fossil, $ or % for simple user, a red # for root; * if you ask for, the liquidprompt will be replicated in your terminal window's title (without the colors); -* you can easily add a prefix tag to your prompt, by invoking `prompt_tag MYTAG`. You can temporarily deactivate the liquid prompt and come back to your previous one by typing `prompt_off`. Use `prompt_on` to bring it back. You can deactivate @@ -140,6 +143,8 @@ building: * `LP_ENABLE_TITLE`, if you want to use the prompt as your terminal window's title * `LP_ENABLE_SCREEN_TITLE`, if you want to use the prompt as your screen window's title * `LP_ENABLE_SSH_COLORS`, if you want different colors for hosts you SSH in +* `LP_ENABLE_TIME`, if you want to display the time at which the prompt was shown +* `LP_TIME_ANALOG`, when showing time, use an analog clock instead of numeric values Note that if required commands are not installed, enabling the corresponding feature will have no effect. @@ -298,10 +303,12 @@ version 3. * Does not display the number of commits to be pushed in Mercurial repositories. * Browsing into very large subversion repositories may dramatically slow down -the display of the liquid prompt. +the display of the liquid prompt (use `LP_DISABLED_VCS_PATH` to avoid that). * Subversion repository cannot display commits to be pushed, this is a limitation of the Subversion versionning model. * The proxy detection only uses the `$http_proxy` environment variable. * The window's title escape sequence may not work properly on some terminals (like xterm-256) +* The analog clock necessitate a unicode-aware terminal and a sufficiently +complete font. diff --git a/liquidprompt b/liquidprompt index 3109433..92de997 100755 --- a/liquidprompt +++ b/liquidprompt @@ -1299,10 +1299,56 @@ _lp_sb() ################### # CURRENT TIME # ################### +_lp_time_analog() +{ + # get the date as "hours(12) minutes" in a single call + # make a bash array with it + d=( $(date "+%I %M") ) + # separate hours and minutes + hour=${d[0]#0} # no leading 0 + min=${d[1]#0} + + # The targeted unicode characters are the "CLOCK FACE" ones + # They are located in the codepages between: + # U+1F550 (ONE OCLOCK) and U+1F55B (TWELVE OCLOCK), for the plain hours + # U+1F55C (ONE-THIRTY) and U+1F567 (TWELVE-THIRTY), for the thirties + # + # Those codes may be output with unicode escapes or hexadecimal escapes, + # the later being the more portable. + # + # But we can iterate only over integers. + # + # We thus need the following conversion table: + # utf hex int + # hours 50:5B 90:9b 144:155 + # half 5C:67 9c:a7 156:167 + + # The characters being grouped bas plain/thirty, we must first now + # if we are close to the 0 or 30 minutes. + # Bash using integer arithmetic by default, we do not need rounding. + # We thus add 0 (plain hour) or 12 (half). + # Then we add 144, which is the first index (as an integer). + mi=$((144+12*($min/30))) + + # Add the computed minutes index (144 or 156) minus 1 (because the first hour starts at 0). + hi=$(($mi+$hour-1)) + + # Get the hexadecimal representation of this integer + hex=$(printf "%x" $hi) + + # Print the first three bytes (that are always the same) and the computed last one. + # Add a space for correct alignement + echo -ne "\xf0\x9f\x95\x$hex " +} + _lp_time() { [[ "$LP_ENABLE_TIME" != 1 ]] && return - echo -ne "${LP_COLOR_TIME}${_LP_TIME_SYMBOL}${NO_COL}" + if [[ "$LP_TIME_ANALOG" != 1 ]]; then + echo -ne "${LP_COLOR_TIME}${_LP_TIME_SYMBOL}${NO_COL}" + else + echo -ne "${LP_COLOR_TIME}$(_lp_time_analog)${NO_COL}" + fi } ######################## diff --git a/liquidpromptrc-dist b/liquidpromptrc-dist index 712f950..2677855 100644 --- a/liquidpromptrc-dist +++ b/liquidpromptrc-dist @@ -95,6 +95,13 @@ LP_ENABLE_BZR=1 # Recommended value is 0 LP_ENABLE_TIME=0 +# When showing time, use an analog clock instead of numeric values. +# The analog clock is "accurate" to the nearest half hour. +# You must have a unicode-capable terminal and a font with the "CLOCK" +# characters. +# Recommended value is 0 +LP_TIME_ANALOG=0 + # Use the liquid prompt as the title of the terminal window # This may not work properly on exotic terminals, thus the # recommended value is 0