A new kind of terminal

Related tags

Applications notty
Overview

notty - not a typewriter

Join the chat at https://gitter.im/withoutboats/notty

notty is a virtual terminal like xterm, gnome-vte, sh, or rxvt. Unlike these programs, notty is not intended to emulate a DEC VT-series physical video terminal, or any other physical device. Instead, notty is an experimental project to bring new features to the command-line which would not have been possible for the physical terminals other terminals emulate.

Current command-line tools have stagnated (if you prefer, 'stabilized') around the ECMA-48/ISO 6429/ANSI X3.64 escape code protocol, which is defined on the basis of the capabilities of 1980s video terminal devices. Essentially all terminals in use today are virtual terminals being run on devices which are significantly more capable than these ancient machines, and yet the terminal environment has not kept pace with these developments. The last revision of the ANSI escape code protocol was released in 1991.

notty will attempt to remain true to the text-oriented, command-line user interface of the terminal while extending it to include new and more powerful interface features, such as:

  • Full support for rich text formatting, including 24-bits of color.
  • Full and correct support for all of Unicode.
  • Lossless keyboard input.
  • Inline media content, including raster graphics and structured data.
  • Dropdown menus, tooltips, and other features which do not strictly reside in the character grid.
  • Local echo and retained off-screen character grid state to reduce the need for the tty to transmit data back to the terminal.
  • Subdividing the character grid to enable more complex interface layouts without repeatedly reimplementing that logic in the controlling process.
  • And more! If you know any features you wish the terminal had, please open an issue and let's talk about this.

Many of these features are not yet implemented.

To achieve these ends, notty will implement a new and more consistent escape protocol than ANSI escape codes. This protocol will be comparatively easy to extend with new features as the project grows. Once a feature set has been stabilized, I will write a framework for creating terminal applications that use notty's features, written against this protocol (allowing other terminals to implement the protocol and support these features as well). This framework will include a polyfill for approximating these features as well as possible in terminals that don't implement notty codes.

This repository is a library which defines an engine for translating both ANSI and notty escape codes into state changes in the terminal's abstract state. This library does not directly implement any means of drawing the state to the screen and is agnostic about the interface it uses to communicate with the controlling process, so hopefully it will be reusable for writing terminals in different graphical environments, for writing screen/tmux-like server-side multi-terminal managers, and for writing SSH clients in non-UNIX environments. Because it implements (most) ANSI escape codes, this terminal is backwards compatible with existing command line tools.

A subdirectory, named scaffolding, contains a minimal graphical terminal using GTK/pango/cairo, intended for testing notty's features interactively. This terminal is buggy and feature poor and not intended for general use.

A major difference between notty and other projects in the same space is that this is just a virtual terminal, and is fully backwards compatible with the existing shell/terminal setup. It does not implement any features of a shell, and it is not attempting to totally supplant any existing paradigms. Graphical terminals based on this library should be useable as drop-in replacements for other terminals, but with new features that can be used to implement better interfaces for command line programs such as shells, text editors, and other utilities.

That said, terminals as they exist today are a pile of ugly kludges. From the kernel's tty/pty subsystem, to the termios ioctl calls which control it, to the terminfo and termcap databases, to the ANSI escape codes they describe, to the ancient codebases of the terminal emulators themselves, this is a universe of arcane and poorly documented old growth code, much of which is no longer actively useful to people in the 21st century - your system ships with a terminfo db page for more than 2500 different terminal devices, nearly all of them extinct, and every new console you open has a baud rate set in the kernel, even though it exchanges data in memory. More advanced features of notty will certainly requiring sidestepping this system to a certain extent: the current plan is to implement a command to "switch" notty to an extended mode; in such a mode, only notty escape codes would be used and the tty's flags would all be unset except for CREAD and ISIG (and maybe not even ISIG).

This implementation is written in Rust, an exciting new systems language from Mozilla.

Much thanks to Thomas E. Dickey, the maintainer of xterm, whose website hosts excellent documentation regarding xterm's behavior, and to Paul Flo Williams, who maintains vt100.net, which hosts manuals for the actual DEC VT-series terminals. Credit also to Gary Bernhardt, whose talk A Whole New World influenced me to pursue this project seriously.

License

notty is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Conduct

The notty project is committed to upholding the Rust Code of Conduct. Please see CONDUCT.md for more information.

