cantino / mcfly

Fly through your shell history. Great Scott!
MIT License
6.85k stars 178 forks source link

replace termion with crossterm and make colors configurable #156

Closed dmfay closed 8 months ago

dmfay commented 3 years ago

This started because I wanted to customize colors, and turned into something of a rabbit hole. To summarize:

Outside the terminal code, mcfly now reads colors and other settings from ~/.mcfly/mcfly.toml, defaulting to the original styling and config if the file doesn't exist. Environment variables are still supported and there's a self-describing sample config file. I don't have a Windows machine to test compatibility, so there are likely as not more obstacles, but it's a big step closer.

~I did remove MCFLY_LIGHT entirely, so this conflicts with #151 (sorry!). If we want multiple colorschemes, figment's switchable profiles may be useful.~

It also conflicts with #149, but that I can rebase.

cantino commented 3 years ago

Thanks @dmfay for working on this! Since some users use MCFLY_LIGHT, how easy do you think it would be to add it for backwards compatability?

Also, please note that my wife and I just had our first child this week and so I will be slow to reply for a while...

dmfay commented 3 years ago

Congratulations to both of you!

Detecting MCFLY_LIGHT and supplying alternate default colors turned out to be trivial, and would clear the way for #151 too -- updated.

cantino commented 3 years ago

Nice!

dmfay commented 3 years ago

Here's the rebase, for whenever's convenient! This version also prints a full-width cursor, but enough else changed over time in interface.rs that squashing was the better part of valor.

cantino commented 3 years ago

Hey @dmfay, are you up for another rebase? I think the only change is moving ctrl-d to delete a character instead of exit from the interface.

I'm getting this error when I try to build this PR:

error[E0658]: the `#[track_caller]` attribute is an experimental feature
  --> /Users/andrew/.cargo/registry/src/github.com-1ecc6299db9ec823/figment-0.10.5/src/providers/serialized.rs:75:5
   |
75 |     #[track_caller]
   |     ^^^^^^^^^^^^^^^
   |
   = note: see issue #47809 <https://github.com/rust-lang/rust/issues/47809> for more information

error[E0658]: the `#[track_caller]` attribute is an experimental feature
  --> /Users/andrew/.cargo/registry/src/github.com-1ecc6299db9ec823/figment-0.10.5/src/providers/serialized.rs:91:5
   |
91 |     #[track_caller]
   |     ^^^^^^^^^^^^^^^
   |
   = note: see issue #47809 <https://github.com/rust-lang/rust/issues/47809> for more information

Do we have to use experimental features now?

dmfay commented 3 years ago

Updated! As for experimental features, you might need to update Rust? I'm not seeing that issue with 1.53 (and track_caller has made it to stable).

cantino commented 3 years ago

I updated rust and it builds successfully! However, now I'm getting:

thread 'main' panicked at 'McFly error: failed to read input IoError(Custom { kind: Other, error: "Failed to initialize input reader" })', src/interface.rs:340:43

When I try to launch mcfly.

dmfay commented 3 years ago

I can replicate that with osx + zsh + ctrl-r -- in linux it's fine, in bash it's fine, running mcfly search works. Nothing jumps out at me in the zsh scripting though, and the full backtrace I cleaned up doesn't offer any obvious leads either.

