@@ -179,6 +179,7 @@ async fn run_interactive_mode(process_list: &mut ProcessList, args: &Args) -> Re
179179 state. only_active = args. only ;
180180 state. accumulated = args. accumulated ;
181181 state. show_processes = args. processes ;
182+ state. kilobytes = args. kilobytes ;
182183
183184 // Start async data stream
184185 let mut data_cancel_token = CancellationToken :: new ( ) ;
@@ -248,8 +249,33 @@ async fn run_interactive_mode(process_list: &mut ProcessList, args: &Args) -> Re
248249 state. selection_mode = false ;
249250 state. selected_row = None ;
250251 }
252+ KeyCode :: Char ( 'k' ) | KeyCode :: Char ( 'K' ) => {
253+ state. kilobytes = !state. kilobytes;
254+ }
255+ KeyCode :: Char ( 'c' ) | KeyCode :: Char ( 'C' ) => {
256+ state. column_mode = !state. column_mode;
257+ if state. column_mode {
258+ // Start the cursor on the current sort column.
259+ state. column_cursor = state. sort_column;
260+ }
261+ }
251262 KeyCode :: Char ( ' ' ) => {
252- state. paused = !state. paused;
263+ if state. column_mode {
264+ // Toggle the selected column; never hide the last one.
265+ if state. visible_columns. is_visible( state. column_cursor) {
266+ if state. visible_columns. count( has_delay_acct) > 1 {
267+ state
268+ . visible_columns
269+ . set_visible( state. column_cursor, false ) ;
270+ }
271+ } else {
272+ state
273+ . visible_columns
274+ . set_visible( state. column_cursor, true ) ;
275+ }
276+ } else {
277+ state. paused = !state. paused;
278+ }
253279 }
254280 KeyCode :: Char ( 'p' ) | KeyCode :: Char ( 'P' ) => {
255281 state. show_processes = !state. show_processes;
@@ -269,16 +295,28 @@ async fn run_interactive_mode(process_list: &mut ProcessList, args: &Args) -> Re
269295 ) ;
270296 }
271297 KeyCode :: Left => {
272- state. sort_column = state. sort_column. cycle_backward( has_delay_acct) ;
273- state. scroll_offset = 0 ;
274- state. selection_mode = false ;
275- state. selected_row = None ;
298+ if state. column_mode {
299+ state. column_cursor =
300+ state. column_cursor. cycle_backward( has_delay_acct) ;
301+ } else {
302+ state. sort_column =
303+ state. sort_column. cycle_backward( has_delay_acct) ;
304+ state. scroll_offset = 0 ;
305+ state. selection_mode = false ;
306+ state. selected_row = None ;
307+ }
276308 }
277309 KeyCode :: Right => {
278- state. sort_column = state. sort_column. cycle_forward( has_delay_acct) ;
279- state. scroll_offset = 0 ;
280- state. selection_mode = false ;
281- state. selected_row = None ;
310+ if state. column_mode {
311+ state. column_cursor =
312+ state. column_cursor. cycle_forward( has_delay_acct) ;
313+ } else {
314+ state. sort_column =
315+ state. sort_column. cycle_forward( has_delay_acct) ;
316+ state. scroll_offset = 0 ;
317+ state. selection_mode = false ;
318+ state. selected_row = None ;
319+ }
282320 }
283321 KeyCode :: Up => {
284322 if !state. selection_mode {
@@ -349,6 +387,7 @@ async fn run_interactive_mode(process_list: &mut ProcessList, args: &Args) -> Re
349387 }
350388 }
351389 KeyCode :: Esc => {
390+ state. column_mode = false ;
352391 state. selection_mode = false ;
353392 state. selected_row = None ;
354393 }
0 commit comments