diff --git a/share/tools/web_config/js/controllers.js b/share/tools/web_config/js/controllers.js
index d58c2428d..439d7ba15 100644
--- a/share/tools/web_config/js/controllers.js
+++ b/share/tools/web_config/js/controllers.js
@@ -198,6 +198,7 @@ controllers.controller("promptController", function($scope, $http) {
// Update attributes of current prompt and select it
$scope.samplePrompts[0].demo = selectedPrompt.demo;
+ $scope.samplePrompts[0].right = selectedPrompt.right;
$scope.samplePrompts[0].function = selectedPrompt.function;
$scope.samplePrompts[0].font_size = selectedPrompt.font_size;
$scope.selectedPrompt = $scope.samplePrompts[0];
diff --git a/share/tools/web_config/partials/prompt.html b/share/tools/web_config/partials/prompt.html
index 84bc2bd56..976737fc6 100644
--- a/share/tools/web_config/partials/prompt.html
+++ b/share/tools/web_config/partials/prompt.html
@@ -2,7 +2,10 @@
{{ selectedPrompt.name }}
-
+
diff --git a/share/tools/web_config/sample_prompts/scales.fish b/share/tools/web_config/sample_prompts/scales.fish
index b20857b9b..a6508a6bf 100644
--- a/share/tools/web_config/sample_prompts/scales.fish
+++ b/share/tools/web_config/sample_prompts/scales.fish
@@ -18,167 +18,167 @@ function fish_prompt
end
echo -n (set_color red)'❯'(set_color yellow)'❯'(set_color green)'❯ '
set_color normal
-
- # And now define the right prompt so that it's brought along
- function fish_right_prompt
- set -l cmd_status $status
- if test $cmd_status -ne 0
- echo -n (set_color red)"✘ $cmd_status"
- end
-
- if not command -sq git
- set_color normal
- return
- end
-
- # Get the git directory for later use.
- # Return if not inside a Git repository work tree.
- if not set -l git_dir (command git rev-parse --git-dir 2>/dev/null)
- set_color normal
- return
- end
-
- # Get the current action ("merge", "rebase", etc.)
- # and if there's one get the current commit hash too.
- set -l commit ''
- if set -l action (fish_print_git_action "$git_dir")
- set commit (command git rev-parse HEAD 2> /dev/null | string sub -l 7)
- end
-
- # Get either the branch name or a branch descriptor.
- set -l branch_detached 0
- if not set -l branch (command git symbolic-ref --short HEAD 2>/dev/null)
- set branch_detached 1
- set branch (command git describe --contains --all HEAD 2>/dev/null)
- end
-
- # Get the commit difference counts between local and remote.
- command git rev-list --count --left-right 'HEAD...@{upstream}' 2>/dev/null \
- | read -d \t -l status_ahead status_behind
- if test $status -ne 0
- set status_ahead 0
- set status_behind 0
- end
-
- # Get the stash status.
- # (git stash list) is very slow. => Avoid using it.
- set -l status_stashed 0
- if test -f "$git_dir/refs/stash"
- set status_stashed 1
- else if test -r "$git_dir/commondir"
- read -l commondir <"$git_dir/commondir"
- if test -f "$commondir/refs/stash"
- set status_stashed 1
- end
- end
-
- # git-status' porcelain v1 format starts with 2 letters on each line:
- # The first letter (X) denotes the index state.
- # The second letter (Y) denotes the working directory state.
- #
- # The following table presents the possible combinations:
- # * The underscore character denotes whitespace.
- # * The cell values stand for the following file states:
- # a: added
- # d: deleted
- # m: modified
- # r: renamed
- # u: unmerged
- # t: untracked
- # * Cells with more than one letter signify that both states
- # are simultaneously the case. This is possible since the git index
- # and working directory operate independently of each other.
- # * Cells which are empty are unhandled by this code.
- # * T (= type change) is undocumented.
- # See Git v1.7.8.2 release notes for more information.
- #
- # \ Y→
- # X \
- # ↓ | A | C | D | M | R | T | U | X | B | ? | _
- # ----+----+----+----+----+----+----+----+----+----+----+----
- # A | u | | ad | am | r | am | u | | | | a
- # C | | | ad | am | r | am | u | | | | a
- # D | | | u | am | r | am | u | | | | a
- # M | | | ad | am | r | am | u | | | | a
- # R | r | r | rd | rm | r | rm | ur | r | r | r | r
- # T | | | ad | am | r | am | u | | | | a
- # U | u | u | u | um | ur | um | u | u | u | u | u
- # X | | | | m | r | m | u | | | |
- # B | | | | m | r | m | u | | | |
- # ? | | | | m | r | m | u | | | t |
- # _ | | | d | m | r | m | u | | | |
- set -l porcelain_status (command git status --porcelain | string sub -l2)
-
- set -l status_added 0
- if string match -qr '[ACDMT][ MT]|[ACMT]D' $porcelain_status
- set status_added 1
- end
- set -l status_deleted 0
- if string match -qr '[ ACMRT]D' $porcelain_status
- set status_deleted 1
- end
- set -l status_modified 0
- if string match -qr '[MT]$' $porcelain_status
- set status_modified 1
- end
- set -l status_renamed 0
- if string match -qe R $porcelain_status
- set status_renamed 1
- end
- set -l status_unmerged 0
- if string match -qr 'AA|DD|U' $porcelain_status
- set status_unmerged 1
- end
- set -l status_untracked 0
- if string match -qe '\?\?' $porcelain_status
- set status_untracked 1
- end
-
- set_color -o
-
- if test -n "$branch"
- if test $branch_detached -ne 0
- set_color brmagenta
- else
- set_color green
- end
- echo -n " $branch"
- end
- if test -n "$commit"
- echo -n ' '(set_color yellow)"$commit"
- end
- if test -n "$action"
- set_color normal
- echo -n (set_color white)':'(set_color -o brred)"$action"
- end
- if test $status_ahead -ne 0
- echo -n ' '(set_color brmagenta)'⬆'
- end
- if test $status_behind -ne 0
- echo -n ' '(set_color brmagenta)'⬇'
- end
- if test $status_stashed -ne 0
- echo -n ' '(set_color cyan)'✭'
- end
- if test $status_added -ne 0
- echo -n ' '(set_color green)'✚'
- end
- if test $status_deleted -ne 0
- echo -n ' '(set_color red)'✖'
- end
- if test $status_modified -ne 0
- echo -n ' '(set_color blue)'✱'
- end
- if test $status_renamed -ne 0
- echo -n ' '(set_color magenta)'➜'
- end
- if test $status_unmerged -ne 0
- echo -n ' '(set_color yellow)'═'
- end
- if test $status_untracked -ne 0
- echo -n ' '(set_color white)'◼'
- end
-
- set_color normal
- end
+end
+
+# And now define the right prompt so that it's brought along
+function fish_right_prompt
+ set -l cmd_status $status
+ if test $cmd_status -ne 0
+ echo -n (set_color red)"✘ $cmd_status"
+ end
+
+ if not command -sq git
+ set_color normal
+ return
+ end
+
+ # Get the git directory for later use.
+ # Return if not inside a Git repository work tree.
+ if not set -l git_dir (command git rev-parse --git-dir 2>/dev/null)
+ set_color normal
+ return
+ end
+
+ # Get the current action ("merge", "rebase", etc.)
+ # and if there's one get the current commit hash too.
+ set -l commit ''
+ if set -l action (fish_print_git_action "$git_dir")
+ set commit (command git rev-parse HEAD 2> /dev/null | string sub -l 7)
+ end
+
+ # Get either the branch name or a branch descriptor.
+ set -l branch_detached 0
+ if not set -l branch (command git symbolic-ref --short HEAD 2>/dev/null)
+ set branch_detached 1
+ set branch (command git describe --contains --all HEAD 2>/dev/null)
+ end
+
+ # Get the commit difference counts between local and remote.
+ command git rev-list --count --left-right 'HEAD...@{upstream}' 2>/dev/null \
+ | read -d \t -l status_ahead status_behind
+ if test $status -ne 0
+ set status_ahead 0
+ set status_behind 0
+ end
+
+ # Get the stash status.
+ # (git stash list) is very slow. => Avoid using it.
+ set -l status_stashed 0
+ if test -f "$git_dir/refs/stash"
+ set status_stashed 1
+ else if test -r "$git_dir/commondir"
+ read -l commondir <"$git_dir/commondir"
+ if test -f "$commondir/refs/stash"
+ set status_stashed 1
+ end
+ end
+
+ # git-status' porcelain v1 format starts with 2 letters on each line:
+ # The first letter (X) denotes the index state.
+ # The second letter (Y) denotes the working directory state.
+ #
+ # The following table presents the possible combinations:
+ # * The underscore character denotes whitespace.
+ # * The cell values stand for the following file states:
+ # a: added
+ # d: deleted
+ # m: modified
+ # r: renamed
+ # u: unmerged
+ # t: untracked
+ # * Cells with more than one letter signify that both states
+ # are simultaneously the case. This is possible since the git index
+ # and working directory operate independently of each other.
+ # * Cells which are empty are unhandled by this code.
+ # * T (= type change) is undocumented.
+ # See Git v1.7.8.2 release notes for more information.
+ #
+ # \ Y→
+ # X \
+ # ↓ | A | C | D | M | R | T | U | X | B | ? | _
+ # ----+----+----+----+----+----+----+----+----+----+----+----
+ # A | u | | ad | am | r | am | u | | | | a
+ # C | | | ad | am | r | am | u | | | | a
+ # D | | | u | am | r | am | u | | | | a
+ # M | | | ad | am | r | am | u | | | | a
+ # R | r | r | rd | rm | r | rm | ur | r | r | r | r
+ # T | | | ad | am | r | am | u | | | | a
+ # U | u | u | u | um | ur | um | u | u | u | u | u
+ # X | | | | m | r | m | u | | | |
+ # B | | | | m | r | m | u | | | |
+ # ? | | | | m | r | m | u | | | t |
+ # _ | | | d | m | r | m | u | | | |
+ set -l porcelain_status (command git status --porcelain | string sub -l2)
+
+ set -l status_added 0
+ if string match -qr '[ACDMT][ MT]|[ACMT]D' $porcelain_status
+ set status_added 1
+ end
+ set -l status_deleted 0
+ if string match -qr '[ ACMRT]D' $porcelain_status
+ set status_deleted 1
+ end
+ set -l status_modified 0
+ if string match -qr '[MT]$' $porcelain_status
+ set status_modified 1
+ end
+ set -l status_renamed 0
+ if string match -qe R $porcelain_status
+ set status_renamed 1
+ end
+ set -l status_unmerged 0
+ if string match -qr 'AA|DD|U' $porcelain_status
+ set status_unmerged 1
+ end
+ set -l status_untracked 0
+ if string match -qe '\?\?' $porcelain_status
+ set status_untracked 1
+ end
+
+ set_color -o
+
+ if test -n "$branch"
+ if test $branch_detached -ne 0
+ set_color brmagenta
+ else
+ set_color green
+ end
+ echo -n " $branch"
+ end
+ if test -n "$commit"
+ echo -n ' '(set_color yellow)"$commit"
+ end
+ if test -n "$action"
+ set_color normal
+ echo -n (set_color white)':'(set_color -o brred)"$action"
+ end
+ if test $status_ahead -ne 0
+ echo -n ' '(set_color brmagenta)'⬆'
+ end
+ if test $status_behind -ne 0
+ echo -n ' '(set_color brmagenta)'⬇'
+ end
+ if test $status_stashed -ne 0
+ echo -n ' '(set_color cyan)'✭'
+ end
+ if test $status_added -ne 0
+ echo -n ' '(set_color green)'✚'
+ end
+ if test $status_deleted -ne 0
+ echo -n ' '(set_color red)'✖'
+ end
+ if test $status_modified -ne 0
+ echo -n ' '(set_color blue)'✱'
+ end
+ if test $status_renamed -ne 0
+ echo -n ' '(set_color magenta)'➜'
+ end
+ if test $status_unmerged -ne 0
+ echo -n ' '(set_color yellow)'═'
+ end
+ if test $status_untracked -ne 0
+ echo -n ' '(set_color white)'◼'
+ end
+
+ set_color normal
end
diff --git a/share/tools/web_config/webconfig.py b/share/tools/web_config/webconfig.py
index 16188c149..ab41e178c 100755
--- a/share/tools/web_config/webconfig.py
+++ b/share/tools/web_config/webconfig.py
@@ -1119,7 +1119,7 @@ class FishConfigHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
return True
def do_set_prompt_function(self, prompt_func):
- cmd = prompt_func + "\n" + "funcsave fish_prompt"
+ cmd = "functions -e fish_right_prompt; " + prompt_func + "\n" + "funcsave fish_prompt && funcsave fish_right_prompt 2>/dev/null"
out, err = run_fish_cmd(cmd)
return len(err) == 0
@@ -1128,11 +1128,16 @@ class FishConfigHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
cmd = prompt_function_text + '\n builtin cd "' + initial_wd + '" \n false \n fish_prompt\n'
prompt_demo_ansi, err = run_fish_cmd(cmd)
prompt_demo_html = ansi_to_html(prompt_demo_ansi)
- prompt_demo_font_size = self.font_size_for_ansi_prompt(prompt_demo_ansi)
+ right_demo_ansi, err = run_fish_cmd(
+ "functions -e fish_right_prompt; " + prompt_function_text + '\n builtin cd "' + initial_wd + '" \n false \n functions -q fish_right_prompt && fish_right_prompt\n'
+ )
+ right_demo_html = ansi_to_html(right_demo_ansi)
+ prompt_demo_font_size = self.font_size_for_ansi_prompt(prompt_demo_ansi + right_demo_ansi)
result = {
"function": prompt_function_text,
"demo": prompt_demo_html,
"font_size": prompt_demo_font_size,
+ "right": right_demo_html,
}
if extras_dict:
result.update(extras_dict)
@@ -1141,7 +1146,7 @@ class FishConfigHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
def do_get_current_prompt(self):
# Return the current prompt. We run 'false' to demonstrate how the
# prompt shows the command status (#1624).
- prompt_func, err = run_fish_cmd("functions fish_prompt")
+ prompt_func, err = run_fish_cmd("functions fish_prompt; functions fish_right_prompt")
result = self.do_get_prompt(
prompt_func.strip(),
{"name": "Current"},