1
- use std:: { env, fmt :: Display } ;
1
+ use std:: env;
2
2
3
- use bevy:: app:: App ;
4
- use clap:: { Parser , Subcommand } ;
3
+ use args:: { Args , LogoVariant , MazeVariant , Variant } ;
4
+ use bevy:: { app:: App , color:: Srgba } ;
5
+ use clap:: Parser ;
5
6
use ttysvr:: {
6
- AppPlugin , SaverVariant , LOGO_PATH_DVD , LOGO_PATH_TTY , MAZE_CEILING_PATH_BRICK ,
7
+ AppPlugin , SaverVariant , Settings , LOGO_PATH_DVD , LOGO_PATH_TTY , MAZE_CEILING_PATH_BRICK ,
7
8
MAZE_CEILING_PATH_HEDGE , MAZE_WALL_PATH_BRICK , MAZE_WALL_PATH_HEDGE ,
8
9
} ;
9
10
10
- #[ derive( Parser ) ]
11
- #[ command( author, version, about, long_about = None ) ]
12
- #[ command( propagate_version = true ) ]
13
- struct Cli {
14
- #[ command( subcommand) ]
15
- variant : Option < Variant > ,
16
-
17
- #[ arg(
18
- short,
19
- long,
20
- global = true ,
21
- name = "DELAY" ,
22
- help = "Prints command for initiating ttysvr in DELAY seconds."
23
- ) ]
24
- init : Option < u32 > ,
25
-
26
- #[ arg(
27
- short,
28
- long,
29
- global = true ,
30
- help = "Prints command for cancelling ttysvr in current shell."
31
- ) ]
32
- cancel : bool ,
33
- }
34
-
35
- #[ derive( Subcommand ) ]
36
- pub enum Variant {
37
- Bubbles ,
38
- Logo {
39
- #[ command( subcommand) ]
40
- variant : Option < LogoVariant > ,
41
- } ,
42
- Maze {
43
- #[ command( subcommand) ]
44
- variant : Option < MazeVariant > ,
45
- } ,
46
- }
47
-
48
- #[ derive( Subcommand ) ]
49
- pub enum LogoVariant {
50
- Dvd ,
51
- Tty ,
52
- }
53
-
54
- #[ derive( Subcommand ) ]
55
- pub enum MazeVariant {
56
- Brick ,
57
- Hedge ,
58
- }
59
-
60
- impl Display for Variant {
61
- fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
62
- match self {
63
- Variant :: Bubbles => write ! ( f, "bubbles" ) ,
64
- Variant :: Logo { variant } => {
65
- if let Some ( variant) = variant {
66
- write ! ( f, "logo {variant}" )
67
- } else {
68
- write ! ( f, "logo" )
69
- }
70
- }
71
- Variant :: Maze { variant } => {
72
- if let Some ( variant) = variant {
73
- write ! ( f, "maze {variant}" )
74
- } else {
75
- write ! ( f, "maze" )
76
- }
77
- }
78
- }
79
- }
80
- }
81
-
82
- impl Display for LogoVariant {
83
- fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
84
- match self {
85
- LogoVariant :: Dvd => write ! ( f, "dvd" ) ,
86
- LogoVariant :: Tty => write ! ( f, "tty" ) ,
87
- }
88
- }
89
- }
90
-
91
- impl Display for MazeVariant {
92
- fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
93
- match self {
94
- MazeVariant :: Brick => write ! ( f, "brick" ) ,
95
- MazeVariant :: Hedge => write ! ( f, "hedge" ) ,
96
- }
97
- }
98
- }
11
+ mod args;
99
12
100
13
fn main ( ) {
101
- let Cli {
14
+ let Args {
102
15
variant,
16
+ background,
103
17
init,
104
18
cancel,
105
- } = Cli :: parse ( ) ;
106
-
107
- let saver_variant = match variant {
108
- Some ( Variant :: Bubbles ) => SaverVariant :: Bubbles ,
109
- Some ( Variant :: Logo { ref variant } ) => match variant {
110
- Some ( LogoVariant :: Dvd ) | None => SaverVariant :: Logo ( LOGO_PATH_DVD . into ( ) ) ,
111
- Some ( LogoVariant :: Tty ) => SaverVariant :: Logo ( LOGO_PATH_TTY . into ( ) ) ,
112
- } ,
113
- Some ( Variant :: Maze { ref variant } ) => match variant {
114
- Some ( MazeVariant :: Brick ) | None => {
115
- SaverVariant :: Maze ( MAZE_WALL_PATH_BRICK . into ( ) , MAZE_CEILING_PATH_BRICK . into ( ) )
116
- }
117
- Some ( MazeVariant :: Hedge ) => {
118
- SaverVariant :: Maze ( MAZE_WALL_PATH_HEDGE . into ( ) , MAZE_CEILING_PATH_HEDGE . into ( ) )
119
- }
120
- } ,
121
- None => rand:: random ( ) ,
122
- } ;
19
+ } = Args :: parse ( ) ;
123
20
124
21
if let Some ( delay) = init {
125
22
let executable_string = env:: args ( ) . next ( ) . unwrap_or ( "ttysvr" . into ( ) ) ;
126
23
let variant_string = match variant {
127
- None => "" . into ( ) ,
128
24
Some ( variant) => format ! ( " {variant}" ) ,
25
+ None => "" . into ( ) ,
26
+ } ;
27
+ let background_string = match background {
28
+ Some ( background) => format ! ( " --bg={background}" ) ,
29
+ None => "" . into ( ) ,
129
30
} ;
130
31
131
32
#[ rustfmt:: skip]
132
33
println ! (
133
34
"
134
- TMOUT={delay}; trap \" {executable_string}{variant_string}; zle reset-prompt\" ALRM
35
+ TMOUT={delay}; trap \" {executable_string}{variant_string}{background_string} ; zle reset-prompt\" ALRM
135
36
136
37
# WRAP THIS COMMAND IN EVAL WITH BACKTICKS (ZSH ONLY)
137
- # EXAMPLE: eval `ttysvr{variant_string} --init {delay}`
38
+ # EXAMPLE: eval `ttysvr{variant_string}{background_string} --init {delay}`
138
39
"
139
40
) ;
140
41
return ;
@@ -153,5 +54,27 @@ TMOUT=0
153
54
return ;
154
55
}
155
56
156
- App :: new ( ) . add_plugins ( AppPlugin ( saver_variant) ) . run ( ) ;
57
+ let saver_variant = match variant {
58
+ Some ( Variant :: Bubbles ) => SaverVariant :: Bubbles ,
59
+ Some ( Variant :: Logo { ref variant } ) => match variant {
60
+ Some ( LogoVariant :: Dvd ) | None => SaverVariant :: Logo ( LOGO_PATH_DVD . into ( ) ) ,
61
+ Some ( LogoVariant :: Tty ) => SaverVariant :: Logo ( LOGO_PATH_TTY . into ( ) ) ,
62
+ } ,
63
+ Some ( Variant :: Maze { ref variant } ) => match variant {
64
+ Some ( MazeVariant :: Brick ) | None => {
65
+ SaverVariant :: Maze ( MAZE_WALL_PATH_BRICK . into ( ) , MAZE_CEILING_PATH_BRICK . into ( ) )
66
+ }
67
+ Some ( MazeVariant :: Hedge ) => {
68
+ SaverVariant :: Maze ( MAZE_WALL_PATH_HEDGE . into ( ) , MAZE_CEILING_PATH_HEDGE . into ( ) )
69
+ }
70
+ } ,
71
+ None => rand:: random ( ) ,
72
+ } ;
73
+
74
+ let settings = Settings {
75
+ variant : saver_variant,
76
+ background : background. map_or ( Srgba :: NONE , |bg| bg. 0 ) ,
77
+ } ;
78
+
79
+ App :: new ( ) . add_plugins ( AppPlugin ( settings) ) . run ( ) ;
157
80
}
0 commit comments