From 3709844b81b0d26104e154aa67549690c43759b2 Mon Sep 17 00:00:00 2001 From: Eamon Caton Date: Sat, 14 Sep 2024 00:17:43 -0700 Subject: [PATCH] Add jj item --- functions/_tide_item_jj.fish | 86 +++++++++++++++++++ functions/_tide_remove_unusable_items.fish | 2 +- functions/tide/configure/configs/classic.fish | 14 ++- .../configure/configs/classic_16color.fish | 12 +++ functions/tide/configure/configs/lean.fish | 14 ++- .../tide/configure/configs/lean_16color.fish | 12 +++ functions/tide/configure/configs/rainbow.fish | 14 ++- .../configure/configs/rainbow_16color.fish | 12 +++ .../functions/_fake_tide_item_jj.fish | 3 + tests/_tide_item_jj.test.fish | 35 ++++++++ 10 files changed, 200 insertions(+), 4 deletions(-) create mode 100644 functions/_tide_item_jj.fish create mode 100644 functions/tide/configure/functions/_fake_tide_item_jj.fish create mode 100644 tests/_tide_item_jj.test.fish diff --git a/functions/_tide_item_jj.fish b/functions/_tide_item_jj.fish new file mode 100644 index 00000000..337372a9 --- /dev/null +++ b/functions/_tide_item_jj.fish @@ -0,0 +1,86 @@ +function _tide_item_jj + jj root --quiet &>/dev/null || return + + # We want tide to define the colors so disable them + set -l f + jj log --ignore-working-copy --no-graph --color never -r @ -T ' + concat( + change_id.shortest().prefix(), "\0", change_id.shortest().rest(), "\0", + commit_id.shortest().prefix(), "\0", commit_id.shortest().rest(), "\0", + bookmarks.map(|b| b.name()).join(" "), "\0", + if( + description.first_line().substr(0, 24).starts_with(description.first_line()), + description.first_line().substr(0, 24), + description.first_line().substr(0, 23) ++ "…" + ), "\0", + if(empty, "1", ""), "\0", if(conflict, "1", ""), "\0", + if(divergent, "1", ""), "\0", if(hidden, "1", ""), "\0", + diff.files().len(), "\0", diff.stat().total_added(), "\0", diff.stat().total_removed(), "\0", + )' 2>/dev/null | while read -lz field + set -a f $field + end + + set -l change_prefix $f[1] + set -l change_rest $f[2] + set -l commit_prefix $f[3] + set -l commit_rest $f[4] + set -l bookmarks $f[5] + set -l description $f[6] + set -l empty $f[7] + set -l conflict $f[8] + set -l divergent $f[9] + set -l hidden $f[10] + set -l files $f[11] + set -l added $f[12] + set -l removed $f[13] + + if test -n "$conflict$divergent" + set -g tide_jj_bg_color $tide_jj_bg_color_urgent + else if test -z "$empty" + set -g tide_jj_bg_color $tide_jj_bg_color_unstable + end + + _tide_print_item jj (set_color $tide_jj_color_change_id)' ' ( + set_color $tide_jj_color_change_id + echo -ns $change_prefix + set_color $tide_jj_color_id_shadow + echo -ns $change_rest + + set_color $tide_jj_color_commit_id + echo -ns ' '$commit_prefix + set_color $tide_jj_color_id_shadow + echo -ns $commit_rest + + test -n "$bookmarks" && begin + set_color $tide_jj_color_bookmarks + echo -ns ' '$bookmarks + end + + test -n "$description" && begin + set_color $tide_jj_color_description + echo -ns ' "'$description'"' + end + + test -n "$conflict" && begin + set_color $tide_jj_color_conflict + echo -ns ' conflict' + end + + test -n "$divergent" && begin + set_color $tide_jj_color_divergent + echo -ns ' divergent' + end + + test -n "$hidden" && begin + set_color $tide_jj_color_divergent + echo -ns ' hidden' + end + + test "$files" != 0 && begin + set_color $tide_jj_color_diff_added + echo -ns ' +'$added + set_color $tide_jj_color_diff_removed + echo -ns ' -'$removed + end + ) +end diff --git a/functions/_tide_remove_unusable_items.fish b/functions/_tide_remove_unusable_items.fish index b1d9b283..ecae8991 100644 --- a/functions/_tide_remove_unusable_items.fish +++ b/functions/_tide_remove_unusable_items.fish @@ -1,7 +1,7 @@ function _tide_remove_unusable_items # Remove tool-specific items for tools the machine doesn't have installed set -l removed_items - for item in aws bun crystal direnv distrobox docker elixir gcloud git go java kubectl nix_shell node php pulumi python ruby rustc terraform toolbox zig + for item in aws bun crystal direnv distrobox docker elixir gcloud git go java jj kubectl nix_shell node php pulumi python ruby rustc terraform toolbox zig contains $item $tide_left_prompt_items $tide_right_prompt_items || continue set -l cli_names $item diff --git a/functions/tide/configure/configs/classic.fish b/functions/tide/configure/configs/classic.fish index 2e1c2c76..34b0f304 100644 --- a/functions/tide/configure/configs/classic.fish +++ b/functions/tide/configure/configs/classic.fish @@ -46,13 +46,25 @@ tide_go_bg_color 444444 tide_go_color 00ACD7 tide_java_bg_color 444444 tide_java_color ED8B00 +tide_jj_bg_color 444444 +tide_jj_bg_color_unstable 444444 +tide_jj_bg_color_urgent 444444 +tide_jj_color_bookmarks $_tide_color_light_blue +tide_jj_color_change_id $_tide_color_green +tide_jj_color_commit_id $_tide_color_dark_blue +tide_jj_color_conflict FF0000 +tide_jj_color_description 87875F +tide_jj_color_diff_added $_tide_color_dark_green +tide_jj_color_diff_removed CC0000 +tide_jj_color_divergent $_tide_color_gold +tide_jj_color_id_shadow 808080 tide_jobs_bg_color 444444 tide_jobs_color $_tide_color_dark_green tide_jobs_number_threshold 1000 tide_kubectl_bg_color 444444 tide_kubectl_color 326CE5 tide_left_prompt_frame_enabled true -tide_left_prompt_items pwd git newline +tide_left_prompt_items pwd git jj newline tide_left_prompt_prefix '' tide_left_prompt_separator_diff_color  tide_left_prompt_separator_same_color  diff --git a/functions/tide/configure/configs/classic_16color.fish b/functions/tide/configure/configs/classic_16color.fish index fe730c5f..6071ad1d 100644 --- a/functions/tide/configure/configs/classic_16color.fish +++ b/functions/tide/configure/configs/classic_16color.fish @@ -39,6 +39,18 @@ tide_go_bg_color black tide_go_color brcyan tide_java_bg_color black tide_java_color yellow +tide_jj_bg_color black +tide_jj_bg_color_unstable black +tide_jj_bg_color_urgent black +tide_jj_color_bookmarks brblue +tide_jj_color_change_id brgreen +tide_jj_color_commit_id blue +tide_jj_color_conflict brred +tide_jj_color_description brblack +tide_jj_color_diff_added green +tide_jj_color_diff_removed red +tide_jj_color_divergent bryellow +tide_jj_color_id_shadow brblack tide_jobs_bg_color black tide_jobs_color green tide_kubectl_bg_color black diff --git a/functions/tide/configure/configs/lean.fish b/functions/tide/configure/configs/lean.fish index b9a97919..4a191207 100644 --- a/functions/tide/configure/configs/lean.fish +++ b/functions/tide/configure/configs/lean.fish @@ -46,13 +46,25 @@ tide_go_bg_color normal tide_go_color 00ACD7 tide_java_bg_color normal tide_java_color ED8B00 +tide_jj_bg_color 444444 +tide_jj_bg_color_unstable 444444 +tide_jj_bg_color_urgent 444444 +tide_jj_color_bookmarks $_tide_color_light_blue +tide_jj_color_change_id $_tide_color_green +tide_jj_color_commit_id $_tide_color_dark_blue +tide_jj_color_conflict FF0000 +tide_jj_color_description 87875F +tide_jj_color_diff_added $_tide_color_dark_green +tide_jj_color_diff_removed CC0000 +tide_jj_color_divergent $_tide_color_gold +tide_jj_color_id_shadow 808080 tide_jobs_bg_color normal tide_jobs_color $_tide_color_dark_green tide_jobs_number_threshold 1000 tide_kubectl_bg_color normal tide_kubectl_color 326CE5 tide_left_prompt_frame_enabled false -tide_left_prompt_items pwd git newline character +tide_left_prompt_items pwd git jj newline character tide_left_prompt_prefix '' tide_left_prompt_separator_diff_color ' ' tide_left_prompt_separator_same_color ' ' diff --git a/functions/tide/configure/configs/lean_16color.fish b/functions/tide/configure/configs/lean_16color.fish index 699ce45a..aab30d1b 100644 --- a/functions/tide/configure/configs/lean_16color.fish +++ b/functions/tide/configure/configs/lean_16color.fish @@ -39,6 +39,18 @@ tide_go_bg_color normal tide_go_color brcyan tide_java_bg_color normal tide_java_color yellow +tide_jj_bg_color black +tide_jj_bg_color_unstable black +tide_jj_bg_color_urgent black +tide_jj_color_bookmarks brblue +tide_jj_color_change_id brgreen +tide_jj_color_commit_id blue +tide_jj_color_conflict brred +tide_jj_color_description brblack +tide_jj_color_diff_added green +tide_jj_color_diff_removed red +tide_jj_color_divergent bryellow +tide_jj_color_id_shadow brblack tide_jobs_bg_color normal tide_jobs_color green tide_kubectl_bg_color normal diff --git a/functions/tide/configure/configs/rainbow.fish b/functions/tide/configure/configs/rainbow.fish index 7c2ca30f..02f87395 100644 --- a/functions/tide/configure/configs/rainbow.fish +++ b/functions/tide/configure/configs/rainbow.fish @@ -46,13 +46,25 @@ tide_go_bg_color 00ACD7 tide_go_color 000000 tide_java_bg_color ED8B00 tide_java_color 000000 +tide_jj_bg_color 4E9A06 +tide_jj_bg_color_unstable C4A000 +tide_jj_bg_color_urgent CC0000 +tide_jj_color_bookmarks 000000 +tide_jj_color_change_id 000000 +tide_jj_color_commit_id 000000 +tide_jj_color_conflict 000000 +tide_jj_color_description 000000 +tide_jj_color_diff_added 000000 +tide_jj_color_diff_removed 000000 +tide_jj_color_divergent 000000 +tide_jj_color_id_shadow 000000 tide_jobs_bg_color 444444 tide_jobs_color 4E9A06 tide_jobs_number_threshold 1000 tide_kubectl_bg_color 326CE5 tide_kubectl_color 000000 tide_left_prompt_frame_enabled true -tide_left_prompt_items pwd git newline +tide_left_prompt_items pwd git jj newline tide_left_prompt_prefix '' tide_left_prompt_separator_diff_color  tide_left_prompt_separator_same_color  diff --git a/functions/tide/configure/configs/rainbow_16color.fish b/functions/tide/configure/configs/rainbow_16color.fish index 5d206115..f349ec80 100644 --- a/functions/tide/configure/configs/rainbow_16color.fish +++ b/functions/tide/configure/configs/rainbow_16color.fish @@ -39,6 +39,18 @@ tide_go_bg_color brcyan tide_go_color black tide_java_bg_color yellow tide_java_color black +tide_jj_bg_color green +tide_jj_bg_color_unstable yellow +tide_jj_bg_color_urgent red +tide_jj_color_bookmarks black +tide_jj_color_change_id black +tide_jj_color_commit_id black +tide_jj_color_conflict black +tide_jj_color_description black +tide_jj_color_diff_added black +tide_jj_color_diff_removed black +tide_jj_color_divergent black +tide_jj_color_id_shadow black tide_jobs_bg_color brblack tide_jobs_color green tide_kubectl_bg_color blue diff --git a/functions/tide/configure/functions/_fake_tide_item_jj.fish b/functions/tide/configure/functions/_fake_tide_item_jj.fish new file mode 100644 index 00000000..a0a98d20 --- /dev/null +++ b/functions/tide/configure/functions/_fake_tide_item_jj.fish @@ -0,0 +1,3 @@ +function _fake_tide_item_jj + _fake_tide_print_item jj (set_color $fake_tide_jj_color_change_id)' ' xqz desc +end diff --git a/tests/_tide_item_jj.test.fish b/tests/_tide_item_jj.test.fish new file mode 100644 index 00000000..73dbd82d --- /dev/null +++ b/tests/_tide_item_jj.test.fish @@ -0,0 +1,35 @@ +# RUN: %fish %s +_tide_parent_dirs + +function _jj + _tide_decolor (_tide_item_jj) +end + +function _mock_jj + set -g _jjfields $argv + function jj --inherit-variable _jjfields + test "$argv[1]" = root && return 0 + printf '%s\0' $_jjfields + end +end + +function jj + return 1 +end +_jj # CHECK: + +# Clean, empty working copy (change + commit ids only) +_mock_jj q '' z '' '' '' 1 '' '' '' 0 0 0 +_jj # CHECK: jj q z + +# Bookmark, description and diff stats +_mock_jj ab c de f main 'fix parser' '' '' '' '' 2 40 3 +_jj # CHECK: jj abc def main "fix parser" +40 -3 + +# Conflict +_mock_jj xy '' zz '' '' '' '' 1 '' '' 1 5 0 +_jj # CHECK: jj xy zz conflict +5 -0 + +# Divergent, no diff +_mock_jj mm '' nn '' '' '' '' '' 1 '' 0 0 0 +_jj # CHECK: jj mm nn divergent