Giter Club home page Giter Club logo

cancer's Introduction

cancer's People

Contributors

bwackninja avatar meh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cancer's Issues

Add font ligature support

Supporting ligatures is not going to be easy considering how the rendering is currently done.

On the bright side Cairo and Pango easily support rendering text with ligatures, but they require the whole text to do the job (obviously).

As it currently stands the Renderer has a Cache with an LRU for glyph caching, what this does is using the value of the cell to store the font and compute the shape, which is then sent to Cairo for rendering, this means that each cell is rendered as a single grapheme.

To support ligatures instead of using PangoGlyphString it should use PangoGlyphItem, which is just a pair of PangoItem and PangoGlyphString, looking through the Pango documentation I haven't found a way to "slice" a PangoGlyphString, so I presume a PangoGlyphItem must be used for that.

To keep performance good, the cache should be computed based on neighboring cells, where a cell is a neighbor iff:

  • it's on the same row
  • it has the same style
  • is not an empty cell

This does completely break the nice property of the LRU cache just storing the grapheme, which meant it could be reused for other cells containing the same grapheme.

Regardless, I think this could be done with an option without making the code too ugly, so people who do not care about ligatures (me) can opt-out and gain some performance.

dumb question

where's the default config file? I see a -c flag.

Reuse rows instead of dropping them.

As profiling shows in line insertion heavy programs dropping the rows has a high cost, consider some sort of object pool.

    86.02%     0.00%  cancer   cancer                         [.] cancer::main::hfb5b54f860ad21c8
            |
            ---cancer::main::hfb5b54f860ad21c8
               |          
                --86.00%--cancer::open::h8e10f5e404f4e57b
                          |          
                           --85.18%--cancer::terminal::terminal::Terminal::handle::h6d28c09361c201a6
                                     |          
                                     |--26.73%--_$LT$collections..vec_deque..VecDeque$LT$A$GT$$u20$as$u20$core..iter..traits..Extend$LT$A$GT$$GT$::extend::h06599bc5e44e1eff
                                     |          |          
                                     |           --8.00%--drop::hc4b7410970c91147
                                     |          
                                     |--20.80%--_$LT$collections..vec_deque..VecDeque$LT$A$GT$$u20$as$u20$core..iter..traits..Extend$LT$A$GT$$GT$::extend::h485c7dcc20856784
                                     |          
                                     |--14.56%--control_code::control::control::h7590ffed932e9ebe
                                     |          |          
                                     |           --0.69%--drop::hea8bcbf69f16ea1b
                                     |          
                                     |--14.46%--drop::hb933b22d7461b6da
                                     |          |          
                                     |           --14.11%--drop::hc4b7410970c91147
                                     |          
                                     |--0.76%--__memcmp_sse4_1
                                     |          
                                      --0.62%--cancer::terminal::cursor::Cursor::travel::h4c6028896ffe4736

Scroll regions do not properly bound line feeds.

The end result is Linux menuconfig scrolling is broken, and since there's no redraw support it just stays broken.

Scrolling probably needs some refactoring to allow this, it's always been disgusting.

Refactor platform handling

Platform stuff should be pickable at runtime and compile time with features.

The choice for window handling and surface creation and rendering and window handling should be separate, for example it should be able to have X11/GL as window/renderer, or X11/X11 for both, on macOS it should allow Cocoa/Quartz and Cocoa/GL.

Windows support

Add support for Windows.

This would imply a new thingy to handle the tty, I assume, and wrapping the Cairo Win32 bullshit, but that shouldn't be too hard.

I'm a little concerned about the current event driven design where the handling is actually in main, and the window is a separate thing in a different thread, I'm not sure how that works out, I might have to change that too, but shouldn't be too hard.

Add sixel support

I want this, everybody wants this, thanks.

Honestly I think this is gonna fuck everything up as far as the renderer is concerned, but alas.

'Self' does not have a constant size known at compile-time

