Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

allow application to received args via piped stdin #644

Closed
jrnxf opened this issue Mar 19, 2022 · 4 comments
Closed

allow application to received args via piped stdin #644

jrnxf opened this issue Mar 19, 2022 · 4 comments

Comments

@jrnxf
Copy link

jrnxf commented Mar 19, 2022

Is your feature request related to a problem? Please describe.
caveat: I'm relatively new to rust, and by extension crossterm, so it's possible this feature already exists, however I haven't been able to find any examples in the documentation.

I'm working on a TUI application using tui and crossterm under the hood. As part of my application, I'm hoping to allow for users to pipe in a particular parameter. An example would look like

cat foo.txt | my_app
or a slightly different example
cat foo.txt | xargs my_app -p

Each time I attempt to do this I hit the following error:
Custom { kind: Other, error: "Failed to initialize input reader" }

I believe this is happening because stdin is no longer a tty? I'm a little unsure on that.

Is what I'm trying to accomplish possible, or is this a limitation of crossterm? If it is (or is not) possible, would someone mind giving me a small primer on how/why? I'm super keen on understanding this problem space better.

Describe the solution you'd like
All I want is to allow users to pipe in an argument via stdin to my application.

Describe alternatives you've considered in any
As stated above, I've tried using xargs in hopes that that might resolve the issue but i'm still not having success.

Additional context
Here is my main fn if that helps conceptualize

fn main() -> Result<(), Box<dyn Error>> {


    // check for input on stdin here, if it exists, store it, otherwise continue


    let args = Args::parse();
    enable_raw_mode()?;

    let mut stdout = io::stdout();

    execute!(stdout, EnterAlternateScreen)?;

    let backend = CrosstermBackend::new(stdout);

    let mut terminal = Terminal::new(backend)?;

    let mut app = App::new(args);
    let result = run_app(&mut terminal, &mut app);

    disable_raw_mode()?;
    execute!(terminal.backend_mut(), LeaveAlternateScreen,)?;
    terminal.show_cursor()?;

    if let Err(err) = result {
        println!("{:?}", err)
    }

    Ok(())
}
@sigmaSd
Copy link
Contributor

sigmaSd commented Mar 19, 2022

Its a current limitation of crossterm #396

@jrnxf
Copy link
Author

jrnxf commented Mar 19, 2022

Its a current limitation of crossterm #396

Ah bummer. I read through that issue earlier and couldn't quite piece together if it was the same issue I was running into. I'm still curious as to the why, though. Was my assumption about stdin's tty being closed correct?

@sigmaSd
Copy link
Contributor

sigmaSd commented Mar 19, 2022

What I remember is windows and linux works

only mac doesn't work and the issue is explained here #500

@jrnxf
Copy link
Author

jrnxf commented Mar 19, 2022

big bummer :/ can confirm my code works on Linux

@jrnxf jrnxf closed this as completed May 3, 2022
amtoine pushed a commit to amtoine/nu_plugin_explore that referenced this issue Apr 13, 2024
Copied ver batim from sigoden/aichat#264.

### Background

- Identical bug: sigoden/aichat#257
- Request for docs: crossterm-rs/crossterm#849
- Similar bug:
crossterm-rs/crossterm#644 (comment)
- Source bug: crossterm-rs/crossterm#500
- Fix (enabled in this PR): crossterm-rs/crossterm#735

### Error

```
│hread '<unnamed>' panicked at src/event.rs:46:45:                                                             │
│o events available: Custom { kind: Other, error: "Failed to initialize input reader" }                        │
```

### Backtrace

In case of regression:

