1
- use clap:: Parser ;
2
- use mi:: {
3
- data_disassemble, data_read_memory_bytes, parse_asm_insns_values, parse_key_value_pairs,
4
- parse_register_values, register_x86_64, Asm , MIResponse , Register ,
5
- } ;
6
- use ratatui:: widgets:: block:: Title ;
7
- use ratatui:: widgets:: { Cell , Row , Table , TableState } ;
8
1
use std:: fs:: File ;
9
2
use std:: io:: { BufRead , BufReader , Read , Write } ;
10
3
use std:: net:: { SocketAddr , TcpStream } ;
@@ -13,13 +6,15 @@ use std::sync::{Arc, Mutex};
13
6
use std:: thread;
14
7
use std:: time:: Duration ;
15
8
use std:: { error:: Error , io} ;
16
- use tui_input:: backend:: crossterm:: EventHandler ;
17
- use tui_input:: Input ;
18
9
10
+ use clap:: Parser ;
19
11
use env_logger:: { Builder , Env } ;
20
12
use log:: debug;
21
13
use ratatui:: layout:: { Constraint , Layout } ;
22
14
use ratatui:: prelude:: * ;
15
+ use ratatui:: style:: Styled ;
16
+ use ratatui:: widgets:: block:: Title ;
17
+ use ratatui:: widgets:: { Cell , Row , Table , TableState } ;
23
18
use ratatui:: {
24
19
crossterm:: {
25
20
event:: { self , DisableMouseCapture , Event , KeyCode } ,
@@ -28,15 +23,27 @@ use ratatui::{
28
23
} ,
29
24
widgets:: { Block , Borders , List , ListItem , Paragraph } ,
30
25
} ;
26
+ use tui_input:: backend:: crossterm:: EventHandler ;
27
+ use tui_input:: Input ;
31
28
use Constraint :: { Fill , Length , Max , Min } ;
32
29
33
30
mod mi;
31
+ use mi:: {
32
+ data_disassemble, data_read_memory_bytes, parse_asm_insns_values, parse_key_value_pairs,
33
+ parse_register_values, register_x86_64, Asm , MIResponse , Register ,
34
+ } ;
34
35
35
36
enum InputMode {
36
37
Normal ,
37
38
Editing ,
38
39
}
39
40
41
+ // Taco bell colors
42
+ const BLUE : Color = Color :: Rgb ( 54 , 57 , 154 ) ;
43
+ const PURPLE : Color = Color :: Rgb ( 167 , 123 , 202 ) ;
44
+ const PINK : Color = Color :: Rgb ( 239 , 24 , 151 ) ;
45
+ const YELLOW : Color = Color :: Rgb ( 254 , 224 , 18 ) ;
46
+
40
47
use std:: collections:: { HashMap , VecDeque } ;
41
48
42
49
struct LimitedBuffer < T > {
@@ -484,8 +491,8 @@ fn ui(f: &mut Frame, app: &App) {
484
491
Ok ( regs) => {
485
492
for ( name, register) in regs. iter ( ) {
486
493
rows. push ( Row :: new ( vec ! [
487
- name. to_string( ) ,
488
- register. value. clone( ) . unwrap( ) ,
494
+ Cell :: from ( name. to_string( ) ) . style ( Style :: new ( ) . fg ( PURPLE ) ) ,
495
+ Cell :: from ( register. value. clone( ) . unwrap( ) ) ,
489
496
] ) ) ;
490
497
}
491
498
}
@@ -495,8 +502,8 @@ fn ui(f: &mut Frame, app: &App) {
495
502
let widths = [ Constraint :: Length ( 5 ) , Constraint :: Length ( 20 ) ] ;
496
503
let table = Table :: new ( rows, widths) . block (
497
504
Block :: default ( )
498
- . borders ( Borders :: ALL )
499
- . title ( "Registers" . blue ( ) ) ,
505
+ . borders ( Borders :: TOP )
506
+ . title ( "Registers" . fg ( PINK ) ) ,
500
507
) ;
501
508
502
509
f. render_widget ( table, register) ;
@@ -509,7 +516,7 @@ fn ui(f: &mut Frame, app: &App) {
509
516
entries. sort_by ( |a, b| a. 0 . cmp ( & b. 0 ) ) ;
510
517
for ( addr, value) in entries. iter ( ) {
511
518
rows. push ( Row :: new ( vec ! [
512
- Cell :: from( format!( "0x{:02x}" , addr) ) . yellow ( ) ,
519
+ Cell :: from( format!( "0x{:02x}" , addr) ) . style ( Style :: new ( ) . fg ( PURPLE ) ) ,
513
520
Cell :: from( format!( "0x{:02x}" , value) ) ,
514
521
] ) ) ;
515
522
}
@@ -518,8 +525,11 @@ fn ui(f: &mut Frame, app: &App) {
518
525
}
519
526
520
527
let widths = [ Constraint :: Length ( 16 ) , Fill ( 1 ) ] ;
521
- let table = Table :: new ( rows, widths)
522
- . block ( Block :: default ( ) . borders ( Borders :: ALL ) . title ( "Stack" . blue ( ) ) ) ;
528
+ let table = Table :: new ( rows, widths) . block (
529
+ Block :: default ( )
530
+ . borders ( Borders :: TOP )
531
+ . title ( "Stack" . fg ( PINK ) ) ,
532
+ ) ;
523
533
524
534
f. render_widget ( table, stack) ;
525
535
@@ -552,7 +562,8 @@ fn ui(f: &mut Frame, app: &App) {
552
562
function_name = Some ( func_name. clone ( ) ) ;
553
563
}
554
564
}
555
- let addr_cell = Cell :: from ( format ! ( "0x{:02x}" , a. address) ) . yellow ( ) ;
565
+ let addr_cell =
566
+ Cell :: from ( format ! ( "0x{:02x}" , a. address) ) . style ( Style :: default ( ) . fg ( PURPLE ) ) ;
556
567
let inst_cell = if let Some ( pc_index) = pc_index {
557
568
if pc_index == index {
558
569
Cell :: from ( format ! ( "{}" , a. inst) ) . green ( )
@@ -570,14 +581,14 @@ fn ui(f: &mut Frame, app: &App) {
570
581
}
571
582
572
583
let tital = if let Some ( function_name) = function_name {
573
- Title :: from ( format ! ( "Instructions ({})" , function_name) . blue ( ) )
584
+ Title :: from ( format ! ( "Instructions ({})" , function_name) . fg ( PINK ) )
574
585
} else {
575
- Title :: from ( "Instructions" . blue ( ) )
586
+ Title :: from ( "Instructions" . fg ( PINK ) )
576
587
} ;
577
588
if let Some ( pc_index) = pc_index {
578
589
let widths = [ Constraint :: Length ( 16 ) , Fill ( 1 ) ] ;
579
590
let table = Table :: new ( rows, widths)
580
- . block ( Block :: default ( ) . borders ( Borders :: ALL ) . title ( tital) )
591
+ . block ( Block :: default ( ) . borders ( Borders :: TOP ) . title ( tital) )
581
592
. row_highlight_style ( Style :: new ( ) . green ( ) )
582
593
. highlight_symbol ( ">>" ) ;
583
594
let start_offset = if pc_index < 5 { 0 } else { pc_index - 5 } ;
@@ -586,7 +597,7 @@ fn ui(f: &mut Frame, app: &App) {
586
597
. with_selected ( pc_index) ;
587
598
f. render_stateful_widget ( table, asm, & mut table_state) ;
588
599
} else {
589
- let block = Block :: default ( ) . borders ( Borders :: ALL ) . title ( tital) ;
600
+ let block = Block :: default ( ) . borders ( Borders :: TOP ) . title ( tital) ;
590
601
f. render_widget ( block, asm) ;
591
602
}
592
603
@@ -603,13 +614,13 @@ fn ui(f: &mut Frame, app: &App) {
603
614
let messages = List :: new ( messages) . block (
604
615
Block :: default ( )
605
616
. borders ( Borders :: ALL )
606
- . title ( "Messages" . blue ( ) ) ,
617
+ . title ( "Messages" . fg ( BLUE ) ) ,
607
618
) ;
608
619
f. render_widget ( messages, other) ;
609
620
610
621
let response_widget = Paragraph :: new ( response_text) . block (
611
622
Block :: default ( )
612
- . title ( "Parsed Responses" . blue ( ) )
623
+ . title ( "Parsed Responses" . fg ( BLUE ) )
613
624
. borders ( Borders :: ALL ) ,
614
625
) ;
615
626
f. render_widget ( response_widget, parsed) ;
@@ -624,7 +635,11 @@ fn ui(f: &mut Frame, app: &App) {
624
635
InputMode :: Editing => Style :: default ( ) . fg ( Color :: Green ) ,
625
636
} )
626
637
. scroll ( ( 0 , scroll as u16 ) )
627
- . block ( Block :: default ( ) . borders ( Borders :: ALL ) . title ( "Input" ) ) ;
638
+ . block (
639
+ Block :: default ( )
640
+ . borders ( Borders :: ALL )
641
+ . title ( "Input" . fg ( YELLOW ) ) ,
642
+ ) ;
628
643
f. render_widget ( txt_input, input) ;
629
644
match app. input_mode {
630
645
InputMode :: Normal =>
0 commit comments