Skip to main content

IgnoreEof

Struct IgnoreEof 

Source
pub struct IgnoreEof<'a, 'b, S, T> { /* private fields */ }
Expand description

Input decorator that ignores EOF on a terminal

This is a decorator of Input that adds the behavior of the ignore-eof shell option.

The decorator is effective only when all of the following conditions are met:

  • The shell is interactive, that is, the Interactive option is enabled.
  • The ignore-eof option is enabled.
  • The input is a terminal.

The decorator reads from the inner input and usually returns the result as is. However, if the result is an empty string and the above conditions are met, the decorator will re-read the input until a non-empty string is obtained, an error occurs, or this process is repeated 20 times.

Implementations§

Source§

impl<'a, 'b, S, T> IgnoreEof<'a, 'b, S, T>

Source

pub fn new( inner: T, fd: Fd, env: &'a RefCell<&'b mut Env<S>>, message: String, ) -> Self

Creates a new IgnoreEof decorator.

The first argument is the inner Input that performs the actual input operation. The second argument is the file descriptor to be checked if it is a terminal. The third argument is the shell environment that contains the shell option state and the system interface to interact with the system. It is wrapped in a RefCell so that it can be shared with other decorators and the parser. The fourth argument is the text to be displayed when EOF is ignored.

The second argument fd should match the file descriptor that the inner input reads from. If the inner input reads from a different file descriptor, the IgnoreEof decorator may not detect the terminal correctly.

Trait Implementations§

Source§

impl<S, T: Clone> Clone for IgnoreEof<'_, '_, S, T>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'a, 'b, S: Debug, T: Debug> Debug for IgnoreEof<'a, 'b, S, T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<S: Fcntl + Isatty + Write, T: Input> Input for IgnoreEof<'_, '_, S, T>

Source§

async fn next_line(&mut self, context: &Context) -> Result

Reads a next line of the source code. Read more

Auto Trait Implementations§

§

impl<'a, 'b, S, T> Freeze for IgnoreEof<'a, 'b, S, T>
where T: Freeze,

§

impl<'a, 'b, S, T> !RefUnwindSafe for IgnoreEof<'a, 'b, S, T>

§

impl<'a, 'b, S, T> !Send for IgnoreEof<'a, 'b, S, T>

§

impl<'a, 'b, S, T> !Sync for IgnoreEof<'a, 'b, S, T>

§

impl<'a, 'b, S, T> Unpin for IgnoreEof<'a, 'b, S, T>
where T: Unpin,

§

impl<'a, 'b, S, T> !UnwindSafe for IgnoreEof<'a, 'b, S, T>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> InputObject for T
where T: Input,

Source§

fn next_line<'a>( &'a mut self, context: &'a Context, ) -> Pin<Box<dyn Future<Output = Result<String, Error>> + 'a>>

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.