```diff
┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│key                             bfield                                                                                                          shape           │
│version                          0.91.0                                                                                                         string          │
│branch                          c                                                                                                               string          │
│commit_hash                     d                                                                                                               string          │
│build_os                         macos-x86_64                                                                                                   string          │
│build_target                     x86_64-apple-darwin                                                                                            string          │
│rust_version                     rustc 1.76.0 (07dca489a 2024-02-04) (Homebrew)                                                                 string          │
│cargo_version                    cargo 1.76.0                                                                                                   string          │
│build_time                       2024-03-05 20:28:40 +00:00                                                                                     string          │
│build_rust_channel               release                                                                                                        string          │
│allocator                        mimalloc                                                                                                       string          │
│features                         dataframe, default, extra, sqlite, trash, which, zip                                                           string          │
│installed_plugins                nu_plugin_explore                                                                                              string          │
│                                                                                                                                                                │
│                                                                                                                                                                │
│                                                                                                                                                                │
│                                                                                                                                                                │
│                                                                                                                                                                │
│                                                                                                                                                                │
│                                                                                                                                                                │
│                                                                                                                                                                │
│                                                                                                                                                                │
│                                                                                                                                                                │
│                                                                                                                                                                │
│                                                                                                                                                                │
│                                                                                                                                                                │
│                                                                                                                                                                │
│                                                                                                                                                                │
│                                                                                                                                                                │
│                                                                                                                                                                │
│                                                                                                                                                                │
│                                                                                                                                                                │
│                                                                                                                                                                │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
cell path: $.version
 NORMAL                                                                                 i to INSERT | hjkl to move around | p to peek | t to transpose | q to quit   0:        0x101a6ab65 - std::backtrace_rs::backtrace::libunwind::trace::he87ba3c236c7ad5f
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/../../backtrace/src/backtrace/libunwind.rs:104:5
   1:        0x101a6ab65 - std::backtrace_rs::backtrace::trace_unsynchronized::h3ad5d899409e49ee
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:        0x101a6ab65 - std::sys_common::backtrace::_print_fmt::hb1551f966d2dd86d
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/sys_common/backtrace.rs:68:5
   3:        0x101a6ab65 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hbd71adb7a72f4105
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/sys_common/backtrace.rs:44:22
   4:        0x101a8c993 - core::fmt::rt::Argument::fmt::h4224d647cce844bf
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/fmt/rt.rs:142:9
   5:        0x101a8c993 - core::fmt::write::h30346430340bc336
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/fmt/mod.rs:1120:17
   6:        0x101a67a8e - std::io::Write::write_fmt::heb3d6316c565d5b1
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/io/mod.rs:1810:15
   7:        0x101a6a939 - std::sys_common::backtrace::_print::hc99e5bf521524ac2
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/sys_common/backtrace.rs:47:5
   8:        0x101a6a939 - std::sys_common::backtrace::print::h67e51ff2e3d5cfbd
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/sys_common/backtrace.rs:34:9
   9:        0x101a6c575 - std::panicking::default_hook::{{closure}}::hc666c9a55318d1f1
  10:        0x101a6c2ee - std::panicking::default_hook::hf980b1da49948523
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:292:9
  11:        0x100e53d54 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h09d0f3f719801ec9
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/alloc/src/boxed.rs:2029:9
+ 12:        0x100e4c81d - nu_plugin_explore::tui::Tui<B>::init::{{closure}}::h92cf9edd04f48f7a
+                              at /Users/texas/Developer/git/nu_plugin_explore/src/tui.rs:45:13
  13:        0x101a6cb75 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h3a63db2ca77cedb5
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/alloc/src/boxed.rs:2029:9
  14:        0x101a6cb75 - std::panicking::rust_panic_with_hook::h683bce980186bbbe
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:783:13
  15:        0x101a6c904 - std::panicking::begin_panic_handler::{{closure}}::ha6dbd11ba0ec8af1
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:657:13
  16:        0x101a6b059 - std::sys_common::backtrace::__rust_end_short_backtrace::h889430bddc786c98
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/sys_common/backtrace.rs:171:18
  17:        0x101a6c642 - rust_begin_unwind
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:645:5
  18:        0x101ab3f75 - core::panicking::panic_fmt::hff768cef35397791
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/panicking.rs:72:14
  19:        0x101ab4535 - core::result::unwrap_failed::h951d84d71b0bada2
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/result.rs:1649:5
  20:        0x100e86f0f - core::result::Result<T,E>::expect::h46e49f62a7f5b691
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/result.rs:1030:23
+ 21:        0x100e39983 - nu_plugin_explore::event::EventHandler::new::{{closure}}::h6a786ba814d713f3
+                              at /Users/texas/Developer/git/nu_plugin_explore/src/event.rs:46:24
  22:        0x100e6d68d - std::sys_common::backtrace::__rust_begin_short_backtrace::h0d557fbf2c6545a9
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/sys_common/backtrace.rs:155:18
  23:        0x100e4f670 - std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}}::h49806568e55dc3ef
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/thread/mod.rs:529:17
  24:        0x100e39260 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::ha7914519392245f9
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/panic/unwind_safe.rs:272:9
  25:        0x100e3dee0 - std::panicking::try::do_call::h77e6e80f923ba765
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:552:40
  26:        0x100e3df7d - ___rust_try
  27:        0x100e3de59 - std::panicking::try::hb72a1d854f6956b8
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:516:19
  28:        0x100e4f4ad - std::panic::catch_unwind::h35d42a1f268a9228
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panic.rs:142:14
  29:        0x100e4f4ad - std::thread::Builder::spawn_unchecked_::{{closure}}::hd42e13ba971d3218
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/thread/mod.rs:528:30
  30:        0x100e74451 - core::ops::function::FnOnce::call_once{{vtable.shim}}::h6b49c774539034b2
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/ops/function.rs:250:5
  31:        0x101a712e9 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hef77fdfabbdc0490
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/alloc/src/boxed.rs:2015:9
  32:        0x101a712e9 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hd4d34ecf6438f9ac
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/alloc/src/boxed.rs:2015:9
  33:        0x101a712e9 - std::sys::unix::thread::Thread::new::thread_start::hcdd70219a480b010
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/sys/unix/thread.rs:108:17
  34:     0x7ff81213918b - __pthread_start
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants