Neo - Simulates the digital rain from "The Matrix" (cmatrix clone with 32-bit color and Unicode support)

Overview

neo

neo is AWESOME

WARNING: neo may cause discomfort and seizures in people with photosensitive epilepsy. User discretion is advised.

neo recreates the digital rain effect from "The Matrix". Streams of random characters will endlessly scroll down your terminal screen.

Cool features:

  • Simulates the effect convincingly:
    • Similar color palatte and uneven colors
    • Glitchy characters
    • Half-width katakana characters
  • Can display a message similar to the title crawl in the movies
  • Unicode support
  • Supports 16/256 colors and 32-bit color
  • Automatic detection of terminal color and Unicode support
  • Handles terminal resizing
  • Fully customizable colors and characters
  • Many key controls and command-line options for customization

neo is best enjoyed with some good Scotch while listening to Aphex Twin and working on tech.

Prerequisites/Dependencies

neo works with Linux and other UNIX-like operating systems such as macOS and FreeBSD. Native Windows is not supported, but it is possible to run neo using WSL.

The following packages are required to build and run neo:

  • build-essential: make and g++ are used to build neo
  • libncurses-dev: neo uses the ncursesw library to control the terminal
  • autoconf: neo is built using autotools (NOT NEEDED if using an official release tarball)

Ensure that your C++ compiler supports C++11 and that your autoconf version is at least 2.61. g++ and clang++ both work for compilation.

If you want to see Unicode characters, you must use a font that supports the characters you are trying to display. Your OS must have the font, and your terminal must use it. Your locale should have Unicode support (usually UTF-8). Check your $LANG environment variable.

A fast terminal emulator such as Alacritty is highly recommended. neo can be a bit of a CPU hog, especially on large screens with slow terminal emulators.

Building and Installing

Make sure you have read the Prerequisites section and satisified all the requirements. See doc/INSTALL for more details.

Option 1: Using an official release tarball

Click on the latest release on this GitHub page. Under the Assets pane, click on neo-<VERSION>.tar.gz and save it somewhere. Ignore the other "Source code" files.

Open a terminal and navigate to wherever you saved the tarball. Run the following commands:

# Only for macOS with Homebrew
export LDFLAGS="-L/opt/homebrew/opt/ncurses/lib"
export CPPFLAGS="-I/opt/homebrew/opt/ncurses/include"
# End of macOS Homebrew commands

tar xzf neo-<VERSION>.tar.gz
cd neo-<VERSION>
./configure
make
sudo make install

Option 2: Building from this repo

Clone this repository, open a terminal, and navigate to the repo directory.

Run the following commands:

./autogen.sh
./configure
make -j3
sudo make install

Uninstalling

To uninstall neo, run the following command from the directory where you built neo:

sudo make uninstall

neo can also be manually uninstalled by simply deleting the installed neo executable and neo.6 man page.

Running

Once neo is installed, simply run:

neo

neo has many options and key controls, arguably too many, and definitely too many to list here. Check the help message and manual for more info:

neo -h
man neo

Screenshots

In Soviet Russia

Green Hexadecimal

Golden Greek

FAQ/Troubleshooting

Q: neo displays garbage characters on the screen. How can this be fixed?

A: neo will attempt to use half-width katakana characters by default. You may not have a font installed that can display them correctly, or your terminal might not support Unicode well. Try "--charset=ascii" or changing your font. You may also need to use the "--colormode=0" option to disable color.

Q: Colors aren't working. How can this be fixed?

A: Make sure your terminal supports colors. Double check if you need to set the TERM environment variable to enable colors. You may want to try the "--colormode" option.

Q: How do I disable the blinking characters?

A: Use the --noglitch option.

Q: Can I make the text scroll faster or slower?

A: Yes, use the -S/--speed option. Also, the UP and DOWN keys change the speed. The --async option may be fun to try.

Q: How do I change the colors?

A: Use the -c/--color option (e.g. "-c red"). The number keys also change the color while running. Check out the "COLOR FILE" section in the manual if you want to customize neo with your own colors.

Q: How do I change the characters displayed?

A: Use the --charset and/or --chars option. You may also need to use the -F/--fullwidth option depending on the characters you selected.

Q: How do I display a message in the center of the screen?

A: Use the -m/--message option. Don't forget to use double quotes!

Q: neo just shows simple ASCII characters. How can I make it show Unicode characters?

A: neo detects if your locale supports Unicode. Typically, your $LANG environment variable should have "UTF" somewhere if it does (e.g. "en_US.UTF-8"). You can use commands such as localectl to change these settings. You can force neo to attempt to use Unicode by setting a custom charset (e.g. --charset=extended), but this still may not work due to other OS and terminal settings.

Bugs

File a GitHub issue. Crashes and build failures will be prioritized. Minor bugs, documentation errors, etc should hopefully get triaged and fixed... eventually.

Contributing

See doc/HACKING for more implementation details and a list of things that could be improved.

Requests for enhancement (RFEs) are not likely to be considered or implemented unless they are:

  • Within the scope of the original application
  • Simple
  • Likely to be used by more than one person

