fortrangoingonforty/fuss / af339b7

Browse files

detection for terminals so that wezterm, ghostty, etc don't have cutoff always

Authored by espadonne
SHA
af339b7e41b2ea87372ee13d5f59813292cbb121
Parents
1379370
Tree
cf299a1

2 changed files

StatusFile+-
M src/display_module.f90 8 3
M src/fuss_main.f90 13 3
src/display_module.f90modified
@@ -129,15 +129,20 @@ contains
129129
     end subroutine print_tree_node
130130
 
131131
     subroutine draw_interactive_tree(tree_root, items, n_items, selected, &
132
-                                     repo_name, branch_name, viewport_offset, visible_items)
132
+                                     repo_name, branch_name, viewport_offset, visible_items, top_padding)
133133
         type(tree_node), pointer, intent(in) :: tree_root
134134
         integer, intent(in) :: n_items, selected
135135
         type(selectable_item), intent(in) :: items(:)
136136
         character(len=*), intent(in) :: repo_name, branch_name
137
-        integer, intent(in) :: viewport_offset, visible_items
138
-        integer :: item_idx, viewport_end
137
+        integer, intent(in) :: viewport_offset, visible_items, top_padding
138
+        integer :: item_idx, viewport_end, i
139139
         character(len=512) :: status_line
140140
 
141
+        ! Add blank lines at top as padding for terminals that need it (fixes WezTerm/Ghostty)
142
+        do i = 1, top_padding
143
+            print '(A)', ''
144
+        end do
145
+
141146
         ! Display repo:branch info at top if available
142147
         if (len_trim(repo_name) > 0 .and. len_trim(branch_name) > 0) then
143148
             write(status_line, '(A,A,A,A,A,A,A)') &
src/fuss_main.f90modified
@@ -91,13 +91,23 @@ contains
9191
         integer :: n_files, n_items, selected, i, status
9292
         character(len=1) :: key
9393
         logical :: running
94
-        character(len=256) :: repo_name, branch_name
95
-        integer :: term_height, viewport_offset, visible_items
94
+        character(len=256) :: repo_name, branch_name, term_program
95
+        integer :: term_height, viewport_offset, visible_items, top_padding
9696
         type(tree_node), pointer :: tree_root
9797
 
9898
         ! Initialize tree pointer
9999
         tree_root => null()
100100
 
101
+        ! Detect terminal type for padding (fixes WezTerm/Ghostty top line cutoff)
102
+        call get_environment_variable("TERM_PROGRAM", term_program)
103
+        if (index(term_program, "WezTerm") > 0 .or. index(term_program, "ghostty") > 0) then
104
+            top_padding = 2  ! WezTerm/Ghostty need 2 lines of padding
105
+        else if (index(term_program, "Apple_Terminal") > 0 .or. index(term_program, "iTerm") > 0) then
106
+            top_padding = 2  ! Terminal.app and iTerm2 also need 2 lines
107
+        else
108
+            top_padding = 1  ! Other terminals need 1 line
109
+        end if
110
+
101111
         ! Get repo and branch info
102112
         call get_repo_info(repo_name, branch_name)
103113
 
@@ -161,7 +171,7 @@ contains
161171
             ! Clear screen and redraw
162172
             call clear_screen()
163173
             call draw_interactive_tree(tree_root, items, n_items, selected, &
164
-                                       repo_name, branch_name, viewport_offset, visible_items)
174
+                                       repo_name, branch_name, viewport_offset, visible_items, top_padding)
165175
 
166176
             ! Read key
167177
             call read_key(key)