@@ -166,7 +166,8 @@ size_t display_data_rowcount(struct zsvsheet_display_dimensions *dims) {
166
166
return dims -> rows - dims -> footer_span - dims -> header_span ;
167
167
}
168
168
169
- char zsvsheet_status_text [256 ] = {0 };
169
+ static int zsvsheet_status_priority ;
170
+ static char zsvsheet_status_text [256 ];
170
171
static void zsvsheet_display_status_text (const struct zsvsheet_display_dimensions * ddims ) {
171
172
// clear the entire line
172
173
mvprintw (ddims -> rows - ddims -> footer_span , 0 , "%-*s" , (int )sizeof (zsvsheet_status_text ), "" );
@@ -177,15 +178,24 @@ static void zsvsheet_display_status_text(const struct zsvsheet_display_dimension
177
178
attroff (A_REVERSE );
178
179
}
179
180
180
- static void zsvsheet_priv_set_status (const struct zsvsheet_display_dimensions * ddims , int overwrite , const char * fmt ,
181
+ #define ZSVSHEET_STATUS_LOW_PRIO 1
182
+ #define ZSVSHEET_STATUS_HIGH_PRIO 10
183
+
184
+ static void zsvsheet_priv_set_status (const struct zsvsheet_display_dimensions * ddims , int priority , const char * fmt ,
181
185
...) {
182
- if (overwrite || !* zsvsheet_status_text ) {
186
+ if (priority > zsvsheet_status_priority || !* zsvsheet_status_text ) {
183
187
va_list argv ;
184
188
va_start (argv , fmt );
185
189
vsnprintf (zsvsheet_status_text , sizeof (zsvsheet_status_text ), fmt , argv );
186
190
va_end (argv );
187
191
// note: if (n < (int)sizeof(zsvsheet_status_text)), then we just ignore
192
+ zsvsheet_status_priority = priority ;
188
193
}
194
+
195
+ // The priority decays with each call which is at least n times per second as set by halfdelay
196
+ if (zsvsheet_status_priority > 0 )
197
+ zsvsheet_status_priority -- ;
198
+
189
199
zsvsheet_display_status_text (ddims );
190
200
}
191
201
@@ -331,7 +341,7 @@ char zsvsheet_handle_find_next(struct zsvsheet_ui_buffer *uib, const char *needl
331
341
* update_buffer = zsvsheet_goto_input_raw_row (uib , zsvsheet_opts -> found_rownum , header_span , ddims , (size_t )-1 );
332
342
return 1 ;
333
343
}
334
- zsvsheet_priv_set_status (ddims , 1 , "Not found" );
344
+ zsvsheet_priv_set_status (ddims , ZSVSHEET_STATUS_HIGH_PRIO , "Not found" );
335
345
return 0 ;
336
346
}
337
347
@@ -394,11 +404,11 @@ static zsvsheet_status zsvsheet_open_file_handler(struct zsvsheet_proc_context *
394
404
if ((err = zsvsheet_ui_buffer_open_file (filename , NULL , state -> custom_prop_handler , di -> ui_buffers .base ,
395
405
di -> ui_buffers .current ))) {
396
406
if (err > 0 )
397
- zsvsheet_priv_set_status (di -> dimensions , 1 , "%s: %s" , filename , strerror (err ));
407
+ zsvsheet_priv_set_status (di -> dimensions , ZSVSHEET_STATUS_HIGH_PRIO , "%s: %s" , filename , strerror (err ));
398
408
else if (err < 0 )
399
- zsvsheet_priv_set_status (di -> dimensions , 1 , "Unexpected error" );
409
+ zsvsheet_priv_set_status (di -> dimensions , ZSVSHEET_STATUS_HIGH_PRIO , "Unexpected error" );
400
410
else
401
- zsvsheet_priv_set_status (di -> dimensions , 1 , "Not found: %s" , filename );
411
+ zsvsheet_priv_set_status (di -> dimensions , ZSVSHEET_STATUS_HIGH_PRIO , "Not found: %s" , filename );
402
412
return zsvsheet_status_ignore ;
403
413
}
404
414
no_input :
@@ -645,7 +655,7 @@ static void zsvsheet_check_buffer_worker_updates(struct zsvsheet_ui_buffer *ub,
645
655
struct zsvsheet_sheet_context * handler_state ) {
646
656
pthread_mutex_lock (& ub -> mutex );
647
657
if (ub -> status )
648
- zsvsheet_priv_set_status (display_dims , 1 , ub -> status );
658
+ zsvsheet_priv_set_status (display_dims , ZSVSHEET_STATUS_LOW_PRIO , ub -> status );
649
659
if (ub -> index_ready && ub -> dimensions .row_count != ub -> index -> row_count + 1 ) {
650
660
ub -> dimensions .row_count = ub -> index -> row_count + 1 ;
651
661
handler_state -> display_info .update_buffer = true;
@@ -741,7 +751,7 @@ int ZSV_MAIN_FUNC(ZSV_COMMAND)(int argc, const char *argv[], struct zsv_opts *op
741
751
ch = getch ();
742
752
743
753
handler_state .display_info .update_buffer = false;
744
- zsvsheet_priv_set_status (& display_dims , 1 , "" );
754
+ zsvsheet_priv_set_status (& display_dims , ZSVSHEET_STATUS_LOW_PRIO , "" );
745
755
746
756
if (ch != ERR ) {
747
757
status = zsvsheet_key_press (ch , & handler_state );
@@ -758,7 +768,7 @@ int ZSV_MAIN_FUNC(ZSV_COMMAND)(int argc, const char *argv[], struct zsv_opts *op
758
768
struct zsvsheet_opts zsvsheet_opts = {0 };
759
769
if (read_data (& ub , NULL , current_ui_buffer -> input_offset .row , current_ui_buffer -> input_offset .col , header_span ,
760
770
& zsvsheet_opts , custom_prop_handler )) {
761
- zsvsheet_priv_set_status (& display_dims , 1 , "Unexpected error!" ); // to do: better error message
771
+ zsvsheet_priv_set_status (& display_dims , ZSVSHEET_STATUS_HIGH_PRIO , "Unexpected error!" ); // to do: better error message
762
772
continue ;
763
773
}
764
774
}
0 commit comments