The original author deliberately avoided some features present in similar projects (e.g. custom fonts and Windows support) for simplicity.

Pull requests will be handled in a similar manner. Pull requests for bug fixes are more likely to be accepted than new features.

Acknowledgments

  • Chris Allegretta, the original author of cmatrix, and Abishek V Ashok, its current maintainer. cmatrix was a source of inspiration for neo.
  • Thomas E. Dickey, because neo would have been a PITA to write without ncursesw
  • Everyone involved in the production of "The Matrix" and the rest of the franchise

License

neo is provided under the GNU GPL v3. See doc/COPYING for more details.

Disclaimer

This project is not affiliated with "The Matrix", Warner Bros. Entertainment Inc., Village Roadshow Pictures, Silver Pictures, nor any of their parent companies, subsidiaries, partners, or affiliates.

Comments
  • Compilation fails both with gcc++ and clang on Gentoo Linux

    Compilation fails both with gcc++ and clang on Gentoo Linux

    I tried to compile neo from source according to instructions both in Readme and from docs/install. Building fails with similar errors, both when using git clone and from release page source (both from source code and official release tarball). I'm using latest (in gentoo it is "testing") version of both ncurses (6.3) and autoconf (2.71). I've tried it on two machines with the same result, both running gentoo, the other is using stable version of ncurses (6.2). Also tried using build directory and compiling there, again no luck for me.

    This is terminal output when compiling with gcc++:

    [email protected] ~/neo/neo-0.6 $ ./autogen.sh 
    configure.ac:4: installing 'build-aux/install-sh'
    configure.ac:4: installing 'build-aux/missing'
    src/Makefile.am: installing 'build-aux/depcomp'
    [email protected] ~/neo/neo-0.6 $ ./configure 
    checking for a BSD-compatible install... /usr/bin/install -c
    checking whether build environment is sane... yes
    checking for a race-free mkdir -p... /bin/mkdir -p
    checking for gawk... gawk
    checking whether make sets $(MAKE)... yes
    checking whether make supports nested variables... yes
    checking for g++... g++
    checking whether the C++ compiler works... yes
    checking for C++ compiler default output file name... a.out
    checking for suffix of executables... 
    checking whether we are cross compiling... no
    checking for suffix of object files... o
    checking whether the compiler supports GNU C++... yes
    checking whether g++ accepts -g... yes
    checking for g++ option to enable C++11 features... none needed
    checking whether make supports the include directive... yes (GNU style)
    checking dependency style of g++... gcc3
    checking whether make sets $(MAKE)... (cached) yes
    checking for initscr in -lncursesw... yes
    checking for stdio.h... yes
    checking for stdlib.h... yes
    checking for string.h... yes
    checking for inttypes.h... yes
    checking for stdint.h... yes
    checking for strings.h... yes
    checking for sys/stat.h... yes
    checking for sys/types.h... yes
    checking for unistd.h... yes
    checking for getopt.h... yes
    checking for locale.h... yes
    checking for ncurses.h... yes
    checking whether g++ supports C++11 features with -std=c++11... yes
    checking that generated files are newer than configure... done
    configure: creating ./config.status
    config.status: creating Makefile
    config.status: creating doc/Makefile
    config.status: creating src/Makefile
    config.status: executing depfiles commands
    [email protected] ~/neo/neo-0.6 $ make
    Making all in doc
    make[1]: Entering directory '/home/kenny2/neo/neo-0.6/doc'
    make[1]: Nothing to be done for 'all'.
    make[1]: Leaving directory '/home/kenny2/neo/neo-0.6/doc'
    Making all in src
    make[1]: Entering directory '/home/kenny2/neo/neo-0.6/src'
    g++ -std=c++11 -DPACKAGE_NAME=\"neo\" -DPACKAGE_TARNAME=\"neo\" -DPACKAGE_VERSION=\"0.6\" -DPACKAGE_STRING=\"neo\ 0.6\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"neo\" -DVERSION=\"0.6\" -DHAVE_LIBNCURSESW=1 -DHAVE_STDIO_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_STRINGS_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_UNISTD_H=1 -DSTDC_HEADERS=1 -DHAVE_GETOPT_H=1 -DHAVE_LOCALE_H=1 -DHAVE_NCURSES_H=1 -DHAVE_CXX11=1 -I.    -DNCURSES_WIDECHAR -std=c++11 -g -O2 -MT cloud.o -MD -MP -MF .deps/cloud.Tpo -c -o cloud.o cloud.cpp
    cloud.cpp: In member function ‘void Cloud::CalcMessage()’:
    cloud.cpp:852:9: error: ‘mvinnwstr’ was not declared in this scope; did you mean ‘mvinnstr’?
      852 |         mvinnwstr(msgChar.line, msgChar.col, wc, 1);
          |         ^~~~~~~~~
          |         mvinnstr
    cloud.cpp: In member function ‘void Cloud::DrawMessage() const’:
    cloud.cpp:870:9: error: ‘mvadd_wch’ was not declared in this scope; did you mean ‘mvaddch’?
      870 |         mvadd_wch(msgChar.line, msgChar.col, &wc);
          |         ^~~~~~~~~
          |         mvaddch
    make[1]: *** [Makefile:374: cloud.o] Error 1
    make[1]: Leaving directory '/home/kenny2/neo/neo-0.6/src'
    make: *** [Makefile:336: all-recursive] Error 1
    

    and this is result when compiling with clang:

    [email protected] ~/neo/neo-0.6 $ ./autogen.sh 
    configure.ac:4: installing 'build-aux/install-sh'
    configure.ac:4: installing 'build-aux/missing'
    src/Makefile.am: installing 'build-aux/depcomp'
    [email protected] ~/neo/neo-0.6 $ ./configure CXXFLAGS="-Os -march=native -mtune=native -DNDEBUG -fno-exceptions -ffunction-sections -fdata-sections -flto" LDFLAGS="-Wl,--gc-sections -flto" CXX="clang++"
    checking for a BSD-compatible install... /usr/bin/install -c
    checking whether build environment is sane... yes
    checking for a race-free mkdir -p... /bin/mkdir -p
    checking for gawk... gawk
    checking whether make sets $(MAKE)... yes
    checking whether make supports nested variables... yes
    checking whether the C++ compiler works... yes
    checking for C++ compiler default output file name... a.out
    checking for suffix of executables... 
    checking whether we are cross compiling... no
    checking for suffix of object files... o
    checking whether the compiler supports GNU C++... yes
    checking whether clang++ accepts -g... yes
    checking for clang++ option to enable C++11 features... none needed
    checking whether make supports the include directive... yes (GNU style)
    checking dependency style of clang++... gcc3
    checking whether make sets $(MAKE)... (cached) yes
    checking for initscr in -lncursesw... yes
    checking for stdio.h... yes
    checking for stdlib.h... yes
    checking for string.h... yes
    checking for inttypes.h... yes
    checking for stdint.h... yes
    checking for strings.h... yes
    checking for sys/stat.h... yes
    checking for sys/types.h... yes
    checking for unistd.h... yes
    checking for getopt.h... yes
    checking for locale.h... yes
    checking for ncurses.h... yes
    checking whether clang++ supports C++11 features with -std=c++11... yes
    checking that generated files are newer than configure... done
    configure: creating ./config.status
    config.status: creating Makefile
    config.status: creating doc/Makefile
    config.status: creating src/Makefile
    config.status: executing depfiles commands
    [email protected] ~/neo/neo-0.6 $ make
    Making all in doc
    make[1]: Entering directory '/home/kenny2/neo/neo-0.6/doc'
    make[1]: Nothing to be done for 'all'.
    make[1]: Leaving directory '/home/kenny2/neo/neo-0.6/doc'
    Making all in src
    make[1]: Entering directory '/home/kenny2/neo/neo-0.6/src'
    clang++ -std=c++11 -DPACKAGE_NAME=\"neo\" -DPACKAGE_TARNAME=\"neo\" -DPACKAGE_VERSION=\"0.6\" -DPACKAGE_STRING=\"neo\ 0.6\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"neo\" -DVERSION=\"0.6\" -DHAVE_LIBNCURSESW=1 -DHAVE_STDIO_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_STRINGS_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_UNISTD_H=1 -DSTDC_HEADERS=1 -DHAVE_GETOPT_H=1 -DHAVE_LOCALE_H=1 -DHAVE_NCURSES_H=1 -DHAVE_CXX11=1 -I.    -DNCURSES_WIDECHAR -std=c++11 -Os -march=native -mtune=native -DNDEBUG -fno-exceptions -ffunction-sections -fdata-sections -flto -MT cloud.o -MD -MP -MF .deps/cloud.Tpo -c -o cloud.o cloud.cpp
    cloud.cpp:852:9: error: use of undeclared identifier 'mvinnwstr'; did you mean 'mvinnstr'?
            mvinnwstr(msgChar.line, msgChar.col, wc, 1);
            ^~~~~~~~~
            mvinnstr
    /usr/include/curses.h:707:28: note: 'mvinnstr' declared here
    extern NCURSES_EXPORT(int) mvinnstr (int, int, char *, int);            /* generated */
                               ^
    cloud.cpp:852:46: error: cannot initialize a parameter of type 'char *' with an lvalue of type 'wchar_t [2]'
            mvinnwstr(msgChar.line, msgChar.col, wc, 1);
                                                 ^~
    /usr/include/curses.h:707:54: note: passing argument to parameter here
    extern NCURSES_EXPORT(int) mvinnstr (int, int, char *, int);            /* generated */
                                                         ^
    cloud.cpp:870:9: error: use of undeclared identifier 'mvadd_wch'; did you mean 'mvaddch'?
            mvadd_wch(msgChar.line, msgChar.col, &wc);
            ^~~~~~~~~
            mvaddch
    /usr/include/curses.h:691:28: note: 'mvaddch' declared here
    extern NCURSES_EXPORT(int) mvaddch (int, int, const chtype);            /* generated */
                               ^
    cloud.cpp:870:46: error: cannot initialize a parameter of type 'chtype' (aka 'unsigned int') with an rvalue of type 'cchar_t *'
            mvadd_wch(msgChar.line, msgChar.col, &wc);
                                                 ^~~
    /usr/include/curses.h:691:59: note: passing argument to parameter here
    extern NCURSES_EXPORT(int) mvaddch (int, int, const chtype);            /* generated */
                                                              ^
    4 errors generated.
    make[1]: *** [Makefile:374: cloud.o] Error 1
    make[1]: Leaving directory '/home/kenny2/neo/neo-0.6/src'
    make: *** [Makefile:336: all-recursive] Error 1
    

    EDIT: fixed formatting and added info on my second gentoo machine

    bug 
    opened by byeCl0ud 21
  • issue with the lines appearing in a instant no matter the speed

    issue with the lines appearing in a instant no matter the speed

    hey it is me again! this time after compiling succesfully with the help of st3w the program work as intended...but the lines are not drawed one characters at the time, it's just : one line, one line, etc the speed argument won't change anything, well yes actually it change the speed at which the lines pop but not the drawing speed in itself (the fps option also dosen't do anything)

    bug 
    opened by Reaster0 9
  • configure error

    configure error

    On M1 Mac, run ./configure will get this error:

    ./configure: line 3850: syntax error near unexpected token noext,' ./configure: line 3850:AX_CXX_COMPILE_STDCXX_11(noext, mandatory)'

    uname -a
    Darwin 21.2.0 Darwin Kernel Version 21.2.0: Wed Oct 20 00:23:21 PDT 2021; root:xnu-8019.60.40.0.1~26/RELEASE_ARM64_T8101 arm64

    opened by i3d 8
  • Slowdown in fullscreen macos

    Slowdown in fullscreen macos

    aaaand when a issue is closed, another is open

    so i bring you once again a new bug

    when i lauch neo and i put the cli in fullscreen (or in a big window), there is a slowdown that happen ~15s after the launch of the program, like it has really some difficulties to draw characters and it goes worse and worse

    i notice that the program take 100% of the global cpu capacity, so it's clearly a performance issue, do you think it's a ncurses bottleneck or there is a small recursive function that goes wild somewhere and that's why the performances and worse and worse? (i don't let the program run for too long in case it may freeze my pc but clearly it make some part of my os laggy)

    opened by Reaster0 5
  • [Bug] minor errors

    [Bug] minor errors

    I am in the process of packaging for debian. I came across tho following errors:

    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:194]
    N: 
    N:   This manual page uses the \' groff sequence. Usually, the intent is to
    N:   generate an apostrophe, but that sequence actually renders as an acute
    N:   accent.
    N:   
    N:   For an apostrophe or a single closing quote, use plain '. For single
    N:   opening quote, i.e. a straight downward line ' like the one used in shell
    N:   commands, use '\(aq'.
    N:   
    N:   In case this tag was emitted for the second half of a '\\' sequence, this
    N:   is indeed no acute accent, but still wrong: A literal backslash should be
    N:   written \e in the groff format, i.e. a '\\' sequence needs to be changed
    N:   to '\e' which also won't trigger this tag.
    N: 
    N:   Please refer to Bug#554897, Bug#507673, and Bug#966803 for details.
    N: 
    N:   Visibility: info
    N:   Show-Always: no
    N:   Check: documentation/manual
    N:   Renamed from: acute-accent-in-manpage
    N: 
    N:
    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:196]
    N:
    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:198]
    N:
    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:200]
    N:
    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:202]
    N:
    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:204]
    N:
    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:206]
    N:
    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:208]
    N:
    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:210]
    N:
    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:212]
    N:
    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:214]
    N:
    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:216]
    N:
    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:218]
    N:
    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:220]
    N:
    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:222]
    N:
    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:224]
    N:
    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:226]
    N:
    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:228]
    N:
    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:230]
    N:
    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:232]
    N:
    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:234]
    N:
    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:236]
    N:
    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:238]
    N:
    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:240]
    N:
    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:242]
    N:
    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:244]
    N:
    I: neo-cli: acute-accent-in-manual-page [usr/share/man/man6/neo.6.gz:246]
    N:
    I: neo-cli: typo-in-manual-page compatability compatibility [usr/share/man/man6/neo.6.gz:266]
    N: 
    N:   Lintian found a spelling error in a manual page. Lintian has a list of
    N:   common misspellings that it looks for. It does not have a dictionary like
    N:   a spelling checker does.
    N:   
    N:   If the string containing the spelling error is translated with the help of
    N:   gettext (with the help of po4a, for example) or a similar tool, please fix
    N:   the error in the translations as well as the English text to avoid making
    N:   the translations fuzzy. With gettext, for example, this means you should
    N:   also fix the spelling mistake in the corresponding msgids in the *.po
    N:   files.
    N: 
    N:   Visibility: info
    N:   Show-Always: no
    N:   Check: documentation/manual
    N:   Renamed from: spelling-error-in-manpage
    

    This is nothing major, just thought I'd let you know.

    Cheers

    opened by werdahias 3
  • Compilation fail in macos monterey

    Compilation fail in macos monterey

    hey all! when i try to compile the tarball on macos monterey (arm) i get this undeclared identifier error, i suppose that it's just some type of variable to change for the macos compatibility

    cloud.cpp:852:9: error: use of undeclared identifier 'mvinnwstr'; did you mean 'mvinnstr'?
            mvinnwstr(msgChar.line, msgChar.col, wc, 1);
            ^~~~~~~~~
            mvinnstr
    /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/curses.h:621:28: note: 'mvinnstr' declared here
    extern NCURSES_EXPORT(int) mvinnstr (int, int, char *, int);            /* generated */
                               ^
    cloud.cpp:852:46: error: cannot initialize a parameter of type 'char *' with an lvalue of type 'wchar_t [2]'
            mvinnwstr(msgChar.line, msgChar.col, wc, 1);
                                                 ^~
    /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/curses.h:621:54: note: passing argument to parameter here
    extern NCURSES_EXPORT(int) mvinnstr (int, int, char *, int);            /* generated */
                                                         ^
    cloud.cpp:864:9: error: use of undeclared identifier 'cchar_t'; did you mean 'wchar_t'?
            cchar_t wc = {};
            ^~~~~~~
            wchar_t
    cloud.cpp:865:11: error: member reference base type 'wchar_t' is not a structure or union
            wc.attr = attr;
            ~~^~~~~
    cloud.cpp:866:11: error: member reference base type 'wchar_t' is not a structure or union
            wc.chars[0] = msgChar.val;
            ~~^~~~~~
    cloud.cpp:870:9: error: use of undeclared identifier 'mvadd_wch'; did you mean 'mvaddch'?
            mvadd_wch(msgChar.line, msgChar.col, &wc);
            ^~~~~~~~~
            mvaddch
    /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/curses.h:605:28: note: 'mvaddch' declared here
    extern NCURSES_EXPORT(int) mvaddch (int, int, const chtype);            /* generated */
                               ^
    cloud.cpp:870:46: error: cannot initialize a parameter of type 'chtype' (aka 'unsigned int') with an rvalue of type 'wchar_t *'
            mvadd_wch(msgChar.line, msgChar.col, &wc);
                                                 ^~~
    /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/curses.h:605:59: note: passing argument to parameter here
    extern NCURSES_EXPORT(int) mvaddch (int, int, const chtype);            /* generated */
                                                              ^
    

    and when i try to compile from the github version i get with it this one :

    droplet.cpp:144:9: error: use of undeclared identifier 'cchar_t'; did you mean 'wchar_t'?
            cchar_t wc = {};
            ^~~~~~~
            wchar_t
    droplet.cpp:145:11: error: member reference base type 'wchar_t' is not a structure or union
            wc.attr = attr2;
            ~~^~~~~
    droplet.cpp:146:11: error: member reference base type 'wchar_t' is not a structure or union
            wc.chars[0] = val;
            ~~^~~~~~
    droplet.cpp:150:13: error: use of undeclared identifier 'mvadd_wch'; did you mean 'mvaddch'?
                mvadd_wch(line, _boundCol, &wc);
                ^~~~~~~~~
                mvaddch
    /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/curses.h:605:28: note: 'mvaddch' declared here
    extern NCURSES_EXPORT(int) mvaddch (int, int, const chtype);            /* generated */
                               ^
    droplet.cpp:150:40: error: cannot initialize a parameter of type 'chtype' (aka 'unsigned int') with an rvalue of type 'wchar_t *'
                mvadd_wch(line, _boundCol, &wc);
                                           ^~~
    /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/curses.h:605:59: note: passing argument to parameter here
    extern NCURSES_EXPORT(int) mvaddch (int, int, const chtype);            /* generated */
                                                              ^
    droplet.cpp:153:13: error: use of undeclared identifier 'mvadd_wch'; did you mean 'mvaddch'?
                mvadd_wch(line, _boundCol, &wc);
                ^~~~~~~~~
                mvaddch
    /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/curses.h:605:28: note: 'mvaddch' declared here
    extern NCURSES_EXPORT(int) mvaddch (int, int, const chtype);            /* generated */
                               ^
    droplet.cpp:153:40: error: cannot initialize a parameter of type 'chtype' (aka 'unsigned int') with an rvalue of type 'wchar_t *'
                mvadd_wch(line, _boundCol, &wc);
                                           ^~~
    /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/curses.h:605:59: note: passing argument to parameter here
    extern NCURSES_EXPORT(int) mvaddch (int, int, const chtype);            /* generated */
                                                              ^
    

    thanks for your work ;)

    opened by Reaster0 3
  • Make fails on MacOS Big Sur

    Make fails on MacOS Big Sur

    I have the latest version of command line tools available to my OS verison.

     ~/Scr/neo-0.6  make                                                                                                                     10.3s  Tue Dec 21 02:03:51 2021
    Making all in doc
    make[1]: Nothing to be done for `all'.
    Making all in src
    g++ -std=c++11 -DPACKAGE_NAME=\"neo\" -DPACKAGE_TARNAME=\"neo\" -DPACKAGE_VERSION=\"0.6\" -DPACKAGE_STRING=\"neo\ 0.6\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"neo\" -DVERSION=\"0.6\" -DHAVE_LIBNCURSESW=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_GETOPT_H=1 -DHAVE_LOCALE_H=1 -DHAVE_NCURSES_H=1 -DHAVE_CXX11=1 -I.   -I/usr/local/opt/ncurses/include -DNCURSES_WIDECHAR -std=c++11 -g -O2 -MT cloud.o -MD -MP -MF .deps/cloud.Tpo -c -o cloud.o cloud.cpp
    In file included from cloud.cpp:20:
    ./cloud.h:167:18: error: chosen constructor is explicit in copy-initialization
        mt19937 mt = {};
                     ^~
    /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/random:2110:14: note: explicit constructor declared here
        explicit mersenne_twister_engine(result_type __sd = default_seed)
                 ^
    In file included from cloud.cpp:20:
    ./cloud.h:168:52: error: chosen constructor is explicit in copy-initialization
        uniform_int_distribution<int> _randColorPair = {};
                                                       ^~
    /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/algorithm:3008:14: note: explicit constructor declared here
        explicit uniform_int_distribution(result_type __a = 0,
                 ^
    In file included from cloud.cpp:20:
    ./cloud.h:169:52: error: chosen constructor is explicit in copy-initialization
        uniform_real_distribution<float> _randChance = {};
                                                       ^~
    /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/random:3730:14: note: explicit constructor declared here
        explicit uniform_real_distribution(result_type __a = 0, result_type __b = 1)
                 ^
    In file included from cloud.cpp:20:
    ./cloud.h:170:52: error: chosen constructor is explicit in copy-initialization
        uniform_int_distribution<uint16_t> _randLine = {};
                                                       ^~
    /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/algorithm:3008:14: note: explicit constructor declared here
        explicit uniform_int_distribution(result_type __a = 0,
                 ^
    In file included from cloud.cpp:20:
    ./cloud.h:171:53: error: chosen constructor is explicit in copy-initialization
        uniform_int_distribution<uint16_t> _randCpIdx = {};
                                                        ^~
    /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/algorithm:3008:14: note: explicit constructor declared here
        explicit uniform_int_distribution(result_type __a = 0,
                 ^
    In file included from cloud.cpp:20:
    ./cloud.h:172:51: error: chosen constructor is explicit in copy-initialization
        uniform_int_distribution<uint16_t> _randLen = {};
                                                      ^~
    /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/algorithm:3008:14: note: explicit constructor declared here
        explicit uniform_int_distribution(result_type __a = 0,
                 ^
    In file included from cloud.cpp:20:
    ./cloud.h:173:51: error: chosen constructor is explicit in copy-initialization
        uniform_int_distribution<uint16_t> _randCol = {};
                                                      ^~
    /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/algorithm:3008:14: note: explicit constructor declared here
        explicit uniform_int_distribution(result_type __a = 0,
                 ^
    In file included from cloud.cpp:20:
    ./cloud.h:174:56: error: chosen constructor is explicit in copy-initialization
        uniform_int_distribution<uint16_t> _randGlitchMs = {};
                                                           ^~
    /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/algorithm:3008:14: note: explicit constructor declared here
        explicit uniform_int_distribution(result_type __a = 0,
                 ^
    In file included from cloud.cpp:20:
    ./cloud.h:175:56: error: chosen constructor is explicit in copy-initialization
        uniform_int_distribution<uint16_t> _randLingerMs = {};
                                                           ^~
    /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/algorithm:3008:14: note: explicit constructor declared here
        explicit uniform_int_distribution(result_type __a = 0,
                 ^
    In file included from cloud.cpp:20:
    ./cloud.h:176:53: error: chosen constructor is explicit in copy-initialization
        uniform_int_distribution<size_t> _randCharIdx = {};
                                                        ^~
    /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/algorithm:3008:14: note: explicit constructor declared here
        explicit uniform_int_distribution(result_type __a = 0,
                 ^
    In file included from cloud.cpp:20:
    ./cloud.h:177:51: error: chosen constructor is explicit in copy-initialization
        uniform_real_distribution<float> _randSpeed = {};
                                                      ^~
    /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/random:3730:14: note: explicit constructor declared here
        explicit uniform_real_distribution(result_type __a = 0, result_type __b = 1)
                 ^
    11 errors generated.
    make[1]: *** [cloud.o] Error 1
    make: *** [all-recursive] Error 1
     2  ~/Scr/neo-0.6 
    
    opened by gitscosh 2
  • Integration with xscreensaver

    Integration with xscreensaver

    It will be SUPER cool to integrate neo with xscreensaver! Is there any possibility to achieve this? Its already has gl-matix - but neo feels way more "natural". Thanks!

    opened by shellshock1953 2
  • Add instructions for macOS compilation (Intel and Apple Silicon)

    Add instructions for macOS compilation (Intel and Apple Silicon)

    Confirmed this compiles on Apple Silicon with brew ncurses

    % uname -a
    21.2.0 Darwin Kernel Version 21.2.0: Sun Nov 28 20:29:10 PST 2021; root:xnu-8019.61.5~1/RELEASE_ARM64_T8101 arm64
    % brew info ncurses
    ncurses: stable 6.3 (bottled) [keg-only]
    
    opened by rosepomykala 2
  • glitch percentage option value is not a percentage

    glitch percentage option value is not a percentage

    In the options description using neo -h

    -G, --glitchpct=NUM    set the percentage of screen chars that glitch
    

    If I'm reading this correctly then if I use -G 1 this should be "1% of the screen glitches" but it's actually 100% of the screen. I have to use -G 0.01 to get 1% screen glitch.

    Awesome project btw :)

    opened by FoxxMD 2
  • Debian package

    Debian package

    I have built a debian package of neo which is working so far. Maybe if the package gets approved it could be merged into debian unstable and from there to ubuntu. My relevant files: files.zip

    opened by werdahias 1
  • Wrong runes used?

    Wrong runes used?

    FYI: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1023575 Also I noticed that when using the --charset=runic option some symbols don't render correctly:

    screenshot

    opened by werdahias 0
  • feature request: mode where the whole columns are moving

    feature request: mode where the whole columns are moving

    Hey.

    Would be nice if there was a mode in which the whole columns are moving (possibly even with another modifier that makes them move in different speeds), like in here (though this is not so nicely made): https://www.youtube.com/watch?v=rzA8cZyisf8&t=312s

    Thanks :-)

    opened by philcerf 0
  • [Feature request] Matrix sounds

    [Feature request] Matrix sounds

    I don't know if this would be possible/feasible (or conflicted by copyright) but it would be really awesome to have an option to toggle the digital rain sound effect from The Matrix.

    opened by werdahias 0
  • MSYS2 compilation

    MSYS2 compilation

    Hey there, just wanted to let you know that you can indeed run Neo on native Windows with MSYS2 by adding #define _GNU_SOURCE to src/neo.cpp. I got this error first:

    neo.cpp: In function ‘void ParseArgs(int, char**, Cloud*, double*, bool*)’:
    neo.cpp:515:17: error: ‘strcasecmp’ was not declared in this scope; did you mean ‘strncmp’?
      515 |             if (strcasecmp(optarg, "ascii") == 0) {
          |                 ^~~~~~~~~~
          |                 strncmp
    neo.cpp:575:17: error: ‘strcasecmp’ was not declared in this scope; did you mean ‘strncmp’?
      575 |             if (strcasecmp(optarg, "green") == 0) {
          |                 ^~~~~~~~~~
          |                 strncmp
    neo.cpp: In function ‘int main(int, char**)’:
    neo.cpp:827:16: error: ‘strcasestr’ was not declared in this scope; did you mean ‘strstr’?
      827 |     if (loc && strcasestr(loc, "UTF") != nullptr)
          |                ^~~~~~~~~~
          |                strstr
    make[1]: *** [Makefile:371: neo.o] Error 1
    

    But after googling a bit, I came across this: https://github.com/jarun/nnn/issues/784, and I just tried putting #define _GNU_SOURCE into the source file. Maybe including something like https://github.com/jarun/nnn/commit/d38f4b13d422963b06b4fb92df771aab154539e0 could fix this properly, but I don't know exactly if/what that would break. You can add to the readme that it is possible that way :)

    image

    opened by lxhom 0
  • Neo 6.1 using 100% of a CPU core on Alacritty

    Neo 6.1 using 100% of a CPU core on Alacritty

    This pegs one of my CPU cores when I run it in Alacritty 0.10.1.

    Void LInux

    Linux m2 5.19.13_1 #1 SMP PREEMPT_DYNAMIC Wed Oct 5 02:41:13 UTC 2022 x86_64 GNU/Linux

    I've got a Quadro T2000 onboard too

    opened by danjenson 1
Releases(v0.6.1)
  • v0.6.1(Feb 22, 2022)

    v0.6.1 mainly fixes build and runtime issues in v0.6, the first public release.

    If you don't know what to do with the .tar.gz file, check out the "Building and Installing" section of README.md.

    Release Notes:

    • Various build fixes for Gentoo, macOS, and FreeBSD
    • Fix a bug where droplets were not drawn correctly
    • Make --glitchpct, --rippct, and --shortpct take values between 0 and 100 inclusive (used to be 0 and 1)
    • Add "braille" and "runic" charsets
    Source code(tar.gz)
    Source code(zip)
    neo-0.6.1.tar.gz(130.97 KB)
  • v0.6(Dec 14, 2021)

    First tarball release of neo on GitHub!

    If you don't know what to do with the .tar.gz file, check out the "Building and Installing" section of README.md.

    Release Notes:

    • Add 16 color support
    • Add the --colormode option
    • Remove the --ascii, --16, --256, --mono, and -t/--truecolor options
    • Improve the color file parsing and add versioning
    • Improve Unicode detection
    • Add the following parameters for --charset: ascii, extended, dec, and decimal
    Source code(tar.gz)
    Source code(zip)
    neo-0.6.tar.gz(137.75 KB)
Owner
Stew Reive
Stew Reive
(R) Efficient methods and operators for the sparse matrix classes in 'Matrix' (esp. CSR format or "RsparseMatrix")

MatrixExtra MatrixExtra is an R package which extends the sparse matrix and sparse vector types in the Matrix package, particularly the CSR or Rsparse

null 15 Aug 29, 2022
A modern port of Turbo Vision 2.0, the classical framework for text-based user interfaces. Now cross-platform and with Unicode support.

Turbo Vision A modern port of Turbo Vision 2.0, the classical framework for text-based user interfaces. Now cross-platform and with Unicode support. I

null 1.4k Nov 30, 2022
matrix-effect This is a dumb matrix effect type thing

matrix-effect This is a dumb matrix effect type thing. It's only like one source file which should compile... Define __POSIX or __WIN though, for posi

null 42 Sep 23, 2022
An FPGA accelerator for general-purpose Sparse-Matrix Dense-Matrix Multiplication (SpMM).

Sextans Sextans is an accelerator for general-purpose Sparse-Matrix Dense-Matrix Multiplication (SpMM). One exciting feature is that we only need to p

linghao.song 29 Nov 30, 2022
very simple matrix library, int addition to a recreation of DCM attitude estimation in the form of matrix of C.

matrix very simple matrix library, int addition to a recreation of DCM attitude estimation in the form of matrix of C. the lib include matrix inversio

null 4 Mar 21, 2022
This project simulates the functionality of the Unix Bash shell.

Minishell This project simulates the functionality of the unix Bash shell. Description The project aim was to recreate the functionality of the unix B

Andreas Gebert 0 Jan 6, 2022
Header-only library providing unicode aware string support for C++

CsString Introduction CsString is a standalone library which provides unicode aware string support. The CsBasicString class is a templated class which

CopperSpice 92 Aug 20, 2022
🎨 HiColor is a program for converting images to 15- and 16-bit RGB color

HiColor is a program for converting images to 15- and 16-bit RGB color, the color depth of old display modes known as “high color”. In 15-bit mode images have 5 bits for each of red, green, and blue, and the last bit is reserved. In 16-bit mode green, the color the human eye is generally most sensitive to, gets 6 bits.

D. Bohdan 181 Nov 25, 2022
A video input (V4L2) to NDI converter that works with Raspberry Pi (32-bit and 64-bit), and Intel/AMD CPUs

V4L2 to NDI V4L2 to NDI is an application that connects to attached V4L2 devices and encodes the video signal into NDI It uses the NDI library, allowi

Luke Plassman 49 Nov 12, 2022
libu8ident - Follow unicode security guidelines for identifiers

libu8ident - Follow unicode security guidelines for identifiers without adding the full Unicode database. This library does the unicode identifier sec

Reini Urban 7 Sep 27, 2022
Simdutf - Unicode routines (UTF8, UTF16): billions of characters per second.

simdutf: Unicode validation and transcoding at billions of characters per second Most modern software relies on the Unicode standard. In memory, Unico

simdutf: Unicode at gigabytes per second 493 Nov 29, 2022
Text - A spicy text library for C++ that has the explicit goal of enabling the entire ecosystem to share in proper forward progress towards a bright Unicode future.

ztd.text Because if text works well in two of the most popular systems programming languages, the entire world over can start to benefit properly. Thi

Shepherd's Oasis 225 Nov 26, 2022
Library with useful output stream tools like: color and style manipulators, progress bars and terminal graphics.

Library with useful output stream tools like: color and style manipulators, progress bars and terminal graphics Table of contents Introduction Documen

Gianluca Bianco 161 Nov 23, 2022
Game Boy and Game Boy Color Emulator

SkyBoy A simple game boy emulator written to keep my skills sharp. The majority of the code was written in a 7 day sprint. It supports most common Gam

Sky 286 Nov 25, 2022
Classic iPod mod with Raspberry Pi Zero and color screen

ipodrpi Classic iPod mod with Raspberry Pi Zero and color screen. Suitable for OSMC and plain Raspbian install. Install OSMC: Burn SD card with Raspbe

null 26 Nov 25, 2022
Convenient, high-performance RGB color and position control for console output

Oof (omnipotent output friend) It's common for C++ programs to write output to the console. But consoles are far more capable than what they are usual

Sebastian Werhausen 770 Nov 26, 2022
The command line app automatically determines your location using GeoIP and adjusts the color temperature depending on time

go-sct A color temperature setting library and CLI that operates in a similar way to f.lux and Redshift. The command line app automatically determines

Florine Sueur 1.1k Jan 25, 2022
And ESP32 powered VU matrix using the INMP441 I2S microphone

ESP32-INMP441-Matrix-VU This is the repository for a 3D-printed, (optionally) battery-powered, WS2812B LED matrix that produces pretty patterns using

null 54 Nov 23, 2022
Simplified design of an analog keypad matrix interface and demo thereof

Analog Keypad Interface In pin-restricted microcontroller designs it is common to use analog pins and sets of resistors to encode button switch inputs

null 14 Feb 6, 2022