@@ -6151,6 +6151,7 @@ contains |
| 6151 | 6151 | integer :: i, slen |
| 6152 | 6152 | integer :: state |
| 6153 | 6153 | integer :: terminator_code |
| 6154 | + integer :: last_newline_pos |
| 6154 | 6155 | |
| 6155 | 6156 | ! State machine for parsing escape sequences |
| 6156 | 6157 | integer, parameter :: STATE_NORMAL = 0 |
@@ -6159,6 +6160,7 @@ contains |
| 6159 | 6160 | integer, parameter :: STATE_OSC = 3 |
| 6160 | 6161 | |
| 6161 | 6162 | vlen = 0 |
| 6163 | + last_newline_pos = 0 |
| 6162 | 6164 | slen = len_trim(str) |
| 6163 | 6165 | state = STATE_NORMAL |
| 6164 | 6166 | |
@@ -6175,6 +6177,7 @@ contains |
| 6175 | 6177 | else if (str(i:i) == char(10)) then ! LF |
| 6176 | 6178 | ! Newline resets visual position (for multi-line prompts) |
| 6177 | 6179 | vlen = 0 |
| 6180 | + last_newline_pos = i |
| 6178 | 6181 | i = i + 1 |
| 6179 | 6182 | else |
| 6180 | 6183 | ! Regular character - count it (account for wide UTF-8 chars) |
@@ -6221,6 +6224,26 @@ contains |
| 6221 | 6224 | end if |
| 6222 | 6225 | end select |
| 6223 | 6226 | end do |
| 6227 | + |
| 6228 | + ! Debug: log visual_length result for multi-line prompts |
| 6229 | + if (last_newline_pos > 0 .and. slen > 10) then |
| 6230 | + block |
| 6231 | + integer :: dbu_vl |
| 6232 | + open(newunit=dbu_vl, file='/tmp/fortsh_readline_debug.log', & |
| 6233 | + status='unknown', position='append', action='write') |
| 6234 | + write(dbu_vl, '(A,I0,A,I0,A,I0,A,I0)') & |
| 6235 | + 'VLEN: result=', vlen, ' slen=', slen, & |
| 6236 | + ' newline_at=', last_newline_pos, ' chars_after_nl=', slen - last_newline_pos |
| 6237 | + if (last_newline_pos < slen) then |
| 6238 | + write(dbu_vl, '(A)', advance='no') ' after_nl_bytes=[' |
| 6239 | + do i = last_newline_pos + 1, min(slen, last_newline_pos + 20) |
| 6240 | + write(dbu_vl, '(I0,A)', advance='no') iachar(str(i:i)), ' ' |
| 6241 | + end do |
| 6242 | + write(dbu_vl, '(A)') ']' |
| 6243 | + end if |
| 6244 | + close(dbu_vl) |
| 6245 | + end block |
| 6246 | + end if |
| 6224 | 6247 | end function |
| 6225 | 6248 | |
| 6226 | 6249 | ! =========================================================================== |