@@ -561,7 +561,9 @@ contains |
| 561 | 561 | |
| 562 | 562 | ! Print help |
| 563 | 563 | print '(A)', '' |
| 564 | | - print '(A)', '↑=staged ✗=unstaged | j/↓: down | k/↑: up | Space: git add | q: quit' |
| 564 | + print '(A)', achar(27) // '[32m↑' // achar(27) // '[0m=staged ' // & |
| 565 | + achar(27) // '[31m✗' // achar(27) // '[0m=unstaged | ' // & |
| 566 | + 'j/↓: down | k/↑: up | Space: git add | q: quit' |
| 565 | 567 | |
| 566 | 568 | call free_tree(root) |
| 567 | 569 | end subroutine draw_interactive_tree |
@@ -584,10 +586,17 @@ contains |
| 584 | 586 | character(len=*), parameter :: branch_last = '└──' |
| 585 | 587 | character(len=*), parameter :: branch_mid = '├──' |
| 586 | 588 | character(len=*), parameter :: vertical = '│' |
| 587 | | - character(len=*), parameter :: mark_unstaged = ' ✗' |
| 588 | | - character(len=*), parameter :: mark_staged = ' ↑' |
| 589 | 589 | character(len=*), parameter :: highlight_on = achar(27) // '[7m' |
| 590 | 590 | character(len=*), parameter :: highlight_off = achar(27) // '[0m' |
| 591 | + character(len=1), parameter :: ESC = achar(27) |
| 592 | + |
| 593 | + ! Build colored marks as character arrays |
| 594 | + character(len=50) :: mark_unstaged |
| 595 | + character(len=50) :: mark_staged |
| 596 | + |
| 597 | + ! Initialize colored marks with explicit ESC characters |
| 598 | + write(mark_unstaged, '(A,A,A,A,A)') ESC, '[31m', ' ✗', ESC, '[0m' |
| 599 | + write(mark_staged, '(A,A,A,A,A)') ESC, '[32m', ' ↑', ESC, '[0m' |
| 591 | 600 | |
| 592 | 601 | ! Count children first |
| 593 | 602 | n_children = 0 |
@@ -615,20 +624,20 @@ contains |
| 615 | 624 | line = trim(line) // highlight_on // trim(node%name) |
| 616 | 625 | ! Show both indicators if file has both staged and unstaged changes |
| 617 | 626 | if (node%is_staged) then |
| 618 | | - line = trim(line) // mark_staged |
| 627 | + line = trim(line) // trim(mark_staged) |
| 619 | 628 | end if |
| 620 | 629 | if (node%is_unstaged) then |
| 621 | | - line = trim(line) // mark_unstaged |
| 630 | + line = trim(line) // trim(mark_unstaged) |
| 622 | 631 | end if |
| 623 | 632 | line = trim(line) // highlight_off |
| 624 | 633 | else |
| 625 | 634 | line = trim(line) // trim(node%name) |
| 626 | 635 | ! Show both indicators if file has both staged and unstaged changes |
| 627 | 636 | if (node%is_staged) then |
| 628 | | - line = trim(line) // mark_staged |
| 637 | + line = trim(line) // trim(mark_staged) |
| 629 | 638 | end if |
| 630 | 639 | if (node%is_unstaged) then |
| 631 | | - line = trim(line) // mark_unstaged |
| 640 | + line = trim(line) // trim(mark_unstaged) |
| 632 | 641 | end if |
| 633 | 642 | end if |
| 634 | 643 | |
@@ -845,8 +854,15 @@ contains |
| 845 | 854 | character(len=*), parameter :: branch_last = '└──' |
| 846 | 855 | character(len=*), parameter :: branch_mid = '├──' |
| 847 | 856 | character(len=*), parameter :: vertical = '│' |
| 848 | | - character(len=*), parameter :: mark_unstaged = ' ✗' |
| 849 | | - character(len=*), parameter :: mark_staged = ' ↑' |
| 857 | + character(len=1), parameter :: ESC = achar(27) |
| 858 | + |
| 859 | + ! Build colored marks as character arrays |
| 860 | + character(len=50) :: mark_unstaged |
| 861 | + character(len=50) :: mark_staged |
| 862 | + |
| 863 | + ! Initialize colored marks with explicit ESC characters |
| 864 | + write(mark_unstaged, '(A,A,A,A,A)') ESC, '[31m', ' ✗', ESC, '[0m' |
| 865 | + write(mark_staged, '(A,A,A,A,A)') ESC, '[32m', ' ↑', ESC, '[0m' |
| 850 | 866 | |
| 851 | 867 | ! Count children first |
| 852 | 868 | n_children = 0 |
@@ -866,10 +882,10 @@ contains |
| 866 | 882 | end if |
| 867 | 883 | ! Show both indicators if file has both staged and unstaged changes |
| 868 | 884 | if (node%is_staged) then |
| 869 | | - line = trim(line) // mark_staged |
| 885 | + line = trim(line) // trim(mark_staged) |
| 870 | 886 | end if |
| 871 | 887 | if (node%is_unstaged) then |
| 872 | | - line = trim(line) // mark_unstaged |
| 888 | + line = trim(line) // trim(mark_unstaged) |
| 873 | 889 | end if |
| 874 | 890 | print '(A)', trim(line) |
| 875 | 891 | end if |