Coder Social home page Coder Social logo

perl6-readline's Introduction

Readline

Readline provides a Perl 6 interface to libreadline.

XXX This will probably be a frontend to Readline::Gnu when that's factored out. XXX For the moment keep all the code here in the Readline module.

Installation

Please make sure that libreadline is installed beforehand, the tests will fail otherwise. If libreadline is installed but the tests still fail, please note that the Perl 6 package searches a given set of directories for libreadline.{so,dynlib}.* files, otherwise it defaults to v7. If your libreadline installation isn't on any of these paths, or requires non-standard setup, please file an issue.

For those of you on Linux Debian and Linux-alike systems, you should be able to get the latest version with this CLI invocation:

	sudo apt-get install libreadline7

(I'd prefer to use LibraryCheck, but it fails inside the 'is native()' method call.)

  • Using zef (a module management tool bundled with Rakudo Star):
    zef update && zef install Readline

Or alternatively installing it from a checkout of this repo with zef:

    zef install .

Usage

See the examples/ directory in this project.

Testing

To run tests:

    prove -e perl6

Author

Jeffrey Goff, DrForr on #perl6, https://github.com/drforr/

License

Artistic License 2.0

perl6-readline's People

Contributors

chee avatar drforr avatar hoelzro avatar kaiepi avatar patch avatar samcv avatar timo avatar ugexe avatar voegelas avatar xkr47 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

perl6-readline's Issues

Failure on OS X.

With version 7.0.003 from macports on 10.12.6, I get the following errors:

===> Testing: Readline:ver<0.0.2>:auth<github:drforr>
    # Failed test 'macro-dumper lives'
    # at t/02-base.t line 18
    # Cannot locate symbol 'rl_macro_dumper' in native library 'libreadline.dylib'
    # Looks like you failed 1 test of 1
# Failed test 'dumpers'
# at t/02-base.t line 13
    # Failed test 'expand-prompt lives'
    # at t/02-base.t line 29
    # Cannot locate symbol 'rl_expand_prompt' in native library 'libreadline.dylib'
    # Failed test 'on-new-line-with-prompt lives'
    # at t/02-base.t line 31
    # Cannot locate symbol 'rl_on_new_line_with_prompt' in native library 'libreadline.dylib'
    # Failed test 'save-prompt lives'
    # at t/02-base.t line 33
    # Cannot locate symbol 'rl_save_prompt' in native librar
y 'libreadline.dylib'
    # Failed test 'restore-prompt lives'
    # at t/02-base.t line 35
    # Cannot locate symbol 'rl_restore_prompt' in native 
library 'libreadline.dylib'
    # Looks like you failed 4 tests of 5
# Failed test 'prompt'
# at t/02-base.t line 24
    # Failed test 'tilde-expand-word lives'
    # at t/02-base.t line 48
    # Cannot locate symbol 'tilde_expand_word' in native library '
libreadline.dylib'
    # Looks like you failed 1 test of 2
# Failed test 'tilde'
# at t/02-base.t line 39
    # Failed test 'reset-line-state lives'
    # at t/02-base.t line 70
    # Cannot locate symbol 'rl_reset_line_state' in native library 'libreadline.dylib'
    # Looks like you failed 1 test of 1
# Failed test 'state'
# at t/02-base.t line 68
    # Failed test 'free-undo-list lives'
    # at t/02-base.t line 81
    # Cannot locate symbol 'rl_free_undo_list' in native 
library 'libreadline.dylib'
    # Failed test 'do-undo lives'
    # at t/02-base.t line 83
    # Cannot locate symbol 'rl_do_undo' in native library 'libre
adline.dylib'
    # Failed test 'begin-undo-group lives'
    # at t/02-base.t line 85
    # Cannot locate symbol 'rl_begin_undo_group' in native library 'libreadline.dylib'
    # Failed test 'end-undo-group lives'
    # at t/02-base.t line 87
    # Cannot locate symbol 'rl_end_undo_group' in native 
library 'libreadline.dylib'
    # Looks like you failed 4 tests of 4
# Failed test 'undo'
# at t/02-base.t line 80
    # Failed test 'funmap-names lives'
    # at t/02-base.t line 99
    # Cannot locate symbol 'rl_funmap_names' in native libr
ary 'libreadline.dylib'
    # Looks like you failed 1 test of 1
# Failed test 'funmap'
# at t/02-base.t line 91
    # Failed test 'reset-screen-size lives'
    # at t/02-base.t line 110
    # Cannot locate symbol 'rl_reset_screen_size' in native library 'libreadline.dylib'
    # Looks like you failed 1 test of 2
# Failed test 'screen'
# at t/02-base.t line 103
    # Failed test 'delete-text lives'
    # at t/02-base.t line 120
    # Cannot locate symbol 'rl_delete_text' in native library 'libreadline.dylib'
    # Failed test 'copy-text lives'
    # at t/02-base.t line 124
    # Cannot locate symbol 'rl_copy_text' in native library 'libreadline.dylib'
    # Looks like you failed 2 tests of 4
# Failed test 'text'
# at t/02-base.t line 114
    # Failed test 'copy-keymap lives'
    # at t/02-base.t line 134
    # Cannot locate symbol 'rl_copy_keymap' in native library 'libreadline.dylib'
    # Failed test 'make-keymap lives'
    # at t/02-base.t line 136
    # Cannot locate symbol 'rl_make_keymap' in native library 'libreadline.dylib'
    # Failed test 'discard-keymap lives'
    # at t/02-base.t line 138
    # Cannot locate symbol 'rl_discard_keymap' in native library 'libreadline.dylib'
    # Failed test 'get-keymap-by-name lives'
    # at t/02-base.t line 145
    # Cannot locate symbol 'rl_get_keymap_by_name' in native library 'libreadline.dylib'
    # Failed test 'get-keymap-name lives'
    # at t/02-base.t line 149
    # Cannot locate symbol 'rl_get_keymap_name' in native library 'libreadline.dylib'
    # Looks like you failed 5 tests of 8
# Failed test 'keymap'
# at t/02-base.t line 128
        # Failed test 'bind-key-if-unbound-in-map lives'
        # at t/02-base.t line 167
        # Cannot locate symbol 'rl_bind_key_if_unbound_in_map' in native library 'libreadline.dylib'
        # Failed test 'bind-keyseq-in-map lives'
        # at t/02-base.t line 170
        # Cannot locate symbol 'rl_bind_keyseq_in_map' in native library 'libreadline.dylib'
        # Failed test 'macro-bind lives'
        # at t/02-base.t line 178
        # Cannot locate symbol 'rl_macro_bind' in native library 'libreadline.dylib'
        # Looks like you failed 3 tests of 4
    # Failed test 'bind keymaps'
    # at t/02-base.t line 161
    # Looks like you failed 1 test of 1
# Failed test 'bind'
# at t/02-base.t line 155
    # Failed test 'unbind-key-in-map lives'
    # at t/02-base.t line 200
    # 
Cannot locate symbol 'rl_unbind_key_in_map' in native library 'libreadline.dylib'
    # Failed test 'unbind-function-in-map lives'
    # at t/02-base.t line 202
    # Cannot locate symbol 'rl_unbind_function_in_map' in native library 'libreadline.dylib'
  
  # Looks like you failed 2 tests of 2
# Failed test 'unbind'
# at t/02-base.t line 193
    # Failed test 'history-set-history-state lives'
    # at t/02-base.t line 224
    # Cannot locate symbol 'history_set_history_state' in native library 'libreadline.dylib'
    # Failed test 'add-history-time lives'
    # at t/02-base.t line 226
    # Cannot locate symbol 'add_history_time' in native library 'libreadline.dylib'
    # Failed test 'free-history-entry lives'
    # at t/02-base.t line 230
    # Cannot locate symbol 'free_history_entry' in native library 'libreadline.dylib'
    # Failed test 'history-list lives'
    # at t/02-base.t line 250
    # Cannot locate symbol 'history_list' in native librar
y 'libreadline.dylib'
    # Failed test 'history-get-time lives'
    # at t/02-base.t line 259
    # Cannot locate symbol 'history_get_time' in native library 'libreadline.dylib'
    # Failed test 'read-history-range lives'
    # at t/02-base.t line 277
    # Cannot locate symbol 'read_history_range' in native library 'libreadline.dylib'
    # Looks like you failed 6 tests of 25
# Failed test 'history'
# at t/02-base.t line 206
    # Failed test 'push-macro-input lives'
    # at t/02-base.t line 350
    # Cannot locate symbol 'rl_push_macro_input' in na
tive library 'libreadline.dylib'
    # Failed test 'modifying lives'
    # at t/02-base.t line 352
    # Cannot locate symbol 'rl_modifying' in native library 'libreadline.dylib'
    # Failed test 'replace-line'
    # at t/02-base.t line 373
    # Cannot locate symbol 'rl_replace_line' in native library 'libreadline.dylib'
    # Failed test 'tty-set-default-bindings lives'
    # at t/02-base.t line 375
    # Cannot locate symbol 'rl_tty_set_default_bindings' in native library 'libreadline.dylib'
    # Failed test 'tty-unset-default-bindings lives'
    # at t/02-base.t line 377
    # Cannot locate symbol 'rl_tty_unset_default_bindings' in native library 'libreadline.dylib'
    # Failed test 'get-termcap lives'
    # at t/02-base.t line 379
    # Cannot locate symbol 'rl_get_termcap' in native library 'libreadline.dylib'
    # Failed test 'extend-line-buffer lives'
    # at t/02-base.t line 381
    # Cannot locate symbol 'rl_extend_line_buffer' in native library 'libreadline.dylib'
    # Failed test 'alphabetic lives'
    # at t/02-base.t line 383
    # Cannot locate symbol 'rl_alphabetic' in native library
 'libreadline.dylib'
    # Failed test 'set-paren-blink-timeout lives'
    # at t/02-base.t line 387
    # Cannot locate symbol 'rl_set_paren_blink_timeout' in native library 'libreadline.dylib'
    # Failed test 'complete-internal lives'
    # at t/02-base.t line 390
    # Cannot locate symbol 'rl_complete_internal' in native library 'libreadline.dylib'
    # Looks like you failed 10 tests of 11
# Failed test 'Miscellaneous'
# at t/02-base.t line 338
# Looks like you failed 13 tests of 17
===> Testing [FAIL]: Readline:ver<0.0.2>:auth<github:drforr>

Panda required?

Panda is listed as a requirement, but it doesn't seem to be.

Only noticeable if you're using zef to install everything.

Error installing on OS X 10.11.3

The error is Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found. Tried installing immediately on top of the newest release of Rakudo Star, since Readline was recommended at the launch of the repl.

Full log:

panda install Readline
==> Readline depends on LibraryCheck
==> Fetching LibraryCheck
==> Building LibraryCheck
==> Testing LibraryCheck
t/01-basic.t .. ok
All tests successful.
Files=1, Tests=4,  6 wallclock secs ( 0.01 usr  0.01 sys +  5.88 cusr  0.32 csys =  6.22 CPU)
Result: PASS
==> Installing LibraryCheck
==> Successfully installed LibraryCheck
==> Fetching Readline
==> Building Readline
==> Testing Readline
t/01-load.t .. ok

# Failed test 'initialize'
# at t/02-base.t line 10
# Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found

# Failed test 'macro-dumper lives'
# at t/02-base.t line 18
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found
    # Looks like you failed 1 test of 1

# Failed test 'dumpers'
# at t/02-base.t line 13

# Failed test 'set-prompt lives'
# at t/02-base.t line 27
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found

# Failed test 'expand-prompt lives'
# at t/02-base.t line 29
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found

# Failed test 'on-new-line-with-prompt lives'
# at t/02-base.t line 31
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found

# Failed test 'save-prompt lives'
# at t/02-base.t line 33
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found

# Failed test 'restore-prompt lives'
# at t/02-base.t line 35
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found
    # Looks like you failed 5 tests of 5

# Failed test 'prompt'
# at t/02-base.t line 24

# Failed test 'tilde-expand lives'
# at t/02-base.t line 46
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found

# Failed test 'tilde-expand-word lives'
# at t/02-base.t line 48
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found
    # Looks like you failed 2 tests of 2

# Failed test 'tilde'
# at t/02-base.t line 39

# Failed test 'prep-terminal lives'
# at t/02-base.t line 58
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found

# Failed test 'deprep-terminal lives'
# at t/02-base.t line 60
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found

# Failed test 'reset-terminal'
# at t/02-base.t line 62
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found
    # Looks like you failed 3 tests of 3

# Failed test 'terminal'
# at t/02-base.t line 54

# Failed test 'reset-line-state lives'
# at t/02-base.t line 70
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found
    # Looks like you failed 1 test of 1

# Failed test 'state'
# at t/02-base.t line 68

# Failed test 'free-undo-list lives'
# at t/02-base.t line 81
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found

# Failed test 'do-undo lives'
# at t/02-base.t line 83
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found

# Failed test 'begin-undo-group lives'
# at t/02-base.t line 85
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found

# Failed test 'end-undo-group lives'
# at t/02-base.t line 87
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found
    # Looks like you failed 4 tests of 4

# Failed test 'undo'
# at t/02-base.t line 80

# Failed test 'funmap-names lives'
# at t/02-base.t line 99
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found
    # Looks like you failed 1 test of 1

# Failed test 'funmap'
# at t/02-base.t line 91

# Failed test 'set-screen-size'
# at t/02-base.t line 106
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found

# Failed test 'reset-screen-size lives'
# at t/02-base.t line 110
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found
    # Looks like you failed 2 tests of 2

# Failed test 'screen'
# at t/02-base.t line 103

# Failed test 'insert-text lives'
# at t/02-base.t line 118
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found

# Failed test 'delete-text lives'
# at t/02-base.t line 120
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found

# Failed test 'kill-text lives'
# at t/02-base.t line 122
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found

# Failed test 'copy-text lives'
# at t/02-base.t line 124
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found
    # Looks like you failed 4 tests of 4

# Failed test 'text'
# at t/02-base.t line 114

# Failed test 'make-bare-keymap lives'
# at t/02-base.t line 132
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found

# Failed test 'copy-keymap lives'
# at t/02-base.t line 134
    # Type check failed in binding $map; expected Readline::Keymap but got Any

# Failed test 'make-keymap lives'
# at t/02-base.t line 136
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found

# Failed test 'discard-keymap lives'
# at t/02-base.t line 138
    # Type check failed in binding $map; expected Readline::Keymap but got Any

# Failed test 'free-keymap lives'
# at t/02-base.t line 140
    # Type check failed in binding $map; expected Readline::Keymap but got Any

# Failed test 'get-keymap-by-name lives'
# at t/02-base.t line 142
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found

# Failed test 'get-keymap lives'
# at t/02-base.t line 144
    # Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found

# Failed test 'get-keymap-name lives'
# at t/02-base.t line 146
    # Type check failed in binding $map; expected Readline::Keymap but got Any

# Failed test 'set-keymap lives'
# at t/02-base.t line 148
    # Type check failed in binding $map; expected Readline::Keymap but got Any
    # Looks like you failed 9 tests of 9

# Failed test 'keymap'
# at t/02-base.t line 128
Cannot locate native library 'libreadline.so.6': dlopen(libreadline.so.6, 1): image not found
  in method setup at /Users/yurivish/Downloads/rakudo-star-2016.01/install/share/perl6/sources/075EFE4B4CDAAF73190194EA876F81A1F128D1A2 line 230
  in method CALL-ME at /Users/yurivish/Downloads/rakudo-star-2016.01/install/share/perl6/sources/075EFE4B4CDAAF73190194EA876F81A1F128D1A2 line 241
  in method make-bare-keymap at /Users/yurivish/.panda-work/1454915611_2/lib/Readline.pm line 1040
  in sub  at t/02-base.t line 159
  in sub subtest at /Users/yurivish/Downloads/rakudo-star-2016.01/install/share/perl6/sources/39D1BEBEB786F0DE0B82489F3F02F5C672CBA1F7 line 296
  in sub  at t/02-base.t line 158
  in sub subtest at /Users/yurivish/Downloads/rakudo-star-2016.01/install/share/perl6/sources/39D1BEBEB786F0DE0B82489F3F02F5C672CBA1F7 line 296
  in block <unit> at t/02-base.t line 152

t/02-base.t .. 
Dubious, test returned 1 (wstat 256, 0x100)
Failed 17/17 subtests 

Test Summary Report
-------------------
t/02-base.t (Wstat: 256 Tests: 11 Failed: 11)
  Failed tests:  1-11
  Non-zero exit status: 1
  Parse errors: Bad plan.  You planned 17 tests but ran 11.
Files=2, Tests=12, 18 wallclock secs ( 0.03 usr  0.01 sys + 16.77 cusr  0.51 csys = 17.32 CPU)
Result: FAIL
test stage failed for Readline: Tests failed
  in method install at /Users/yurivish/Downloads/rakudo-star-2016.01/install/share/perl6/site/sources/9036849E1656E91211D00AB4530B81D29A7D6E82 line 157
  in method resolve at /Users/yurivish/Downloads/rakudo-star-2016.01/install/share/perl6/site/sources/9036849E1656E91211D00AB4530B81D29A7D6E82 line 234
  in sub MAIN at /Users/yurivish/Downloads/rakudo-star-2016.01/install/share/perl6/site/resources/76CD539C815A33F2891D2EF3D6D96B1081567AD1 line 18
  in block <unit> at /Users/yurivish/Downloads/rakudo-star-2016.01/install/share/perl6/site/resources/76CD539C815A33F2891D2EF3D6D96B1081567AD1 line 150


Failure Summary
----------------
Readline(
    *test stage failed for Readline: Tests failed)

non-standard libreadline path in termux Android terminal emulator

I'm on an aarch64 phone running Android 10 and termux as a Linux environment.

I got rakudo+zef working a while back, but the Readline test phase fails as in #34, because on this specific system libreadline (v8) is located in

/data/data/com.termux/files/usr/lib/

That's accessible as $PREFIX/lib/, so I would suggest adding that to the original list of searched directories, i.e. in Rakudo terms, look through

%*ENV<PREFIX>/lib/

if that environment variable is set.


PS

A working solution for me, as in #34, was to symlink my actual libreadline to the so.7 file the search defaults to.

Issues installing on Slackware 14.2 x64

I get error:
===> Testing: Readline:ver<0.0.2>:auth<github:drforr> Failed test 'initialize' at t/02-base.t line 10 Cannot locate native library 'libreadline.so': /usr/lib64/libreadline.so: undefined symbol: UP
And more of them, very similar.
I check for mentioned in error file with:
$ ls -l /usr/lib64/libreadline.so lrwxrwxrwx 1 root root 16 Jan 17 2017 /usr/lib64/libreadline.so -> libreadline.so.6
So I do not know how to fix that.

Doesn't work with readline 8

This is Rakudo version 2018.12 built on MoarVM version 2018.12
implementing Perl 6.d.

Arch rolled out readline 8 yesterday. Now this happens:

Error in REPL:
I ran into a problem while trying to set up Readline: Could not instantiate role 'ReadlineBehavior'

Trying to reinstall with zef produces this error repeatedly:
Cannot locate native library 'libreadline.so.7': libreadline.so.7: cannot open shared object file: No such file or directory

Feature Request: Get current readline buffer (rl_line_buffer)

I would like a method to get the current readline buffer. This is useful when I'm creating a custom function that is bound to a key, so that I can do actions based on the previous text.

This value is stored in the rl_line_buffer global variable, so cglobal('readline', 'rl_line_buffer', Str); would work.

Test failure on Debian/unstable

Hi

Tests are failing with:

Test Summary Report
-------------------
t/02-base.t (Wstat: 0 Tests: 17 Failed: 0)
  Parse errors: Subtest 5 expected 3 but contains 2 tests
Files=1, Tests=17,  0 wallclock secs
Result: FAILED

The problematic subtest shows:

# Subtest: terminal
    ok 1 - prep-terminal lives

    ok 2 - deprep-terminal lives
    ok 3 - reset-terminal
    1..3
ok 5 - terminal

I think prove6 is tripped by the blank line.

I could not find why t/02-base.t prints this blank line on stdout.

Seen on Debian/unstable with:

$ rakudo --version
Welcome to ๐‘๐š๐ค๐ฎ๐๐จโ„ข v2021.09.
Implementing the ๐‘๐š๐ค๐ฎโ„ข programming language v6.d.
Built on MoarVM version 2021.09.

All the best

Module is broken with Readline 7.0

https://lists.gnu.org/archive/html/info-gnu/2016-09/msg00009.html
Readline 7.0 has been out almost a month, and it will be out of Arch's testing repository in a day or two.
Here is the error:

Cannot locate native library 'libreadline.so.6': libreadline.so.6: cannot open shared object file: No such file or directory
  in method setup at /home/user/rakudo/install/share/perl6/sources/24DD121B5B4774C04A7084827BFAD92199756E03 (NativeCall) line 310
  in method CALL-ME at /home/user/rakudo/install/share/perl6/sources/24DD121B5B4774C04A7084827BFAD92199756E03 (NativeCall) line 322
  in method make-bare-keymap at /home/samantha/panda/.panda-work/1479105484_2/lib/Readline.pm (Readline) line 1040
  in sub  at t/02-base.t line 162
  in sub subtest at /home/user/rakudo/install/share/perl6/sources/C712FE6969F786C9380D643DF17E85D06868219E (Test) line 364
  in sub  at t/02-base.t line 161
  in sub subtest at /home/user/rakudo/install/share/perl6/sources/C712FE6969F786C9380D643DF17E85D06868219E (Test) line 364
  in block <unit> at t/02-base.t line 155

Is it possible to have custom completions?

I'm not very familiar with Readline, but it seems that in order to define custom tab completions, one needs to assign a callback function into rl_completion_entry_function. Is this currently possible?

Failed test 'free-keymap lives'

I'm running Centos 6. I have installed the libreadline5 libs.

# ll /lib64 | grep readline
lrwxrwxrwx  1 root root   18 Apr  1 12:41 libreadline.so.5 -> libreadline.so.5.2*
-rwxr-xr-x  1 root root 256K Nov 11  2010 libreadline.so.5.2*
lrwxrwxrwx  1 root root   18 Apr  1 12:56 libreadline.so.6 -> libreadline.so.6.0*
-rwxr-xr-x. 1 root root 264K Jun 22  2012 libreadline.so.6.0*

It looks like it's still looking to version 6

# Failed test 'free-keymap lives'
# at t/02-base.t line 140
    # Cannot locate symbol 'rl_free_keymap' in native library 'libreadline.so.6'
    # Looks like you failed 1 test of 9

I tried moving libreadline6 out of /lib64 and symmlinking to libreadline5 but it gave me the same error.

After symmlink

# ll /lib64 | grep readline
lrwxrwxrwx  1 root root   18 Apr  1 12:41 libreadline.so.5 -> libreadline.so.5.2*
-rwxr-xr-x  1 root root 256K Nov 11  2010 libreadline.so.5.2*
lrwxrwxrwx  1 root root   18 Apr  1 12:52 libreadline.so.6 -> libreadline.so.5.2*
lrwxrwxrwx  1 root root   16 Apr  1 12:52 libreadline.so.6.0 -> libreadline.so.6*

Issues installing on Ubuntu 14.04.4 x64

libreadline5 and 6 are installed... This is a DigitalOcean instance (if it matters)

panda install Readline
==> Fetching Readline
==> Building Readline
==> Testing Readline
t/01-load.t .. 
Dubious, test returned 1 (wstat 256, 0x100)
No subtests run 
t/02-base.t .. 
Dubious, test returned 1 (wstat 256, 0x100)
No subtests run 

Test Summary Report
-------------------
t/01-load.t (Wstat: 256 Tests: 0 Failed: 0)
  Non-zero exit status: 1
  Parse errors: No plan found in TAP output
t/02-base.t (Wstat: 256 Tests: 0 Failed: 0)
  Non-zero exit status: 1
  Parse errors: No plan found in TAP output
Files=2, Tests=0, 44 wallclock secs ( 0.04 usr  0.00 sys + 26.43 cusr  1.62 csys = 28.09 CPU)
Result: FAIL
The spawned process exited unsuccessfully (exit code: 1)
  in sub run-and-gather-output at /opt/rakudobrew/moar-nom/install/share/perl6/site/sources/24811C576EF8F85E7672B26955C802BB2FC94675 (Panda::Common) line 85
  in block  at /opt/rakudobrew/moar-nom/install/share/perl6/site/sources/48E2EB9144E069353B240AD2D147B48C65F70152 (Panda::Tester) line 22
  in sub indir at /opt/rakudobrew/moar-nom/install/share/perl6/site/sources/24811C576EF8F85E7672B26955C802BB2FC94675 (Panda::Common) line 20
  in method test at /opt/rakudobrew/moar-nom/install/share/perl6/site/sources/48E2EB9144E069353B240AD2D147B48C65F70152 (Panda::Tester) line 5
  in method install at /opt/rakudobrew/moar-nom/install/share/perl6/site/sources/582CB7486602954A4601BDCE5A0EAC54B05DA58A (Panda) line 156
  in method resolve at /opt/rakudobrew/moar-nom/install/share/perl6/site/sources/582CB7486602954A4601BDCE5A0EAC54B05DA58A (Panda) line 234
  in sub MAIN at /opt/rakudobrew/moar-nom/install/share/perl6/site/resources/E0D978079BB5081DE986D058BB8AB08252F05CC8 line 18
  in block <unit> at /opt/rakudobrew/moar-nom/install/share/perl6/site/resources/E0D978079BB5081DE986D058BB8AB08252F05CC8 line 151

Readline no longer loads the shared library under 64-bit Slackware Linux 14.1

Having the hard-coded library version built in to newer versions caused NativeCall to fail while testing:

==> Testing Readline
t/01-load.t .. ok

# Failed test 'initialize'
# at t/02-base.t line 10
# Cannot locate native library 'libreadline.so.6': libreadline.so.6: cannot open shared object file: No     such file or directory

    # Failed test 'macro-dumper lives'
    # at t/02-base.t line 18
    # Cannot locate native library 'libreadline.so.6': libreadline.so.6: cannot open shared object file: No such file or directory
    # Looks like you failed 1 test of 1

# Failed test 'dumpers'
# at t/02-base.t line 13

This was because my system had only libreadline.so.5 installed.

However, after patching the module to attempt loading v5 instead of v6 of the library, it still failed to load do to undefined symbols. The same occurs after building and installing gnu libreadline.so.6.3.

==> Testing Readline
t/01-load.t .. ok

# Failed test 'initialize'
# at t/02-base.t line 10
# Cannot locate native library 'libreadline.so.6': /usr/lib64/libreadline.so.6: undefined symbol: UP

    # Failed test 'macro-dumper lives'
    # at t/02-base.t line 18
    # Cannot locate native library 'libreadline.so.6': /usr/lib64/libreadline.so.6: undefined symbol: UP
    # Looks like you failed 1 test of 1

# Failed test 'dumpers'
# at t/02-base.t line 13

The following symbols are undefined in both library versions:

doug@ender:~/test$ objdump -T /usr/lib64/libreadline.so.6 | grep -P '\b[A-Z][A-Z]$'
0000000000000000      D  *UND*  0000000000000000              UP
0000000000000000      D  *UND*  0000000000000000              PC
0000000000000000      D  *UND*  0000000000000000              BC

Yeah, an old system, but ...

$ uname -a
Linux ender 3.10.17 #2 SMP Wed Oct 23 16:34:38 CDT 2013 x86_64 Intel(R) Pentium(R) D CPU 3.00GHz GenuineIntel GNU/Linux

Unhandled exception: New type QAST::Var+

perl6-readline-0.1.5/t/
perl6-readline-0.1.5/t/01-load.t
perl6-readline-0.1.5/t/02-base.t
perl6-readline-0.1.5/xt/
perl6-readline-0.1.5/xt/meta_info.t
Unhandled exception: New type QAST::Var+{QAST::SpecialArg} for QAST::Var is not a mixin type
at gen/moar/stage2/nqpmo.nqp:1396 (/usr/share/nqp/lib/nqpmo.moarvm:mixin)
from gen/moar/stage2/QASTNode.nqp:164 (/usr/share/nqp/lib/QASTNode.moarvm:named)
from gen/moar/stage2/QASTNode.nqp:140 (/usr/share/nqp/lib/QASTNode.moarvm:set)
from gen/moar/stage2/QASTNode.nqp:586 (/usr/share/nqp/lib/QASTNode.moarvm:new)
from src/Perl6/World.nqp:3223 (/usr/share/nqp/lib/Perl6/World.moarvm:)
from src/Perl6/World.nqp:182 (/usr/share/nqp/lib/Perl6/World.moarvm:)
from src/Perl6/World.nqp:1 (/usr/share/nqp/lib/Perl6/World.moarvm:)
from :1 (/usr/share/nqp/lib/Perl6/World.moarvm:)
from src/vm/moar/ModuleLoader.nqp:47 (/usr/share/nqp/lib/ModuleLoader.moarvm:)
from src/vm/moar/ModuleLoader.nqp:40 (/usr/share/nqp/lib/ModuleLoader.moarvm:load_module)
from :1 (/usr/share/nqp/lib/Perl6/Grammar.moarvm:<dependencies+deserialize>)
from src/vm/moar/ModuleLoader.nqp:47 (/usr/share/nqp/lib/ModuleLoader.moarvm:)
from src/vm/moar/ModuleLoader.nqp:40 (/usr/share/nqp/lib/ModuleLoader.moarvm:load_module)
from :1 (/usr/share/perl6/runtime/perl6.moarvm:<dependencies+deserialize>)
Total build time for the package perl6-Readline : 1.04 Sec

Error when installing

This may be due to recent NC work (from what I'm told on #perl6).

===SORRY!=== Error while compiling /home/john/.panda-work/1451502005_1/lib/Readline.pm
In 'remove_history' routine declaration - Not an accepted NativeCall type for parameter [1]  : Int
-->For Numerical type, use the appropriate int32/int64/num64...
at /home/john/.panda-work/1451502005_1/lib/Readline.pm:769

Full error text at https://gist.github.com/uvtc/03304823f8d03b3931f2 .

Install failure on OpenBSD

There are a couple problems with getting this to install on OpenBSD:

  • symbols from ncurses need to be loaded before symbols from readline can be used
  • some of the symbols the library uses don't exist in the default readline library, but do in ereadline (the readline library installed with pkg or from ports)

I made a gist with the default test output, test output when loading ncurses symbols, test output when loading ncurses symbols and using ereadline, a diff of the changes I made to get the tests to pass, and the output of nm -g for the default readline library, in case they help.

Fails to install on Ubuntu 18.04 amd64 with libreadline5 and 7

Installation fails with libreadline5 and 7. This ticket may be related to #12, but it doesn't pick libreadline5 either.

The installation seems to be looking for 'libreadline.so', while this system has:

$ dpkg -S libreadline.so*
libreadline7:amd64: /lib/x86_64-linux-gnu/libreadline.so.7
libreadline5:amd64: /lib/x86_64-linux-gnu/libreadline.so.5
libreadline7:amd64: /lib/x86_64-linux-gnu/libreadline.so.7.0
libreadline5:amd64: /lib/x86_64-linux-gnu/libreadline.so.5.2

Full output:

$ sudo apt-get install libreadline5
[...]
$ zef install Readline
===> Searching for: Readline
===> Searching for missing dependencies: LibraryCheck
===> Testing: LibraryCheck:ver<0.0.6>:auth<github:jonathanstowe>
===> Testing [OK] for LibraryCheck:ver<0.0.6>:auth<github:jonathanstowe>
===> Testing: Readline:ver<0.0.2>:auth<github:drforr>
# Failed test 'initialize'
# at t/02-base.t line 10
# Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'macro-dumper lives'
    # at t/02-base.t line 18
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Looks like you failed 1 test of 1
# Failed test 'dumpers'
# at t/02-base.t line 13
    # Failed test 'set-prompt lives'
    # at t/02-base.t line 27
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'expand-prompt lives'
    # at t/02-base.t line 29
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'on-new-line-with-prompt lives'
    # at t/02-base.t line 31
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'save-prompt lives'
    # at t/02-base.t line 33
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'restore-prompt lives'
    # at t/02-base.t line 35
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Looks like you failed 5 tests of 5
# Failed test 'prompt'
# at t/02-base.t line 24
    # Failed test 'tilde-expand lives'
    # at t/02-base.t line 46
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'tilde-expand-word lives'
    # at t/02-base.t line 48
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Looks like you failed 2 tests of 2
# Failed test 'tilde'
# at t/02-base.t line 39
    # Failed test 'prep-terminal lives'
    # at t/02-base.t line 58
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'deprep-terminal lives'
    # at t/02-base.t line 60
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'reset-terminal'
    # at t/02-base.t line 62
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Looks like you failed 3 tests of 3
# Failed test 'terminal'
# at t/02-base.t line 54
    # Failed test 'reset-line-state lives'
    # at t/02-base.t line 70
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Looks like you failed 1 test of 1
# Failed test 'state'
# at t/02-base.t line 68
    # Failed test 'free-undo-list lives'
    # at t/02-base.t line 81
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'do-undo lives'
    # at t/02-base.t line 83
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'begin-undo-group lives'
    # at t/02-base.t line 85
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'end-undo-group lives'
    # at t/02-base.t line 87
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Looks like you failed 4 tests of 4
# Failed test 'undo'
# at t/02-base.t line 80
    # Failed test 'funmap-names lives'
    # at t/02-base.t line 99
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Looks like you failed 1 test of 1
# Failed test 'funmap'
# at t/02-base.t line 91
    # Failed test 'set-screen-size'
    # at t/02-base.t line 106
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'reset-screen-size lives'
    # at t/02-base.t line 110
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Looks like you failed 2 tests of 2
# Failed test 'screen'
# at t/02-base.t line 103
    # Failed test 'insert-text lives'
    # at t/02-base.t line 118
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'delete-text lives'
    # at t/02-base.t line 120
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'kill-text lives'
    # at t/02-base.t line 122
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'copy-text lives'
    # at t/02-base.t line 124
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Looks like you failed 4 tests of 4
# Failed test 'text'
# at t/02-base.t line 114
    # Failed test 'make-bare-keymap lives'
    # at t/02-base.t line 132
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'copy-keymap lives'
    # at t/02-base.t line 134
    # Type check failed in binding to parameter '$map'; expected Readline::Keymap but got Any (Any)
    # Failed test 'make-keymap lives'
    # at t/02-base.t line 136
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'discard-keymap lives'
    # at t/02-base.t line 138
    # Type check failed in binding to parameter '$map'; expected Readline::Keymap but got Any (Any)
    # Failed test 'get-keymap-by-name lives'
    # at t/02-base.t line 145
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'get-keymap lives'
    # at t/02-base.t line 147
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'get-keymap-name lives'
    # at t/02-base.t line 149
    # Type check failed in binding to parameter '$map'; expected Readline::Keymap but got Any (Any)
    # Failed test 'set-keymap lives'
    # at t/02-base.t line 151
    # Type check failed in binding to parameter '$map'; expected Readline::Keymap but got Any (Any)
    # Looks like you failed 8 tests of 8
# Failed test 'keymap'
# at t/02-base.t line 128
Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
  in method setup at /opt/rakudo-pkg/share/perl6/sources/24DD121B5B4774C04A7084827BFAD92199756E03 (NativeCall) line 283
  in method CALL-ME at /opt/rakudo-pkg/share/perl6/sources/24DD121B5B4774C04A7084827BFAD92199756E03 (NativeCall) line 570
  in method make-bare-keymap at /home/claudio/.zef/store/perl6-readline.git/e2cf431a87c36d420a3f2737b2cbc160efeb9233/lib/Readline.pm (Readline) line 1040
  in sub  at t/02-base.t line 162
  in sub subtest at /opt/rakudo-pkg/share/perl6/sources/C712FE6969F786C9380D643DF17E85D06868219E (Test) line 414
  in sub  at t/02-base.t line 161
  in sub subtest at /opt/rakudo-pkg/share/perl6/sources/C712FE6969F786C9380D643DF17E85D06868219E (Test) line 414
  in block <unit> at t/02-base.t line 155

===> Testing [FAIL]: Readline:ver<0.0.2>:auth<github:drforr>
Aborting due to test failure: Readline:ver<0.0.2>:auth<github:drforr> (use --force-test to override)
  in code  at /home/claudio/.perl6/sources/7926F4F3ED4C81AA5DA2A54C8AE1E03D03424CCE (Zef::Client) line 375
  in method test at /home/claudio/.perl6/sources/7926F4F3ED4C81AA5DA2A54C8AE1E03D03424CCE (Zef::Client) line 355
  in code  at /home/claudio/.perl6/sources/7926F4F3ED4C81AA5DA2A54C8AE1E03D03424CCE (Zef::Client) line 531
  in sub  at /home/claudio/.perl6/sources/7926F4F3ED4C81AA5DA2A54C8AE1E03D03424CCE (Zef::Client) line 528
  in method install at /home/claudio/.perl6/sources/7926F4F3ED4C81AA5DA2A54C8AE1E03D03424CCE (Zef::Client) line 623
  in sub MAIN at /home/claudio/.perl6/sources/E4784A2A0FA00D16808817186E95FE74BEF3FE2D (Zef::CLI) line 152
  in block <unit> at /home/claudio/.perl6/resources/3065D08F5332CA244672D7F8A05B603F92BB8A7D line 3
  in sub MAIN at /home/claudio/.perl6/bin/zef line 2
  in block <unit> at /home/claudio/.perl6/bin/zef line 2

$ dpkg -l libreadline*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                                           Version                      Architecture                 Description
+++-==============================================-============================-============================-==================================================================================================
un  libreadline-common                             <none>                       <none>                       (no description available)
un  libreadline4                                   <none>                       <none>                       (no description available)
ii  libreadline5:amd64                             5.2+dfsg-3build1             amd64                        GNU readline and history libraries, run-time libraries
ii  libreadline7:amd64                             7.0-3                        amd64                        GNU readline and history libraries, run-time libraries

Fails to build on M1 Macs

on M1 Macs, /usr/local is protected by SPI, so Homebrew is installed under /opt/homebrew instead. Readline.pm has a hard-coded reference to /usr/local/opt/readline, which is not there on M1s; it's /opt/homebrew/opt/readline instead. It should check to see which one exists before proceeding.

Module fails to install

Following documentation:
$ panda update && panda install Readline

throws following:
==> Fetching Readline
==> Building Readline
==> Testing Readline
t/01-load.t .. ok
Potential difficulties:
To pass an array, hash or sub to a function in Perl 6, just pass it as is.
For other uses of Perl 5's ref operator consider binding with ::= instead.
Parenthesize as (...) if you intended a capture of a single variable.
at /tmp/.panda-work/1449234898_1/t/02-base.t:43
------> my ( $offset, $p-offset ) = ( 0, \โ$src-offset );
t/02-base.t .. ok
All tests successful.
Files=2, Tests=18, 25 wallclock secs ( 0.02 usr 0.01 sys + 24.59 cusr 0.45 csys = 25.07 CPU)
Result: PASS
==> Installing Readline
Failed to copy '/tmp/.panda-work/1449234898_1/lib/Readline.pm6' to '/home/vytas-local/.rakudobrew/moar-nom/install/share/perl6/site/sources/97DBD5857C83EDCCEE44FF945B581C15DAB698C3': Failed to copy file: no such file or directory
in any at /home/vytas-local/.rakudobrew/moar-nom/install/share/perl6/runtime/CORE.setting.moarvm:1
in block at /home/vytas-local/.rakudobrew/moar-nom/install/share/perl6/site/sources/3803F7FE5BF2A5B7D65A002AAFAB1CAE3F4F3E19:54
in sub indir at /home/vytas-local/.rakudobrew/moar-nom/install/share/perl6/site/sources/C9D3DBBE449293E29311B81ADF43623258DDC842:20
in method install at /home/vytas-local/.rakudobrew/moar-nom/install/share/perl6/site/sources/3803F7FE5BF2A5B7D65A002AAFAB1CAE3F4F3E19:41
in method install at /home/vytas-local/.rakudobrew/moar-nom/install/share/perl6/site/sources/707F6C3B206AFCF381257FAD32BED8C7EDADB2E3:146
in method resolve at /home/vytas-local/.rakudobrew/moar-nom/install/share/perl6/site/sources/707F6C3B206AFCF381257FAD32BED8C7EDADB2E3:219
in sub MAIN at /home/vytas-local/.rakudobrew/moar-nom/install/share/perl6/site/resources/3E7064413C5B9F6C0E6D3017B0D3216CBEB1B8C6:18
in block at /home/vytas-local/.rakudobrew/moar-nom/install/share/perl6/site/resources/3E7064413C5B9F6C0E6D3017B0D3216CBEB1B8C6:146

Actually thrown at:
in any at gen/moar/m-Metamodel.nqp:2883
in block at /home/vytas-local/.rakudobrew/moar-nom/install/share/perl6/site/sources/3803F7FE5BF2A5B7D65A002AAFAB1CAE3F4F3E19:54
in sub indir at /home/vytas-local/.rakudobrew/moar-nom/install/share/perl6/site/sources/C9D3DBBE449293E29311B81ADF43623258DDC842:20
in method install at /home/vytas-local/.rakudobrew/moar-nom/install/share/perl6/site/sources/3803F7FE5BF2A5B7D65A002AAFAB1CAE3F4F3E19:41
in method install at /home/vytas-local/.rakudobrew/moar-nom/install/share/perl6/site/sources/707F6C3B206AFCF381257FAD32BED8C7EDADB2E3:146
in method resolve at /home/vytas-local/.rakudobrew/moar-nom/install/share/perl6/site/sources/707F6C3B206AFCF381257FAD32BED8C7EDADB2E3:219
in sub MAIN at /home/vytas-local/.rakudobrew/moar-nom/install/share/perl6/site/resources/3E7064413C5B9F6C0E6D3017B0D3216CBEB1B8C6:18
in block at /home/vytas-local/.rakudobrew/moar-nom/install/share/perl6/site/resources/3E7064413C5B9F6C0E6D3017B0D3216CBEB1B8C6:146

Please, consider accepting commit c029773 which might fix this, and see warning too.

Can't install on macOS without version-specific libreadline symlink

===> Testing: Readline:ver<0.1.5>:auth<github:drforr>
[Readline] # Failed test 'initialize'
[Readline] # at t/02-base.t line 10
[Readline] # Cannot locate native library '(null)': dlopen(libreadline.7.dylib, 10): image not found

...followed by a bunch of failures tied to its inability to find that file. I happen to be running readline 8, so a symlink from libreadline.8.dylib to libreadline.7.dylib fixed the problem, but why is it looking for that specific file? If it's going through all the trouble of looking for specific symbols in the library, why must it also look for a specific major version? It seems like it could at least try the unversioned libreadline.dylib file either first or as a fallback.

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.