[0] LoganDark @ base.local : /Users/LoganDark $ /Users/LoganDark/.cargo/bin/cargo install --force --git https://github.com/meh/cancer
    Updating git repository `https://github.com/meh/cancer`
  Installing cancer v0.1.0 (https://github.com/meh/cancer#e8e10240)
    Updating registry `https://github.com/rust-lang/crates.io-index`
 Downloading unicode-width v0.1.4
 Downloading app_dirs v1.1.1
 Downloading fnv v1.0.5
 Downloading tendril v0.3.1
 Downloading lru-cache v0.1.1
 Downloading bit-vec v0.4.4
 Downloading log v0.3.8
 Downloading shlex v0.1.1
 Downloading control-code v0.7.1
 Downloading clap v2.26.2
 Downloading bitflags v0.9.1
 Downloading unicode-segmentation v1.2.0
 Downloading libc v0.2.31
 Downloading itertools v0.6.3
 Downloading schedule_recv v0.1.0
 Downloading env_logger v0.4.3
 Downloading picto v0.4.3
 Downloading regex v0.2.2
 Downloading toml v0.4.5
 Downloading utf-8 v0.7.1
 Downloading futf v0.1.3
 Downloading mac v0.1.1
 Downloading matches v0.1.6
 Downloading debug_unreachable v0.1.1
 Downloading unreachable v0.1.1
 Downloading void v1.0.2
 Downloading linked-hash-map v0.4.2
 Downloading nom v3.2.0
 Downloading smallvec v0.4.3
 Downloading memchr v1.0.1
 Downloading atty v0.2.2
 Downloading strsim v0.6.0
 Downloading term_size v0.3.0
 Downloading ansi_term v0.9.0
 Downloading textwrap v0.8.0
 Downloading vec_map v0.8.0
 Downloading either v1.1.0
 Downloading lazy_static v0.2.8
 Downloading utf8-ranges v1.0.0
 Downloading thread_local v0.3.4
 Downloading regex-syntax v0.4.1
 Downloading aho-corasick v0.6.3
 Downloading unreachable v1.0.0
 Downloading palette v0.2.1
 Downloading byteorder v1.1.0
 Downloading num v0.1.40
 Downloading phf v0.7.21
 Downloading approx v0.1.1
 Downloading phf_shared v0.7.21
 Downloading siphasher v0.2.2
 Downloading num-complex v0.1.40
 Downloading num-integer v0.1.35
 Downloading num-traits v0.1.40
 Downloading num-rational v0.1.39
 Downloading num-iter v0.1.34
 Downloading num-bigint v0.1.40
 Downloading rustc-serialize v0.3.24
 Downloading rand v0.3.16
 Downloading phf_codegen v0.7.21
 Downloading phf_generator v0.7.21
 Downloading serde v1.0.15
 Downloading pkg-config v0.3.9
 Downloading core-graphics v0.8.2
 Downloading objc v0.2.2
 Downloading core-foundation v0.4.4
 Downloading cocoa v0.8.1
 Downloading core-foundation v0.3.0
 Downloading core-foundation-sys v0.3.1
 Downloading malloc_buf v0.0.6
 Downloading core-foundation-sys v0.4.4
 Downloading bitflags v0.7.0
 Downloading block v0.1.6
 Downloading core-graphics v0.7.0
 Downloading serde v0.9.15
   Compiling pkg-config v0.3.9
   Compiling linked-hash-map v0.4.2
   Compiling core-foundation-sys v0.3.1
   Compiling serde v1.0.15
   Compiling unicode-width v0.1.4
   Compiling unicode-segmentation v1.2.0
   Compiling bit-vec v0.4.4
   Compiling strsim v0.6.0
   Compiling approx v0.1.1
   Compiling void v1.0.2
   Compiling fnv v1.0.5
   Compiling log v0.3.8
   Compiling core-foundation-sys v0.4.4
   Compiling lazy_static v0.2.8
   Compiling rustc-serialize v0.3.24
   Compiling serde v0.9.15
   Compiling smallvec v0.4.3
   Compiling ansi_term v0.9.0
   Compiling shlex v0.1.1
   Compiling app_dirs v1.1.1
   Compiling regex-syntax v0.4.1
   Compiling bitflags v0.7.0
   Compiling siphasher v0.2.2
   Compiling matches v0.1.6
   Compiling either v1.1.0
   Compiling mac v0.1.1
   Compiling libc v0.2.31
   Compiling block v0.1.6
   Compiling num-traits v0.1.40
   Compiling vec_map v0.8.0
   Compiling bitflags v0.9.1
   Compiling utf8-ranges v1.0.0
   Compiling byteorder v1.1.0
   Compiling lru-cache v0.1.1
   Compiling unreachable v0.1.1
   Compiling unreachable v1.0.0
   Compiling schedule_recv v0.1.0
   Compiling utf-8 v0.7.1
   Compiling phf_shared v0.7.21
   Compiling itertools v0.6.3
   Compiling cancer v0.1.0 (https://github.com/meh/cancer#e8e10240)
   Compiling atty v0.2.2
   Compiling rand v0.3.16
   Compiling term_size v0.3.0
   Compiling memchr v1.0.1
   Compiling malloc_buf v0.0.6
   Compiling debug_unreachable v0.1.1
   Compiling thread_local v0.3.4
   Compiling num-integer v0.1.35
   Compiling phf v0.7.21
   Compiling textwrap v0.8.0
   Compiling aho-corasick v0.6.3
   Compiling nom v3.2.0
   Compiling objc v0.2.2
   Compiling futf v0.1.3
   Compiling core-foundation v0.3.0
   Compiling core-foundation v0.4.4
   Compiling num-iter v0.1.34
   Compiling phf_generator v0.7.21
   Compiling tendril v0.3.1
   Compiling clap v2.26.2
   Compiling core-graphics v0.8.2
   Compiling phf_codegen v0.7.21
   Compiling palette v0.2.1
   Compiling toml v0.4.5
   Compiling core-graphics v0.7.0
   Compiling num-complex v0.1.40
   Compiling num-bigint v0.1.40
   Compiling cocoa v0.8.1
   Compiling control-code v0.7.1
error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:321:45
    |
321 |     unsafe fn sharedApplication(_: Self) -> id {
    |                                             ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:406:46
    |
406 |     unsafe fn currentApplication(_: Self) -> id {
    |                                              ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:419:45
    |
419 |     unsafe fn generalPasteboard(_: Self) -> id {
    |                                             ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:423:81
    |
423 |     unsafe fn pasteboardByFilteringData_ofType(_: Self, data: id, _type: id) -> id {
    |                                                                                 ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:427:63
    |
427 |     unsafe fn pasteboardByFilteringFile(_: Self, file: id) -> id {
    |                                                               ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:431:78
    |
431 |     unsafe fn pasteboardByFilteringTypesInPasteboard(_: Self, pboard: id) -> id {
    |                                                                              ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:435:56
    |
435 |     unsafe fn pasteboardWithName(_: Self, name: id) -> id {
    |                                                        ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:439:52
    |
439 |     unsafe fn pasteboardWithUniqueName(_: Self) -> id {
    |                                                    ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:462:56
    |
462 |     unsafe fn typesFilterableTo(_: Self, _type: id) -> id {
    |                                                        ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:698:33
    |
698 |     unsafe fn alloc(_: Self) -> id {
    |                                 ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:702:31
    |
702 |     unsafe fn new(_: Self) -> id {
    |                               ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:737:33
    |
737 |     unsafe fn alloc(_: Self) -> id {
    |                                 ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:741:31
    |
741 |     unsafe fn new(_: Self) -> id {
    |                               ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:745:41
    |
745 |     unsafe fn separatorItem(_: Self) -> id {
    |                                         ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:795:33
    |
795 |     unsafe fn alloc(_: Self) -> id {
    |                                 ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
    --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:1642:33
     |
1642 |     unsafe fn alloc(_: Self) -> id {
     |                                 ^^ `Self` does not have a constant size known at compile-time
     |
     = help: the trait `std::marker::Sized` is not implemented for `Self`
     = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
    --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:1748:33
     |
1748 |     unsafe fn alloc(_: Self) -> id {
     |                                 ^^ `Self` does not have a constant size known at compile-time
     |
     = help: the trait `std::marker::Sized` is not implemented for `Self`
     = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
    --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:1777:33
     |
1777 |     unsafe fn alloc(_: Self) -> id {
     |                                 ^^ `Self` does not have a constant size known at compile-time
     |
     = help: the trait `std::marker::Sized` is not implemented for `Self`
     = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
    --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:1811:33
     |
1811 |     unsafe fn alloc(_: Self) -> id {
     |                                 ^^ `Self` does not have a constant size known at compile-time
     |
     = help: the trait `std::marker::Sized` is not implemented for `Self`
     = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
    --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:2787:34
     |
2787 |      unsafe fn alloc(_: Self) -> id {
     |                                  ^^ `Self` does not have a constant size known at compile-time
     |
     = help: the trait `std::marker::Sized` is not implemented for `Self`
     = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
    --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:2809:33
     |
2809 |     unsafe fn alloc(_: Self) -> id {
     |                                 ^^ `Self` does not have a constant size known at compile-time
     |
     = help: the trait `std::marker::Sized` is not implemented for `Self`
     = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
    --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:2823:68
     |
2823 |     unsafe fn imageNamed_(_: Self, name: id /* (NSString *) */) -> id {
     |                                                                    ^^ `Self` does not have a constant size known at compile-time
     |
     = help: the trait `std::marker::Sized` is not implemented for `Self`
     = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
    --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:3218:66
     |
3218 |     unsafe fn canInitWithPasteboard_(_: Self, pasteboard: id) -> BOOL {
     |                                                                  ^^^^ `Self` does not have a constant size known at compile-time
     |
     = help: the trait `std::marker::Sized` is not implemented for `Self`
     = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
    --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:3234:48
     |
3234 |     unsafe fn soundUnfilteredTypes(_: Self) -> id {
     |                                                ^^ `Self` does not have a constant size known at compile-time
     |
     = help: the trait `std::marker::Sized` is not implemented for `Self`
     = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
    --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:3238:54
     |
3238 |     unsafe fn soundNamed_(_: Self, soundName: id) -> id {
     |                                                      ^^ `Self` does not have a constant size known at compile-time
     |
     = help: the trait `std::marker::Sized` is not implemented for `Self`
     = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
    --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:3362:43
     |
3362 |     unsafe fn systemStatusBar(_: Self) -> id {
     |                                           ^^ `Self` does not have a constant size known at compile-time
     |
     = help: the trait `std::marker::Sized` is not implemented for `Self`
     = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
    --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:3390:33
     |
3390 |     unsafe fn alloc(_: Self) -> id {
     |                                 ^^ `Self` does not have a constant size known at compile-time
     |
     = help: the trait `std::marker::Sized` is not implemented for `Self`
     = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
    --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:3422:31
     |
3422 |     unsafe fn new(_: Self) -> id  {
     |                               ^^ `Self` does not have a constant size known at compile-time
     |
     = help: the trait `std::marker::Sized` is not implemented for `Self`
     = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
    --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:3597:33
     |
3597 |     unsafe fn alloc(_: Self) -> id {
     |                                 ^^ `Self` does not have a constant size known at compile-time
     |
     = help: the trait `std::marker::Sized` is not implemented for `Self`
     = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
    --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/appkit.rs:3600:31
     |
3600 |     unsafe fn new(_: Self) -> id {
     |                               ^^ `Self` does not have a constant size known at compile-time
     |
     = help: the trait `std::marker::Sized` is not implemented for `Self`
     = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:156:31
    |
156 |     unsafe fn new(_: Self) -> id {
    |                               ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:175:39
    |
175 |     unsafe fn processInfo(_: Self) -> id {
    |                                       ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:191:58
    |
191 |     unsafe fn valueWithPoint(_: Self, point: NSPoint) -> id {
    |                                                          ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:195:55
    |
195 |     unsafe fn valueWithSize(_: Self, size: NSSize) -> id {
    |                                                       ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:204:33
    |
204 |     unsafe fn array(_: Self) -> id {
    |                                 ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:208:60
    |
208 |     unsafe fn arrayWithObjects(_: Self, objects: &[id]) -> id {
    |                                                            ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:213:55
    |
213 |     unsafe fn arrayWithObject(_: Self, object: id) -> id {
    |                                                       ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:232:38
    |
232 |     unsafe fn dictionary(_: Self) -> id {
    |                                      ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:236:67
    |
236 |     unsafe fn dictionaryWithContentsOfFile_(_: Self, path: id) -> id {
    |                                                                   ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:240:66
    |
240 |     unsafe fn dictionaryWithContentsOfURL_(_: Self, aURL: id) -> id {
    |                                                                  ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:244:74
    |
244 |     unsafe fn dictionaryWithDictionary_(_: Self, otherDictionary: id) -> id {
    |                                                                          ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:248:80
    |
248 |     unsafe fn dictionaryWithObject_forKey_(_: Self, anObject: id, aKey: id) -> id {
    |                                                                                ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:252:81
    |
252 |     unsafe fn dictionaryWithObjects_forKeys_(_: Self, objects: id, keys: id) -> id {
    |                                                                                 ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:256:120
    |
256 |     unsafe fn dictionaryWithObjects_forKeys_count_(_: Self, objects: *const id, keys: *const id, count: NSUInteger) -> id {
    |                                                                                                                        ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:260:74
    |
260 |     unsafe fn dictionaryWithObjectsAndKeys_(_: Self, firstObject: id) -> id {
    |                                                                          ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:273:58
    |
273 |     unsafe fn sharedKeySetForKeys_(_: Self, keys: id) -> id {
    |                                                          ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:534:33
    |
534 |     unsafe fn alloc(_: Self) -> id {
    |                                 ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:573:39
    |
573 |     unsafe fn distantPast(_: Self) -> id {
    |                                       ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:577:41
    |
577 |     unsafe fn distantFuture(_: Self) -> id {
    |                                         ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:695:32
    |
695 |     unsafe fn data(_: Self) -> id {
    |                                ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:699:97
    |
699 |     unsafe fn dataWithBytes_length_(_: Self, bytes: *const libc::c_void, length: NSUInteger) -> id {
    |                                                                                                 ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:703:103
    |
703 |     unsafe fn dataWithBytesNoCopy_length_(_: Self, bytes: *const libc::c_void, length: NSUInteger) -> id {
    |                                                                                                       ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:708:98
    |
708 |                                                       length: NSUInteger, freeWhenDone: BOOL) -> id {
    |                                                                                                  ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:712:61
    |
712 |     unsafe fn dataWithContentsOfFile_(_: Self, path: id) -> id {
    |                                                             ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:717:75
    |
717 |                                                     errorPtr: *mut id) -> id {
    |                                                                           ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:721:60
    |
721 |     unsafe fn dataWithContentsOfURL_(_: Self, aURL: id) -> id {
    |                                                            ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:726:74
    |
726 |                                                    errorPtr: *mut id) -> id {
    |                                                                          ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error[E0277]: the trait bound `Self: std::marker::Sized` is not satisfied
   --> .cargo/registry/src/github.com-1ecc6299db9ec823/cocoa-0.8.1/src/foundation.rs:730:52
    |
730 |     unsafe fn dataWithData_(_: Self, aData: id) -> id {
    |                                                    ^^ `Self` does not have a constant size known at compile-time
    |
    = help: the trait `std::marker::Sized` is not implemented for `Self`
    = help: consider adding a `where Self: std::marker::Sized` bound

error: aborting due to 58 previous errors

error: Could not compile `cocoa`.
warning: build failed, waiting for other jobs to finish...
error: failed to compile `cancer v0.1.0 (https://github.com/meh/cancer#e8e10240)`, intermediate artifacts can be found at `/var/folders/b4/nhbpmdnn2rj3g_y6509yf_bw0000gn/T/cargo-install.Xwa1UdjqnDGJ`

Caused by:
  build failed

Consider supporting ReGIS.

Shouldn't be that hard considering Cairo is being used and it's just a simplified format for vector graphics.

Future rebirth.

Since this thing bitrot I've been miring libraries to use for the next iteration.

Graphics

Pathfinder + luminance

Makes it simple to add ReGIS support (and then add an extension to draw SVGs using the same protocol).

Makes it simple to add Sixel support (and then add an extension for RGBA colors).

Makes it simple to add fancy shaders or whatever.

I/O

smol and async/await from the start because reasons.

Support macOS

Support macOS, as in, without going through X11.

I really do not want to have to deal with Cocoa, but such is life.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.