██ ████ ██ ██ ███ ██ ███ ██ ██ ██ ██ ██ ██ `rx` is a modern and minimalist pixel editor. Designed with great care and love with pixel artists and animators in mind. OVERVIEW `rx` is an extensible, modern and minimalist pixel editor implemented in rust[0]. rx is free software, licensed under the GPLv3. Most of the information on how to use rx is on the website: https://rx.cloudhead.io. There, you can also find a user guide (https://rx.cloudhead.io/guide.html), installation instructions, and binary download links. To build rx from source, see the build sections below. Once inside rx, enter the `:help` command to get a list of key bindings and commands. [0]: https://rust-lang.org REQUIREMENTS At a minimum, OpenGL 3.3 support is required. BUILD DEPENDENCIES * rust (https://www.rust-lang.org/tools/install) * cmake (https://cmake.org/download/) On macOS, `Xcode` and the `Xcode Command Line Tools` are required. The latter can be obtained by running `xcode-select --install` CMake can be installed with `brew install cmake`. BUILD & INSTALLATION Before proceeding, make sure the BUILD DEPENDENCIES have been installed. Then, clone this repository and from its root, run: $ cargo install --locked --path . This will install rx under `~/.cargo/bin/rx`. If you prefer a different install location, you can specify it via the `--root <prefix>` flag, where <prefix> is for example '/usr/local'. CONTRIBUTING See the CONTRIBUTING file for details. Contributions are appreciated. USAGE See the guide at https://rx.cloudhead.io/guide.html. TROUBLESHOOTING If something isn't working like it's supposed to, there are various things you can do to debug the problem: * Run `rx` with verbose logging, by using the `-v` command-line flag. This will log errors from the underlying libraries that are usually suppressed, and will show debug output that might indicate what the problem is. * If `rx` is crashing, run it with `RUST_BACKTRACE=1` set in your environment to show a backtrace on crash. * It could be that the issue is related to your configuration - in that case the program can be run without loading the initialization script like so: rx -u - LICENSE This software is licensed under the GPL. See the LICENSE file for more details. COPYRIGHT (c) 2019 Alexis Sellier
rx — Vi inspired Modern Pixel Art Editor
██ ████ ██ ██ ███ ██ ███ ██ ██ ██ ██ ██ ██ `rx` is a modern and minimalist pixel editor. Designed with gFull copying and pasting ability would be very useful ofc and I'm sure it's on the roadmap, but in the meantime two features would help a lot with the animation process:
- Frame cloning: add a new frame at the end (or even in the middle) with contents copied from another frame. Maybe a
f/clone
command with frame index? - Synchronous editing: propagate edits in a single frame to one or more other frames.
Maybe I can add the features myself and open some PRs if you like the idea? Let me know. Thank you for building and sharing this project, looks really promising and it's pleasing to use.
Related to #18
Windows 10, compiled with 1.38 stable. (--vulkan
feature flag)
rx does not go into command mode when writing :
using a Swedish/Nordic keyboard layout (Shift + Period) and instead zooms in one level.
It seems to recieve a colon in the RecievedCharacter
event, but the KeyboardInput
contains a period.
Logs:
[2019-09-30T13:57:01Z DEBUG rx] event: KeyboardInput(KeyboardInput { state: Pressed, key: Some(Shift), modifiers: ModifiersState { shift: true, ctrl: false, alt: false, meta: false } })
[2019-09-30T13:57:01Z DEBUG rx::session] KeyboardInput { state: Pressed, key: Some(Shift), modifiers: ModifiersState { shift: true, ctrl: false, alt: false, meta: false } }
[2019-09-30T13:57:01Z DEBUG rx::session] command: BrushSet(Multi)
[2019-09-30T13:57:02Z DEBUG rx] event: KeyboardInput(KeyboardInput { state: Pressed, key: Some(Period), modifiers: ModifiersState { shift: true, ctrl: false, alt: false, meta: false } })
[2019-09-30T13:57:02Z DEBUG rx] event: ReceivedCharacter(':')
[2019-09-30T13:57:02Z DEBUG rx::session] KeyboardInput { state: Pressed, key: Some(Period), modifiers: ModifiersState { shift: true, ctrl: false, alt: false, meta: false } }
[2019-09-30T13:57:02Z DEBUG rx::session] command: Zoom(Incr)
[2019-09-30T13:57:02Z DEBUG rx::session] zoom: 1 -> 2
[2019-09-30T13:57:02Z DEBUG rx] event: KeyboardInput(KeyboardInput { state: Released, key: Some(Period), modifiers: ModifiersState { shift: true, ctrl: false, alt: false, meta: false } })
[2019-09-30T13:57:02Z DEBUG rx::session] KeyboardInput { state: Released, key: Some(Period), modifiers: ModifiersState { shift: true, ctrl: false, alt: false, meta: false } }
[2019-09-30T13:57:02Z DEBUG rx] event: KeyboardInput(KeyboardInput { state: Released, key: Some(Shift), modifiers: ModifiersState { shift: false, ctrl: false, alt: false, meta: false } })
[2019-09-30T13:57:02Z DEBUG rx::session] KeyboardInput { state: Released, key: Some(Shift), modifiers: ModifiersState { shift: false, ctrl: false, alt: false, meta: false } }
[2019-09-30T13:57:02Z DEBUG rx::session] command: BrushUnset(Multi)
Hi, this is my humble attempt at implementing the functionality to flip a selection. It was once again a pleasant experience as I really like the structure of the code, but I'm not sure if I'm doing it "idiomatically".
Here is a demonstration of how it looks:
(yea, the colors are screwed because it's a gif, here's a webm for more pleasant viewing -> flip.webm)
This is what I did for these changes:
- create a command
selection/flip
which takes one argument of direction, valid values areh
orhorizontal
andv
orvertical
. - then I created a
ViewOp
for flip and went togl/mod.rs
to create an implementation. It's pretty much a yank, which also takes direction as an argument and then flips the pixels accordingly - In session.rs, I added appropriate functions taking yank as example. To allow possibly doing a bunch of flips with a hotkey, I figured the easiest would be doing it in the place of selection, so I did this:
Command::SelectionFlip(dir) => {
self.flip_selection(dir);
// I think its handy to flip in place for now, hence these commands
// 1., 2. prevent overlap and paste
// 3. preserve location so you can flip repeatedly w/ hotkey
self.command(Command::SelectionErase);
self.command(Command::SelectionPaste);
self.command(Command::Mode(Mode::Visual(VisualState::Selecting { dragging: false })));
}
I'm really unsure if this is the correct way to do it, so I am sorry if I did something wrong, haha :sweat_smile:
thread 'main' panicked at 'No adapters found. Please enable the feature for one of the graphics backends: vulkan, metal, dx12, dx11, gl', src/libcore/option.rs:1166:5
"gl"
cargo install --force --git https://github.com/cloudhead/rx --locked --features gl
Package
rx v0.1.0 (https://github.com/cloudhead/rx#465f95f4)does not have these features:
gl``
When going fullscreen on macOS moving the cursor becomes super slow. Weirdly this issue doesn't happen while screen recording is happening via QuickTime : D
The package was built via:
rx » cargo install --git https://github.com/cloudhead/rx --tag v0.2.0 --locked --features metal
Updating git repository `https://github.com/cloudhead/rx`
Installing rx v0.2.0 (https://github.com/cloudhead/rx?tag=v0.2.0#a296ebf4)
Updating git repository `https://github.com/cloudhead/rendy`
Updating crates.io index
Downloaded directories v2.0.2
Downloaded png v0.15.0
Downloaded raw-window-handle v0.1.2
Downloaded gif v0.10.2
Downloaded deflate v0.7.20
Downloaded dirs-sys v0.3.4
Downloaded rgx v0.1.5
Downloaded inflate v0.4.5
Downloaded glfw v0.32.0
Downloaded color_quant v1.0.1
Downloaded snap v0.2.5
Downloaded lzw v0.10.0
Downloaded adler32 v1.0.3
Downloaded objc v0.2.6
Downloaded glfw-sys v3.3.0
Downloaded wgpu v0.3.0
Downloaded malloc_buf v0.0.6
Downloaded objc_exception v0.1.1
Downloaded zerocopy v0.2.8
Downloaded wgpu-native v0.3.3
Downloaded gcc v0.3.55
Downloaded cmake v0.1.41
Downloaded gfx-backend-empty v0.3.0
Downloaded gfx-backend-metal v0.3.0
Downloaded gfx-hal v0.3.0
Downloaded rendy-descriptor v0.4.0
Downloaded hibitset v0.6.2
Downloaded backtrace v0.3.34
Downloaded colorful v0.2.1
Downloaded derivative v1.0.2
Downloaded relevant v0.4.2
Downloaded zerocopy-derive v0.1.4
Downloaded fxhash v0.2.1
Downloaded cc v1.0.40
Downloaded foreign-types v0.3.2
Downloaded block v0.1.6
Downloaded cocoa v0.18.4
Downloaded range-alloc v0.1.0
Downloaded storage-map v0.2.0
Downloaded foreign-types-shared v0.1.1
Downloaded core-graphics v0.17.3
Downloaded metal v0.15.0
Downloaded objc-foundation v0.1.1
Downloaded atom v0.3.5
Downloaded spirv_cross v0.15.0
Downloaded objc_id v0.1.1
Compiling proc-macro2 v0.4.30
Compiling libc v0.2.62
Compiling unicode-xid v0.1.0
Compiling gcc v0.3.55
Compiling syn v0.15.44
Compiling cc v1.0.40
Compiling semver-parser v0.7.0
Compiling core-foundation-sys v0.6.2
Compiling bitflags v1.1.0
Compiling foreign-types-shared v0.1.1
Compiling byteorder v1.3.2
Compiling failure_derive v0.1.5
Compiling rustc-demangle v0.1.16
Compiling cfg-if v0.1.9
Compiling log v0.4.8
Compiling memchr v2.2.1
Compiling block v0.1.6
Compiling arrayvec v0.4.11
Compiling smallvec v0.6.10
Compiling scopeguard v1.0.0
Compiling atom v0.3.5
Compiling nodrop v0.1.13
Compiling gfx-backend-metal v0.3.0
Compiling copyless v0.1.4
Compiling colorful v0.2.1
Compiling range-alloc v0.1.0
Compiling slab v0.4.2
Compiling autocfg v0.1.5
Compiling lazy_static v1.3.0
Compiling crc32fast v1.2.0
Compiling regex-syntax v0.6.11
Compiling quick-error v1.2.2
Compiling vec_map v0.8.1
Compiling adler32 v1.0.3
Compiling unicode-width v0.1.5
Compiling termcolor v1.0.5
Compiling color_quant v1.0.1
Compiling lzw v0.10.0
Compiling semver v0.9.0
Compiling foreign-types v0.3.2
Compiling cmake v0.1.41
Compiling lock_api v0.3.1
Compiling hibitset v0.6.2
Compiling thread_local v0.3.6
Compiling humantime v1.2.0
Compiling inflate v0.4.5
Compiling textwrap v0.11.0
Compiling gif v0.10.2
Compiling rustc_version v0.2.3
Compiling num-traits v0.2.8
Compiling storage-map v0.2.0
Compiling objc_exception v0.1.1
Compiling parking_lot_core v0.6.2
Compiling parking_lot v0.9.0
Compiling clap v2.33.0
Compiling malloc_buf v0.0.6
Compiling core-foundation v0.6.4
Compiling raw-window-handle v0.1.2
Compiling atty v0.2.13
Compiling dirs-sys v0.3.4
Compiling quote v0.6.13
Compiling fxhash v0.2.1
Compiling deflate v0.7.20
Compiling snap v0.2.5
Compiling aho-corasick v0.7.6
Compiling directories v2.0.2
Compiling core-graphics v0.17.3
Compiling backtrace-sys v0.1.31
Compiling spirv_cross v0.15.0
Compiling glfw-sys v3.3.0
Compiling png v0.15.0
Compiling regex v1.2.1
Compiling objc v0.2.6
Compiling objc_id v0.1.1
Compiling cocoa v0.18.4
Compiling env_logger v0.6.2
Compiling objc-foundation v0.1.1
Compiling synstructure v0.10.2
Compiling backtrace v0.3.34
Compiling metal v0.15.0
Compiling relevant v0.4.2
Compiling glfw v0.32.0
Compiling derivative v1.0.2
Compiling zerocopy-derive v0.1.4
Compiling failure v0.1.5
Compiling gfx-hal v0.3.0
Compiling zerocopy v0.2.8
Compiling rendy-memory v0.4.0 (https://github.com/cloudhead/rendy#e08b64fb)
Compiling rendy-descriptor v0.4.0
Compiling gfx-backend-empty v0.3.0
Compiling wgpu-native v0.3.3
Compiling wgpu v0.3.0
Compiling rgx v0.1.5
Compiling rx v0.2.0 (https://github.com/cloudhead/rx?tag=v0.2.0#a296ebf4)
Finished release [optimized] target(s) in 3m 14s
Installing /Users/rudolfs/.cargo/bin/rx
Installed package `rx v0.2.0 (https://github.com/cloudhead/rx?tag=v0.2.0#a296ebf4)` (executable `rx`)
cargo install --git https://github.com/cloudhead/rx --locked
△ ~ RUST_BACKTRACE=full rx -u -
[2019-11-17T19:15:33Z INFO rx] framebuffer size: 1280x720
[2019-11-17T19:15:33Z INFO rx] hidpi factor: 2.2999980449676514
[2019-11-17T19:15:33Z INFO rx::session] rx v0.2.0
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', src/libcore/option.rs:378:21
stack backtrace:
0: 0x556f5ce1c524 - backtrace::backtrace::libunwind::trace::hda41dbcdfba36aa0
at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.37/src/backtrace/libunwind.rs:88
1: 0x556f5ce1c524 - backtrace::backtrace::trace_unsynchronized::h1a8d6e1f8cb3f5d4
at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.37/src/backtrace/mod.rs:66
2: 0x556f5ce1c524 - std::sys_common::backtrace::_print_fmt::h610c4127487e10da
at src/libstd/sys_common/backtrace.rs:76
3: 0x556f5ce1c524 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h0722dc552e01bd1d
at src/libstd/sys_common/backtrace.rs:60
4: 0x556f5ce3d21c - core::fmt::write::h01edf6dd68a42c9c
at src/libcore/fmt/mod.rs:1030
5: 0x556f5ce19087 - std::io::Write::write_fmt::hf15985f193f03c04
at src/libstd/io/mod.rs:1412
6: 0x556f5ce1e7d5 - std::sys_common::backtrace::_print::hd8d5d08a1795e743
at src/libstd/sys_common/backtrace.rs:64
7: 0x556f5ce1e7d5 - std::sys_common::backtrace::print::hf89a79e3921a2366
at src/libstd/sys_common/backtrace.rs:49
8: 0x556f5ce1e7d5 - std::panicking::default_hook::{{closure}}::h3a8f42beb3bb8ae3
at src/libstd/panicking.rs:196
9: 0x556f5ce1e4c6 - std::panicking::default_hook::h8f803b0bc31a5c37
at src/libstd/panicking.rs:210
10: 0x556f5ce1ee75 - std::panicking::rust_panic_with_hook::h825f041245da8739
at src/libstd/panicking.rs:473
11: 0x556f5ce1ea12 - std::panicking::continue_panic_fmt::hbe0378e33481e81b
at src/libstd/panicking.rs:380
12: 0x556f5ce1e906 - rust_begin_unwind
at src/libstd/panicking.rs:307
13: 0x556f5ce3931a - core::panicking::panic_fmt::h527855ce0bc891f6
at src/libcore/panicking.rs:85
14: 0x556f5ce39259 - core::panicking::panic::h2f49f09cf859b728
at src/libcore/panicking.rs:49
15: 0x556f5cd5f86f - wgpu_request_adapter
16: 0x556f5cd5a4b7 - wgpu::Adapter::request::hc06a386463c80c30
17: 0x556f5cc265bc - rx::init::h3fab2ab361ffb234
18: 0x556f5cc343e8 - rx::main::ha967765a9e31cdfc
19: 0x556f5cc1d013 - std::rt::lang_start::{{closure}}::hc4ee2151b7bf7afb
20: 0x556f5ce1e8a3 - std::rt::lang_start_internal::{{closure}}::ha04574f12d97cbe2
at src/libstd/rt.rs:49
21: 0x556f5ce1e8a3 - std::panicking::try::do_call::h7c2a8488f72db90c
at src/libstd/panicking.rs:292
22: 0x556f5ce214fa - __rust_maybe_catch_panic
at src/libpanic_unwind/lib.rs:80
23: 0x556f5ce1f36d - std::panicking::try::hc3a9b5da4250385d
at src/libstd/panicking.rs:271
24: 0x556f5ce1f36d - std::panic::catch_unwind::hf27600bf8c37809a
at src/libstd/panic.rs:394
25: 0x556f5ce1f36d - std::rt::lang_start_internal::h409d4f2fe51133b0
at src/libstd/rt.rs:48
26: 0x556f5cc34a22 - main
27: 0x7f637cacab97 - __libc_start_main
28: 0x556f5cc1b2ca - _start
29: 0x0 - <unknown>
Description
It would be really nice to add some long file path trimming (or something like displaying only the filename by default, configurable) since now when long file path comes in, it overlaps selected colors.
Screenshot
Description
rx
crashes when opening directory (i guess it also occurs with opening single file) that contains unicode characters (or grapheme?).
Stack backtrace
INFO [rx] framebuffer size: 1280x720
INFO [rx] scale factor: 1
thread 'main' panicked at 'byte index 16 is not a char boundary; it is inside '§' (bytes 15..17) of `§7[§316x§7] §3Aqua`', /home/neg4n/.cargo/registry/src/github.com-1ecc6299db9ec823/memoir-0.2.1/src/result.rs:39:15
stack backtrace:
0: rust_begin_unwind
at /rustc/2987785df3d46d5ff144a5c67fbb8f5cca798d78/library/std/src/panicking.rs:493:5
1: core::panicking::panic_fmt
at /rustc/2987785df3d46d5ff144a5c67fbb8f5cca798d78/library/core/src/panicking.rs:92:14
2: core::str::slice_error_fail
3: core::str::traits::<impl core::slice::index::SliceIndex<str> for core::ops::range::RangeTo<usize>>::index
at /home/neg4n/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/str/traits.rs:289:21
4: core::str::traits::<impl core::ops::index::Index<I> for str>::index
at /home/neg4n/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/str/traits.rs:64:9
5: memoir::result::Error::expect
at /home/neg4n/.cargo/registry/src/github.com-1ecc6299db9ec823/memoir-0.2.1/src/result.rs:39:15
6: memoir::parsers::satisfy::{{closure}}
at /home/neg4n/.cargo/registry/src/github.com-1ecc6299db9ec823/memoir-0.2.1/src/parsers.rs:338:23
7: memoir::parsers::many::{{closure}}
at /home/neg4n/.cargo/registry/src/github.com-1ecc6299db9ec823/memoir-0.2.1/src/parsers.rs:552:41
8: memoir::parsers::Parser<O>::from_str::{{closure}}
at /home/neg4n/.cargo/registry/src/github.com-1ecc6299db9ec823/memoir-0.2.1/src/parsers.rs:276:32
9: memoir::parsers::optional::{{closure}}
at /home/neg4n/.cargo/registry/src/github.com-1ecc6299db9ec823/memoir-0.2.1/src/parsers.rs:391:34
10: memoir::parsers::Parser<O>::skip::{{closure}}
at /home/neg4n/.cargo/registry/src/github.com-1ecc6299db9ec823/memoir-0.2.1/src/parsers.rs:146:42
11: memoir::parsers::any::{{closure}}
at /home/neg4n/.cargo/registry/src/github.com-1ecc6299db9ec823/memoir-0.2.1/src/parsers.rs:512:41
12: memoir::parsers::Parser<O>::then::{{closure}}::{{closure}}
at /home/neg4n/.cargo/registry/src/github.com-1ecc6299db9ec823/memoir-0.2.1/src/parsers.rs:56:21
13: core::result::Result<T,E>::and_then
at /home/neg4n/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/result.rs:708:22
14: memoir::parsers::Parser<O>::then::{{closure}}
at /home/neg4n/.cargo/registry/src/github.com-1ecc6299db9ec823/memoir-0.2.1/src/parsers.rs:55:17
15: memoir::parsers::Parser<O>::map::{{closure}}
at /home/neg4n/.cargo/registry/src/github.com-1ecc6299db9ec823/memoir-0.2.1/src/parsers.rs:172:26
16: memoir::parsers::choice::{{closure}}
at /home/neg4n/.cargo/registry/src/github.com-1ecc6299db9ec823/memoir-0.2.1/src/parsers.rs:593:23
17: memoir::parsers::Parser<O>::or::{{closure}}
at /home/neg4n/.cargo/registry/src/github.com-1ecc6299db9ec823/memoir-0.2.1/src/parsers.rs:109:32
18: memoir::parsers::Parser<O>::then::{{closure}}::{{closure}}
at /home/neg4n/.cargo/registry/src/github.com-1ecc6299db9ec823/memoir-0.2.1/src/parsers.rs:56:21
19: core::result::Result<T,E>::and_then
at /home/neg4n/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/result.rs:708:22
20: memoir::parsers::Parser<O>::then::{{closure}}
at /home/neg4n/.cargo/registry/src/github.com-1ecc6299db9ec823/memoir-0.2.1/src/parsers.rs:55:17
21: memoir::parsers::Parser<O>::map::{{closure}}
at /home/neg4n/.cargo/registry/src/github.com-1ecc6299db9ec823/memoir-0.2.1/src/parsers.rs:172:26
22: memoir::parsers::Parser<O>::skip::{{closure}}
at /home/neg4n/.cargo/registry/src/github.com-1ecc6299db9ec823/memoir-0.2.1/src/parsers.rs:145:32
23: memoir::parsers::Parser<O>::skip::{{closure}}
at /home/neg4n/.cargo/registry/src/github.com-1ecc6299db9ec823/memoir-0.2.1/src/parsers.rs:145:32
24: memoir::parsers::Parser<O>::skip::{{closure}}
at /home/neg4n/.cargo/registry/src/github.com-1ecc6299db9ec823/memoir-0.2.1/src/parsers.rs:145:32
25: memoir::parsers::Parser<O>::parse
at /home/neg4n/.cargo/registry/src/github.com-1ecc6299db9ec823/memoir-0.2.1/src/parsers.rs:236:9
26: rx::cmd::CommandLine::parse
at ./src/cmd.rs:530:15
27: rx::session::Session::cmdline_handle_enter
at ./src/session.rs:3360:15
28: rx::session::Session::handle_keyboard_input
at ./src/session.rs:2442:33
29: rx::session::Session::handle_event
at ./src/session.rs:2121:44
30: rx::session::Session::update
at ./src/session.rs:1017:17
31: rx::init::{{closure}}
at ./src/lib.rs:342:36
32: rx::timer::FrameTimer::run
at ./src/timer.rs:24:22
33: rx::init
at ./src/lib.rs:342:13
34: rx::execute
at ./src/main.rs:124:22
35: rx::main
at ./src/main.rs:31:21
36: core::ops::function::FnOnce::call_once
at /home/neg4n/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/function.rs:227:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
The terminal process "/usr/bin/zsh '-c', 'cargo run --package rx --bin rx'" terminated with exit code: 101.
Its probably related to string slicing?
Steps to reproduce
This bug was observed when i tried to load Minecraft texturepack :e <path containing unicode>
that has many §
in name.
Additional info
OS: Ubuntu 20.10 x86_64
Kernel: 5.8.0-43-generic
Hi there!
First of all, thank you for developing RX. I've been using it for a while now and like it very much.
I am using Sway which uses Wayland instead of X11. I know there is xorg-server-xwayland package available but would like to ask whether Wayland will be natively supported or not? When I try to run RX, it gives me this error:
thread 'main' panicked at 'GLFW Error: X11: Failed to open display :0', /home/makkusu/.cargo/registry/src/github.com-1ecc6299db9ec823/glfw-0.34.0/src/lib.rs:422:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
I suppose the program complains about X11 missing from the system. Unfortunately, I am not an experienced developer at all, therefore I cannot implement support for Wayland by myself and create a pull request right now.
Kind regards, Makkusu
It would be great to make shapes tool ex: rectangle, ellipse, line
This is just an experiment, un-optimized attempt to sort palette by hue rather than luminosity.
Below is the result of a p/sort
command on the default palette :
Open a file a.png
,
save with :w b.png
-> open file name does not change.
save again with :w
will overwrite a.png
and you cannot overwrite b.png
.
We miss a :sav
command which will change current file.
Category: Rust / Applications |
Watchers: 16 |
Star: 1.7k |
Fork: 62 |
Last update: Mar 3, 2021 |