Comments
  • Subdividable screens.

    Subdividable screens.

    Introduce a layer of indirection between Terminal and CharGrid, using the Screen type, which allows a Terminal to contain multiple CharGrids in different sections of the visible screen.

    Prior to this commit, a single Terminal contained a stack of CharGrids, which each filled the entire size of the Terminal window.

    Now, a single Terminal contains a single Screen, which is divided into ScreenSections. Each ScreenSection is a rectangular section of the screen. They are formed by splitting an existing section into two along a horizontal or vertical axis. This means that the relationship between sections that exist is always a binary tree. Each ScreenSection has an unsigned 64-bit tag. One section is identified as the 'active section' - commands that apply to the CharGrid are applied to the grid contained in this section.

    Each section contains a non-empty stack of Panels. A Panel can take one of two forms: either it contains a CharGrid, or it is split into two parts, each of which contains a ScreenSection. As a result, there is a mutually recursive relationship between the definition of ScreenSection and Panel, which allows for considerable flexibility in adjusting the layout screen, while still maintaining a certain level of restraint.

    This commit and its associated commit to notty-encoding add or modify several commands to the notty protocol:

    • PUSH BUFFER is now PUSH PANEL, and takes as an argument the tag of the screen section being pushed to. If no argument is passed, a panel is pushed to the active section. The panel that is pushed always contains a single character grid. It also takes a boolean argument, which determines whether or not the grid retains offscreen data as it scrolls.
    • POP BUFFER is now POP PANEL, and also takes as an argument the tag of screen section to pop from. If no argument is passed, the top panel of the active section is popped. A stack with 1 member cannot be popped from.
    • SPLIT PANEL describes splitting a panel into two. It takes arguments defining the axis and position of the split, which panel the contents should be saved to, how resizing of child sections should be handled, and whether or not the grid in the new panel should retain offscreen data as it scrolls. Panels which are already split can be split again; the existing split sections are resized into the identified saved sections.
    • UNSPLIT PANEL describes removing the split from a panel. It takes an argument identifying which of the two sections in this panel should be saved. The stack of the saved section will be pushed to the top of the section this panel is on top of; the stack of the unsaved section will be destroyed.
    • ADJUST PANEL SPLIT allows an existing split panel's split to be moved or adjusted. It takes arguments defining the axis and position of the split, and how resizing of the child sections should be handled. It performs no action it the section's top is a unsplit panel.
    • ROTATE SECTION DOWN rotates down the stack, putting the top of the stack on the bottom.
    • ROTATE SECTION UP rotates up the stack, putting the bottom of the stack on the top.
    • SWITCH ACTIVE SECTION switches which section is active. It will only perform a switch if the top panel of the target section is a single character grid.
    opened by withoutboats 21
  • (ISSUE-21) Work on distribution of notty configuration data throughout library.

    (ISSUE-21) Work on distribution of notty configuration data throughout library.

    @withoutboats here's what I've got so far.

    Currently I am working to remove all usage of Config::default() as the source of configuration other than in scaffolding and the tests in various modules since I'm not sure how else we would make use of configuration with the approach I've taken so far of replacing default() methods with new(config: Config) for all structs that need to be passed configuration data.

    The problem I am running into currently is what appears to be overgeneralization of the Grid class: https://github.com/withoutboats/notty/blob/master/src/terminal/char_grid/grid.rs#L24

    Looking through the rest of the source code I only see two specific types of Grid: Grid<CharCell> and Grid<i32>. The reason I think of this as problematic is because there are a number of T::default() calls used to construct Grid elements--which sort of enforces the need for CharCell structs to call Config::default() in CharCell::default() to obtain configuration data, which makes it difficult for me to imagine a way to pass the Terminal-owned Config down to the CharCell. Here are a couple possiblities I am considering:

    • Create a Configurable trait that requires a configure(&self, config: Config) method, add that to the Grid type constraints; then use this to configure the CharCell created by T::default().
    • Remove generics from Grid entirely since the only specific type used in this library is Grid. I think this is my preferred approach, unless you anticipate new specific types of Grid in the near future.
    opened by waynr 16
  • #30 Fix Ctrl-D termination behavior.

    #30 Fix Ctrl-D termination behavior.

    Specifically set up a GTK main timeout function to periodically check an Arc value that indicates whether a read on the pty in the listening thread fails--this failure is taken to mean that the process on the other side of the pseudoterminal has exited.

    Also improve error handling in CommandApplicator. Also decrease timeout for CommandApplicatior::apply() calls to improve responsiveness to keystrokes (notice difference between 125 and 25 milliseconds when holding down a character in scaffolding)

    opened by waynr 9
  • How do I build and run notty?

    How do I build and run notty?

    I cloned the repo and ran cargo build, but I see:

    ➜  notty git:(master) cargo build
        Updating registry `https://github.com/rust-lang/crates.io-index`
        Updating git repository `https://github.com/withoutboats/notty-encoding`
     Downloading unicode-width v0.1.3
     Downloading mime v0.1.3
     Downloading base64 v0.1.1
     Downloading serde v0.6.15
     Downloading libc v0.2.7
     Downloading log v0.3.5
     Downloading num v0.1.31
       Compiling unicode-width v0.1.3
       Compiling libc v0.2.7
       Compiling base64 v0.1.1
       Compiling num v0.1.31
       Compiling notty-encoding v0.1.0 (https://github.com/withoutboats/notty-encoding#671ce83f)
       Compiling log v0.3.5
    /home/patrick/.cargo/git/checkouts/notty-encoding-f90d2d7580660013/master/src/args/movement.rs:16:9: 16:44 error: expected type, found `/// Direction of the tab character.`
    /home/patrick/.cargo/git/checkouts/notty-encoding-f90d2d7580660013/master/src/args/movement.rs:16         /// Direction of the tab character.
                                                                                                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Build failed, waiting for other jobs to finish...
    Could not compile `notty-encoding`.
    
    To learn more, run the command again with --verbose.
    

    Is this a regression introduced by https://github.com/withoutboats/notty-encoding/commit/91d7e8c0b31ce3b23d96c3d96ddc0b791263e742, or is there something wrong with my environment? I've never used Rust before so I may be missing something obvious.

    opened by pscollins 7
  • Will `cat /dev/urandom` corrupt my display?

    Will `cat /dev/urandom` corrupt my display?

    Hi, one thing that was always bothering me about unix terminals is that cat /dev/urandom and similiar could corrupt the display.

    It seems to me that "untyped stream of bytes" was never the right abstraction for communication between processes and interactive terminals.

    I have not give it too much thought yet, and I'm looking for opinions and resources, but it seems to me that if every stream of bytes was typed (with some default), like eg. prefixed with mime type (defaulting to binary data stream) or simper-http-like protocol, then both communication between processes and between process and terminal could be much robust.

    Eg. legacy process like cat, streaming bunch of bytes would output bunch of binary adta and notty would know that all data sent contains no escape codes, displaying eg. hex dump of it, and responding with no "type header" on cat's stdin.

    New-world interactive processes, when outputting anything would start with a \0notty/v1\0 header, or something like that, to which terminal would respond with \0notty/v1\0 on stdin, confirming that process is attached to tthe terminal.

    The scheme could be completely different.

    opened by dpc 5
  • Store Config info on the Terminal struct

    Store Config info on the Terminal struct

    As of writing this issue, config information is stored on a global constant called CONFIG, which is imported into several scopes, both in notty and in notty-cairo. Because configuration info is stored on a constant, the only way to reconfigure notty is to recompile it. This is not a great user experience.

    There are several steps that need to be taken to make notty configs convenient to change, this issue is only the first step. Here is a broad roadmap of the whole process to making notty configured dynamically:

    1. The Terminal holds a Config struct, from which all the configurable values for that terminal are accessed. At first, all terminals can be instantiated with the CONFIG constant for this. This is what this issue is about.
    2. This Config struct is made into an argument, and the config info in src/cfg.rs is moved into the scaffolding terminal (though the Config type definition will stay inside of notty).
    3. Add a way for scaffolding to create a Config struct at runtime from some source (probably a TOML file). This way, users can configure the scaffolding terminal without recompiling notty.

    This is a great task for someone to pick up to learn the notty code base better (and probably also Rust). It doesn't interact much with the core logic of notty, but it does require you to explore how it is structured. I am glad to provide guidance and answer any questions about this task.

    To sort of restate the issue, once this is done, cfg::CONFIG should be invoked in only one location, stored somewhere on the Terminal struct, and everywhere it is invoked now should instead invoke the value stored on the Terminal.

    Please drop a note here if you start to work on this and I will assign the issue to you.

    enhancement 
    opened by withoutboats 5
  • Fail slightly more gracefully on Ctrl-D

    Fail slightly more gracefully on Ctrl-D

    This is intended as a temporary fix to the "can't quit without Ctrl-C in the original terminal" problem. A more complete solution probably catches EOF in the parser and starts the shutdown there, but this works apart from the misleading error message.

    opened by pscollins 4
  • Ctrl-D causes a panic

    Ctrl-D causes a panic

    Trying to quit the shell with Ctrl-D out of habit, I got the following stack trace:

    ➜  scaffolding git:(master) RUST_BACKTRACE=1 cargo run
         Running `target/debug/scaffolding-terminal`
    thread '<unnamed>' panicked at 'called `Result::unwrap()` on an `Err` value: Error { repr: Os { code: 5, message: "Input/output error" } }', ../src/libcore/result.rs:746
    stack backtrace:
       1:     0x7ffb5339f240 - sys::backtrace::tracing::imp::write::h7af3c3cfd3e65a783bv
       2:     0x7ffb533a1b2b - panicking::default_handler::_$u7b$$u7b$closure$u7d$$u7d$::closure.44497
       3:     0x7ffb533a1798 - panicking::default_handler::h75ebcc0c8bcd1085rRz
       4:     0x7ffb53397eac - sys_common::unwind::begin_unwind_inner::hcec45e84262f1855m0t
       5:     0x7ffb533982f8 - sys_common::unwind::begin_unwind_fmt::h62c174e37e54c321sZt
       6:     0x7ffb5339e6b1 - rust_begin_unwind
       7:     0x7ffb533d0e7f - panicking::panic_fmt::h5f920bbc722cd548lcM
       8:     0x7ffb532e106b - result::unwrap_failed::h14713097509445665626
                            at ../src/libcore/macros.rs:29
       9:     0x7ffb532ee0cb - result::Result<T, E>::unwrap::h4578224278132733853
                            at ../src/libcore/result.rs:687
      10:     0x7ffb532e288a - main::_$u7b$$u7b$closure$u7d$$u7d$::closure.10320
                            at src/main.rs:67
      11:     0x7ffb532e21c0 - std::thread::Builder::spawn::_$u7b$$u7b$closure$u7d$$u7d$::_$u7b$$u7b$closure$u7d$$u7d$::closure.10309
                            at ../src/libstd/thread/mod.rs:277
      12:     0x7ffb532e2169 - sys_common::unwind::try::try_fn::h14296686403988533152
                            at ../src/libstd/sys/common/unwind/mod.rs:127
      13:     0x7ffb5339e63b - __rust_try
      14:     0x7ffb5339c20d - sys_common::unwind::inner_try::h27915955daa5bb0coXt
      15:     0x7ffb532e20ce - sys_common::unwind::try::h12233384044057444796
                            at ../src/libstd/sys/common/unwind/mod.rs:123
      16:     0x7ffb532e1f40 - std::thread::Builder::spawn::_$u7b$$u7b$closure$u7d$$u7d$::closure.10284
                            at ../src/libstd/thread/mod.rs:277
      17:     0x7ffb532e2c0c - boxed::F.FnBox<A>::call_box::h7394299706424739120
                            at ../src/liballoc/boxed.rs:541
      18:     0x7ffb533a06a9 - sys::thread::Thread::new::thread_start::h47cad50136a0a353LOy
      19:     0x7ffb50770181 - start_thread
      20:     0x7ffb50f9247c - __clone
      21:                0x0 - <unknown>
    

    It looks like the issue is in scaffolding/src/main.rs at:

        thread::spawn(move || {
            let output = Output::new(BufReader::new(tty_r));
            for cmd in output {
                tx_out.send(cmd.unwrap()).unwrap();
            }
        });
    

    Because I suppose in src/output/mod.rs, Output::next is returning None.

    opened by pscollins 4
  • build failure

    build failure

    running 2 tests test cfg::toml::tests::test_default ... FAILED test cfg::toml::tests::test_update_from_file ... FAILED

    failures:

    ---- cfg::toml::tests::test_default stdout ---- thread 'cfg::toml::tests::test_default' panicked at 'assertion failed: (left == right) (left: "Monospace 10", right: "Inconsolata 10")', src/cfg/toml.rs:244 note: Run with RUST_BACKTRACE=1 for a backtrace.

    ---- cfg::toml::tests::test_update_from_file stdout ---- thread 'cfg::toml::tests::test_update_from_file' panicked at 'assertion failed: (left == right) (left: "Monospace 10", right: "Inconsolata 10")', src/cfg/toml.rs:244

    failures: cfg::toml::tests::test_default cfg::toml::tests::test_update_from_file

    opened by SolarAquarion 3
  • Figure out how font extents are supposed to work

    Figure out how font extents are supposed to work

    We need to know the dimensions of the visible area of the terminal in terms of characters for a variety of use cases. Currently, we attempt to derive this information from the FontExtents struct of the cairo library, which has several fields.

    However, the information presented by this struct is not the information we actually want, and it results in weird dimensions in several ways - opening vim in the scaffolding terminal is a good demonstration of the issue.

    If someone could figure out how to derive from a cairo canvas or a font the actual dimensions of a character in that font, that would be really helpful. Assuming a monospace font is fine.

    help wanted question 
    opened by withoutboats 3
  • compiling on 32 bit system

    compiling on 32 bit system

    I was able to build and run the demo terminal by changing line 25 in image_renderer.rs from 'as i64' to 'as i32'.

    I know very little about Rust... possible to automatically infer that type?

    opened by timb 3
  • Is this a dead project?

    Is this a dead project?

    I realize this project had very lofty goals from the start, and that it would take a tremendous amount of time and effort. That being said, the latest commit was nine months ago. I'm not trying to complain about this as I realize people have busy lives, but I am wondering if you plan on picking this back up or if it is abandoned.

    opened by Qyriad 6
  • Can't build master branch

    Can't build master branch

    Joyful compiler errors

    error[E0038]: the trait `cmds::EscCode` cannot be made into an object
     --> /home/seunlanlege/.cargo/git/checkouts/notty-encoding-26bc718f9ba2caca/ba5daba/src/client.rs:6:5
      |
    6 |     fn write(&mut self, &EscCode) -> io::Result<()>;
      |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `cmds::EscCode` cannot be made into an object
      |
      = note: the trait cannot contain associated consts like `OPCODE`
    
    error[E0038]: the trait `cmds::EscCode` cannot be made into an object
      --> /home/seunlanlege/.cargo/git/checkouts/notty-encoding-26bc718f9ba2caca/ba5daba/src/client.rs:12:5
       |
    12 |     fn write(&mut self, code: &EscCode) -> io::Result<()> {
       |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `cmds::EscCode` cannot be made into an object
       |
       = note: the trait cannot contain associated consts like `OPCODE`
    
    error: aborting due to 2 previous errors
    
    error: Could not compile `notty-encoding`.
    warning: build failed, waiting for other jobs to finish...
    error: build failed
    

    rustc version rustc 1.22.0-nightly (f1b5225e8 2017-10-01)

    opened by seunlanlege 1
  • Wishlist : Magic Wormhole

    Wishlist : Magic Wormhole

    I have a little idea but don't know how it could be done or if it's even doable or not :

    The magic wormhole is a fifo between multiple terminal. Let's take an example.

    • You open a terminal. You connect to ssh. You then enter a container with "lxc-attach -n foobar".
    • You open another terminal. You start another ssh session on another machine which can't reach the lxc container.
    • You start/enter/trigger the magic wormhole to bind the two terminal to get data from one term to the other. That way you can transfer files or even pipe commands between the two terminals.

    For now you can mimic this with tmux by using buffer copy and all but it's quite complex and not very reliable.

    I discussed a bit of this on alacritty's irc channel and was redirected here. What do you think of this ? Is it out of scope ? technically not feasible ?

    opened by lord-re 1
  • Wishlist: `dialog` support

    Wishlist: `dialog` support

    Some apps like debconf support dialog for drawing various widgets in (traditional) terminals.

    If notty can operate as a drop-in replacement for dialog (or whiptale), then it may in that way find some customers!

    opened by daveloyall 0
  • notty-encoding fails to build on OSX 10.11.6

    notty-encoding fails to build on OSX 10.11.6

    Hi,

    I'm trying to compile notty and have run into an error building the encoding package. Here is the output from my build:

    ➜  notty git:(master) cargo build --verbose
           Fresh uuid v0.3.1
           Fresh base64 v0.1.1
           Fresh num-traits v0.1.37
           Fresh unicode-width v0.1.4
           Fresh log v0.3.7
       Compiling notty-encoding v0.1.0 (https://github.com/withoutboats/notty-encoding#ba5daba3)
           Fresh num-integer v0.1.34
         Running `rustc --crate-name notty_encoding /Users/mgrunder/.cargo/git/checkouts/notty-encoding-26bc718f9ba2caca/ba5daba/src/lib.rs --crate-type lib --emit=dep-info,link -C debuginfo=2 -C metadata=46ffb3a5a218e748 -C extra-filename=-46ffb3a5a218e748 --out-dir /Users/mgrunder/dev/rust-foss-projects/notty/scaffolding/target/debug/deps -L dependency=/Users/mgrunder/dev/rust-foss-projects/notty/scaffolding/target/debug/deps --extern base64=/Users/mgrunder/dev/rust-foss-projects/notty/scaffolding/target/debug/deps/libbase64-21fea01bef6f0feb.rlib --cap-lints allow`
           Fresh num-iter v0.1.33
           Fresh num v0.1.37
           Fresh serde v0.6.15
           Fresh mime v0.1.3
    error[E0038]: the trait `cmds::EscCode` cannot be made into an object
     --> /Users/mgrunder/.cargo/git/checkouts/notty-encoding-26bc718f9ba2caca/ba5daba/src/client.rs:6:5
      |
    6 |     fn write(&mut self, &EscCode) -> io::Result<()>;
      |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `cmds::EscCode` cannot be made into an object
      |
      = note: the trait cannot contain associated consts like `OPCODE`
    
    error[E0038]: the trait `cmds::EscCode` cannot be made into an object
      --> /Users/mgrunder/.cargo/git/checkouts/notty-encoding-26bc718f9ba2caca/ba5daba/src/client.rs:12:5
       |
    12 |     fn write(&mut self, code: &EscCode) -> io::Result<()> {
       |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `cmds::EscCode` cannot be made into an object
       |
       = note: the trait cannot contain associated consts like `OPCODE`
    
    error: aborting due to 2 previous errors
    
    error: Could not compile `notty-encoding`.
    
    Caused by:
      process didn't exit successfully: `rustc --crate-name notty_encoding /Users/mgrunder/.cargo/git/checkouts/notty-encoding-26bc718f9ba2caca/ba5daba/src/lib.rs --crate-type lib --emit=dep-info,link -C debuginfo=2 -C metadata=46ffb3a5a218e748 -C extra-filename=-46ffb3a5a218e748 --out-dir /Users/mgrunder/dev/rust-foss-projects/notty/scaffolding/target/debug/deps -L dependency=/Users/mgrunder/dev/rust-foss-projects/notty/scaffolding/target/debug/deps --extern base64=/Users/mgrunder/dev/rust-foss-projects/notty/scaffolding/target/debug/deps/libbase64-21fea01bef6f0feb.rlib --cap-lints allow` (exit code: 101)
    

    rustc:

    ➜  notty git:(master) rustc --version
    rustc 1.19.0-nightly (06fb4d256 2017-04-30)
    

    OS Information:

    ➜  notty git:(master) system_profiler SPSoftwareDataType
    Software:
    
        System Software Overview:
    
          System Version: OS X 10.11.6 (15G1217)
          Kernel Version: Darwin 15.6.0
          Boot Volume: Macintosh HD
          Boot Mode: Normal
          Computer Name: MG-MBP
          User Name: Michael Grunder (mgrunder)
          Secure Virtual Memory: Enabled
          System Integrity Protection: Disabled
          Time since boot: 2 days 13 minutes
    

    I was able to find a few places on the net mentioning this error but unfortunately I don't know nearly enough about rust to figure out a solution. Hopefully I'm not missing something totally obvious here :smiley:

    Edit: I get the same error in Ubuntu.

    opened by michael-grunder 8
Owner
Saoirse Shipwreckt
In civilizations without boats, dreams dry up, espionage takes the place of adventure, and police take the place of pirates.
Saoirse Shipwreckt
A terminal IRC client

tiny - Yet another terminal IRC client tiny is an IRC client written in Rust. Features Clean UI: consecutive join/part/quit messages are shown in a si

Ömer Sinan Ağacan 812 Dec 20, 2022
A GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust

Wez's Terminal A GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust User facing docs and guide a

Wez Furlong 6.7k Jan 2, 2023
A (self hosted) pastebin for easily sharing text right from the terminal

termpad termpad allows you to easily host a pastebin server for saving and viewing text right from the terminal, or the browser. Client Usage Assuming

Spyros Roum 28 Aug 29, 2022
Inkwell - It's a New Kind of Wrapper for Exposing LLVM (Safely)

Inkwell(s) It's a New Kind of Wrapper for Exposing LLVM (Safely) Inkwell aims to help you pen your own programming languages by safely wrapping llvm-s

Daniel Kolsoi 1.5k Dec 31, 2022
Simple library to host lv2 plugins. Is not meant to support any kind of GUI.

lv2-host-minimal Simple library to host lv2 plugins. Is not meant to support any kind of GUI. Host fx plugins (audio in, audio out) Set parameters Hos

Cody Bloemhard 11 Aug 31, 2022
Make a PDF file by writing kind of like HTML and CSS.

markup-pdf-rs The Rust library for making a PDF files by writing kind of like HTML and CSS. Inspired by Satori and React-pdf. This library makes a PDF

null 9 Jan 10, 2023
Api testing tool made with rust to use for api developement (Kind of Tui)

Api testing tool made with rust to use for api developement (Kind of Tui) This Rust project provides a simple yet powerful tool for making HTTP reques

Kythonlk 3 Feb 14, 2024
Costless typed identifiers backed by UUID, with kind readable in serialized versions

Why kind ? With kind, you use typed identifiers in Rust, with no overhead over Uuid have the type be human readable and obvious in JSON and any export

Wingback 67 Mar 24, 2024
CLI utility to move (or rename) your files to a new location and redirect all of its symbolic links, to the new path

Move Links CLI utility to move (or rename) your files to a new location and redirect all of its symbolic links, to the new path (or name). Usage execu

Ben Mefteh 18 May 22, 2022
Shell Of A New Machine: Quickly configure new environments

Shell Of A New Machine soanm is a dead-simple tool for easily configuring new UNIX machines, with almost zero prerequisites on the target machine. All

Ben Weinstein-Raun 41 Dec 22, 2022
🤖 brwrs is a new protocol running over TCP/IP that is intended to be a suitable candidate for terminal-only servers

brwrs is a new protocol running over TCP/IP that is intended to be a suitable candidate for terminal-only servers (plain text data). That is, although it can be accessed from a browser, brwrs will not correctly interpret the browser's GET request.

daCoUSB 3 Jul 30, 2021
Terminal UI for erhanbaris/smartcalc, a new way to do calculations on-the-fly

smartcalc-tui Terminal UI for erhanbaris/smartcalc, a new way to do calculations on-the-fly. From the README: Do your calculation on text based querie

Aaron Ross 12 Sep 14, 2022
🚩 Show sensitive command summary when open a new terminal

?? Show sensitive command summary when open a new terminal ?? Clear sensitive commands from shell history ?? Stash your history command before present

Rusty Ferris Club 161 Dec 26, 2022
Ask the Terminal Anything (ATA): ChatGPT in the terminal

ata: Ask the Terminal Anything ChatGPT in the terminal TIP: Run a terminal with this tool in your background and show/hide it with a keypress. This ca

Rik Huijzer 147 Mar 8, 2023
A terminal ASCII media player. View images, gifs, videos, webcam, YouTube, etc.. directly in the terminal as ASCII art.

Terminal Media Player View images, videos (files or YouTube links), webcam, etc directly in the terminal as ASCII. All images you see below are just m

Max Curzi 36 May 8, 2023
ask.sh: AI terminal assistant that can read and write your terminal directly!

ask.sh: AI terminal assistant that read from & write to your terminal ask.sh is an AI terminal assistant based on OpenAI APIs such as GPT-3.5/4! What'

hmirin 5 Jun 20, 2023
A simple and efficient terminal UI implementation with ratatui.rs for getting quick insights from csv files right on the terminal

CSV-GREP csv-grep is an intuitive TUI application writting with ratatui.rs for reading, viewing and quickly analysing csv files right on the terminal.

Anthony Ezeabasili 16 Mar 10, 2024
The new, performant, and simplified version of Holochain on Rust (sometimes called Holochain RSM for Refactored State Model)

Holochain License: This repository contains the core Holochain libraries and binaries. This is the most recent and well maintained version of Holochai

Holochain 741 Jan 5, 2023
New commands for Dockerfile

Dockerfile+ This project provides Dockerfile syntax extensions that have been rejected by the moby project or haven't been addressed in a long time. C

Ximo Guanter 171 Dec 12, 2022
Aero is a new modern, unix based operating system. It is being developed for educational purposes.

Areo Aero is a new modern, unix based operating system written in Rust and is being developed for educational purposes. Aero follows the monolithic ke

Anhad Singh 623 Dec 24, 2022