@@ -45,6 +45,25 @@ struct TermInner {
4545 prompt_guard : Mutex < ( ) > ,
4646}
4747
48+ impl TermInner {
49+ fn new ( target : TermTarget ) -> Self {
50+ Self :: with_buffer ( target, None )
51+ }
52+
53+ fn new_buffered ( target : TermTarget ) -> Self {
54+ Self :: with_buffer ( target, Some ( vec ! [ ] ) )
55+ }
56+
57+ fn with_buffer ( target : TermTarget , buffer : Option < Vec < u8 > > ) -> Self {
58+ Self {
59+ target,
60+ buffer : buffer. map ( Mutex :: new) ,
61+ prompt : RwLock :: new ( String :: new ( ) ) ,
62+ prompt_guard : Mutex :: new ( ( ) ) ,
63+ }
64+ }
65+ }
66+
4867/// The family of the terminal.
4968#[ derive( Debug , Copy , Clone , PartialEq , Eq ) ]
5069pub enum TermFamily {
@@ -153,43 +172,23 @@ impl Term {
153172 /// Return a new unbuffered terminal.
154173 #[ inline]
155174 pub fn stdout ( ) -> Term {
156- Term :: with_inner ( TermInner {
157- target : TermTarget :: Stdout ,
158- buffer : None ,
159- prompt : RwLock :: new ( String :: new ( ) ) ,
160- prompt_guard : Mutex :: new ( ( ) ) ,
161- } )
175+ Term :: with_inner ( TermInner :: new ( TermTarget :: Stdout ) )
162176 }
163177
164178 /// Return a new unbuffered terminal to stderr.
165179 #[ inline]
166180 pub fn stderr ( ) -> Term {
167- Term :: with_inner ( TermInner {
168- target : TermTarget :: Stderr ,
169- buffer : None ,
170- prompt : RwLock :: new ( String :: new ( ) ) ,
171- prompt_guard : Mutex :: new ( ( ) ) ,
172- } )
181+ Term :: with_inner ( TermInner :: new ( TermTarget :: Stderr ) )
173182 }
174183
175184 /// Return a new buffered terminal.
176185 pub fn buffered_stdout ( ) -> Term {
177- Term :: with_inner ( TermInner {
178- target : TermTarget :: Stdout ,
179- buffer : Some ( Mutex :: new ( vec ! [ ] ) ) ,
180- prompt : RwLock :: new ( String :: new ( ) ) ,
181- prompt_guard : Mutex :: new ( ( ) ) ,
182- } )
186+ Term :: with_inner ( TermInner :: new_buffered ( TermTarget :: Stdout ) )
183187 }
184188
185189 /// Return a new buffered terminal to stderr.
186190 pub fn buffered_stderr ( ) -> Term {
187- Term :: with_inner ( TermInner {
188- target : TermTarget :: Stderr ,
189- buffer : Some ( Mutex :: new ( vec ! [ ] ) ) ,
190- prompt : RwLock :: new ( String :: new ( ) ) ,
191- prompt_guard : Mutex :: new ( ( ) ) ,
192- } )
191+ Term :: with_inner ( TermInner :: new_buffered ( TermTarget :: Stderr ) )
193192 }
194193
195194 /// Return a terminal for the given Read/Write pair styled like stderr.
@@ -209,16 +208,11 @@ impl Term {
209208 R : Read + Debug + AsRawFd + Send + ' static ,
210209 W : Write + Debug + AsRawFd + Send + ' static ,
211210 {
212- Term :: with_inner ( TermInner {
213- target : TermTarget :: ReadWritePair ( ReadWritePair {
214- read : Arc :: new ( Mutex :: new ( read) ) ,
215- write : Arc :: new ( Mutex :: new ( write) ) ,
216- style,
217- } ) ,
218- buffer : None ,
219- prompt : RwLock :: new ( String :: new ( ) ) ,
220- prompt_guard : Mutex :: new ( ( ) ) ,
221- } )
211+ Term :: with_inner ( TermInner :: new ( TermTarget :: ReadWritePair ( ReadWritePair {
212+ read : Arc :: new ( Mutex :: new ( read) ) ,
213+ write : Arc :: new ( Mutex :: new ( write) ) ,
214+ style,
215+ } ) ) )
222216 }
223217
224218 /// Return the style for this terminal.
0 commit comments