thread 'main' panicked at 'McFly error: failed to read input IoError(Custom { kind: Other, error: "Failed to initialize input reader" })', src/interface.rs:340:43 ``` stack backtrace: 0: 0x10d0ce754 - std::backtrace_rs::backtrace::libunwind::trace::h67b1783e93f517c7 at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b/library/std/src/../../backtrace/src/backtrace/libunwind.rs:90:5 1: 0x10d0ce754 - std::backtrace_rs::backtrace::trace_unsynchronized::h6642b95f229b3f12 at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5 2: 0x10d0ce754 - std::sys_common::backtrace::_print_fmt::h0a233062426578e9 at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b/library/std/src/sys_common/backtrace.rs:67:5 3: 0x10d0ce754 - ::fmt::h5b5b7de1c79b4b45 at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b/library/std/src/sys_common/backtrace.rs:46:22 4: 0x10d0f04ce - core::fmt::write::h65ec8c8a6aa7b549 at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b/library/core/src/fmt/mod.rs:1094:17 5: 0x10d0cb1da - std::io::Write::write_fmt::hc52e560ab9e57db4 at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b/library/std/src/io/mod.rs:1584:153c2-1590682 6: 0x10d0d058f - std::sys_common::backtrace::_print::h27e4664250aa8eaf at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b/library/std/src/sys_common/backtrace.rs:49:5 7: 0x10d0d058f - std::sys_common::backtrace::print::hb149f667a3c579ca at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b/library/std/src/sys_common/backtrace.rs:36:9 8: 0x10d0d058f - std::panicking::default_hook::{{closure}}::h0974624c30a6e2b5 at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b/library/std/src/panicking.rs:208:50 9: 0x10d0d0099 - std::panicking::default_hook::hda3cfa32e0773aac at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b/library/std/src/panicking.rs:225:9 10: 0x10d0d0d55 - std::panicking::rust_panic_with_hook::h1cdaa4b48d8ea4a1 at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b/library/std/src/panicking.rs:591:17 11: 0x10d0d0865 - std::panicking::begin_panic_handler::{{closure}}::h51157b4dbc4c5d91 at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b/library/std/src/panicking.rs:497:13 12: 0x10d0cebe8 - std::sys_common::backtrace::__rust_end_short_backtrace::h8f7fee8b4c5a0c05 at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b/library/std/src/sys_common/backtrace.rs:141:18 13: 0x10d0d07ca - rust_begin_unwind at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b/library/std/src/panicking.rs:493:5 14: 0x10d0d077b - std::panicking::begin_panic_fmt::h2d14b6e3309decb9 at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b/library/std/src/panicking.rs:435:5 15: 0x10cb1e3fd - mcfly::interface::Interface::select::{{closure}}::h90d8e7250ab1ab3c at /Users/dian/work/mcfly/src/interface.rs:340:43 16: 0x10ca507af - core::result::Result::unwrap_or_else::h9fb4708dbefaa746 at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b/library/core/src/result.rs:821:23 17: 0x10cb1dd3d - mcfly::interface::Interface::select::h42cf7b2130881907 at /Users/dian/work/mcfly/src/interface.rs:340:17 18: 0x10cb18c03 - mcfly::interface::Interface::display::h5541174453fd958a at /Users/dian/work/mcfly/src/interface.rs:111:9 19: 0x10ca0d907 - mcfly::handle_search::h408c96b2c1212afb at /Users/dian/work/mcfly/src/main.rs:46:18 20: 0x10ca0e325 - mcfly::main::h8d16aec9d2e01a04 at /Users/dian/work/mcfly/src/main.rs:107:13 21: 0x10ca0e55e - core::ops::function::FnOnce::call_once::h0f631598e64ddf41 at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b/library/core/src/ops/function.rs:227:5 22: 0x10ca0edd1 - std::sys_common::backtrace::__rust_begin_short_backtrace::hec7b2049f2174e7a at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b/library/std/src/sys_common/backtrace.rs:125:18 23: 0x10ca0ebc4 - std::rt::lang_start::{{closure}}::h44dd4ec2cae74050 at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b/library/std/src/rt.rs:49:18 24: 0x10d0d10c1 - core::ops::function::impls:: for &F>::call_once::hc43f50f6c262e503 at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b/library/core/src/ops/function.rs:259:13 25: 0x10d0d10c1 - std::panicking::try::do_call::ha2a21b2645967438 at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b/library/std/src/panicking.rs:379:40 26: 0x10d0d10c1 - std::panicking::try::h1ca18252e93fb057 at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b/library/std/src/panicking.rs:343:19 27: 0x10d0d10c1 - std::panic::catch_unwind::h64441306bfaea78f at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b/library/std/src/panic.rs:431:14 28: 0x10d0d10c1 - std::rt::lang_start_internal::h37583e1fa93097c4 at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b/library/std/src/rt.rs:34:21 29: 0x10ca0eb9e - std::rt::lang_start::h94acaba22ce781a2 at /rustc/53cb7b09b00cbea8754ffb78e7e3cb521cb8af4b/library/std/src/rt.rs:48:5 30: 0x10ca0e3b6 - _main ```

https://github.com/crossterm-rs/crossterm/issues/500 may be relevant -- here's another crossterm-using project with an osx-only problem. I disabled the terminfo changes and tty pipe in mcfly-history-widget and that didn't avert a panic, though.

bahlo commented 3 years ago

Hey, I just want to say I'd love to have configurable colors, this looks broken in Unikitty Light as well. 👍 I tried your branch @dmfay and I get the same results.

MitMaro commented 1 year ago

👋🏼 Another Crossterm user here, that just happened to have one of my projects linked in a comment. Crossterm just pushed a fix for https://github.com/crossterm-rs/crossterm/issues/500, so it's possible that the problem blocking this PR has been addressed.

I haven't tried the fix in my project yet, but figured a ping here wouldn't hurt.