Code Monkey home page Code Monkey logo

tealdeer's Introduction

tealdeer

teal deer

Crate CI (Linux/macOS/Windows)
Crates.io GitHub CI

A very fast implementation of tldr in Rust: Simplified, example based and community-driven man pages.

Screenshot of tldr command

If you pronounce "tldr" in English, it sounds somewhat like "tealdeer". Hence the project name :)

In case you're in a hurry and just want to quickly try tealdeer, you can find static binaries on the GitHub releases page!

Docs (Installing, Usage, Configuration)

User documentation is available at https://dbrgn.github.io/tealdeer/!

The docs are generated using mdbook. They can be edited through the markdown files in the docs/src/ directory.

Goals

High level project goals:

  • Download and cache pages
  • Don't require a network connection for anything besides updating the cache
  • Command line interface similar or equivalent to the NodeJS client
  • Comply with the tldr client specification
  • Advanced highlighting and configuration
  • Be fast

A tool like tldr should be as frictionless as possible to use and show the output as fast as possible.

We think that tealdeer reaches these goals. We put together a (more or less) reproducible benchmark that compiles a handful of clients from source and measures the execution times on a cold disk cache. The benchmarking is run in a Docker container using sharkdp's hyperfine (Dockerfile).

Client (50 runs, 17.10.2021) Programming Language Mean in ms Deviation in ms Comments
outfieldr Zig 9.1 0.5 no user configuration
tealdeer Rust 13.2 0.5
fast-tldr Haskell 17.0 0.6 no example highlighting
tldr-hs Haskell 25.1 0.5 no example highlighting
tldr-bash Bash 30.0 0.8
tldr-c C 38.4 1.0
tldr-python-client Python 87.0 2.4
tldr-node-client JavaScript / NodeJS 407.1 12.9

As you can see, tealdeer is one of the fastest of the tested clients. However, we strive for useful features and code quality over raw performance, even if that means that we don't come out on top in this friendly competition. That said, we are still optimizing the code, for example when the outfieldr developers suggested to switch to a native TLS implementation instead of the native libraries.

Development

Creating a debug build with logging enabled:

$ cargo build --features logging

Release build without logging:

$ cargo build --release

To enable the log output, set the RUST_LOG env variable:

$ export RUST_LOG=tldr=debug

To run tests:

$ cargo test

To run lints:

$ rustup component add clippy
$ cargo clean && cargo clippy

MSRV (Minimally Supported Rust Version)

When publishing a tealdeer release, the Rust version required to build it should be stable for at least a month.

License

Licensed under either of

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Thanks to @severen for coming up with the name "tealdeer"!

tealdeer's People

Contributors

adamazing avatar agrmohit avatar cosmichorrordev avatar cyqsimon avatar das-g avatar dbrgn avatar dependabot[bot] avatar dmaahs2017 avatar equal-l2 avatar ilai-deutel avatar invakid404 avatar jcgruenhage avatar kbdharun avatar korrat avatar michaeldel avatar natpen avatar newsch avatar nifr avatar niklasmohrin avatar olavhaasie avatar qknogxxb avatar rithvikvibhu avatar severen avatar simplydanny avatar sondr3 avatar tranzystorekk avatar tveness avatar voultapher avatar walker-00 avatar zedseven avatar

Stargazers

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

Watchers

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

tealdeer's Issues

Add binary package to AUR

Currently @dbrgn maintains the tealdeer-git package on the AUR, so I was wondering if you would be interested in maintaining a tealdeer-bin package as well using the binaries from the release page.

I would prefer the tealdeer package but it is out of date.

If you are not interested, I don't mind doing it myself but it would be the first time I submit a package to the AUR.

Broken `zsh` completion

Hi! After installing latest tag release, attempting to complete in zsh gives the following error:

_arguments:comparguments:325: invalid argument: (-h --help -v --version --color){--color}[Controls when to use color]:when:((\n\t    always\n\t    auto\n\t    never\n        ))
_arguments:comparguments:325: invalid argument: (-h --help -v --version --color){--color}[Controls when to use color]:when:((\n\t    always\n\t    auto\n\t    never\n        ))
_arguments:comparguments:325: invalid argument: (-h --help -v --version --color){--color}[Controls when to use color]:when:((\n\t    always\n\t    auto\n\t    never\n        ))

Automatic cache updates

As discussed in #73, there could be a config option where - if it's set - the cache automatically refreshes itself when it's outdated.

Implementation notes (copied from here):

This would require a slight reorganization of the main function:

  • Handle args.flag_config_path and args.flag_seed_config right after handling args.flag_version (simply move up the code blocks)
  • Move the config loading code in print_page into the main function, right after the args.flag_seed_config handling block
  • In src/config.rs, add the new config elements to the RawConfig and Config structs and add the defaults to RawConfig::new().

The default configuration can be generated with tldr --seed-config. My suggestion would be:

[updates]
auto_update = false
auto_update_interval_hours = 720

(The auto_update_interval_hours could then be set to MAX_CACHE_AGE * 24 by default.)

Color support in non-ANSI terminals

Right now the output looks a bit broken on non-ANSI terminals:

ps

There are two ways to solve this:

  • Detect color support, turn off colors when not supported
  • Implement cross-platform color support

For the latter, there are lots of crates on crates.io. Here are just two examples:

However, cross-platform support will come at the cost of added complexity, because on Windows colors are implemented using API calls before and after printing, and not using control characters. This might make the implementation more complex, and testing harder.

Therefore I tend towards the first option: Simply disabling color support on non-supporting terminals.

What's worth investigating is whether the ansi_term crate we're using supports color detection or even color support on Windows. It looks like there's some Windows code available: https://github.com/ogham/rust-ansi-term/blob/master/src/windows.rs

Refs #59.

Fails to build on Windows.

   Compiling pager v0.15.0
error[E0433]: failed to resolve: could not find `unix` in `os`
 --> C:\Users\user\.cargo\registry\src\github.com-1ecc6299db9ec823\pager-0.15.0\src\utils.rs:2:14
  |
2 | use std::os::unix::ffi::OsStringExt;
  |              ^^^^ could not find `unix` in `os`

error[E0412]: cannot find type `pid_t` in crate `libc`
  --> C:\Users\user\.cargo\registry\src\github.com-1ecc6299db9ec823\pager-0.15.0\src\utils.rs:20:24
   |
20 | pub fn fork() -> libc::pid_t {
   |                        ^^^^^ not found in `libc`

error[E0425]: cannot find function `fork` in crate `libc`
  --> C:\Users\user\.cargo\registry\src\github.com-1ecc6299db9ec823\pager-0.15.0\src\utils.rs:21:20
   |
21 |     unsafe { libc::fork() }
   |                    ^^^^ not found in `libc`
help: possible candidate is found in another module, you can import it into scope
   |
1  | use utils::fork;
   |

error[E0425]: cannot find value `STDOUT_FILENO` in crate `libc`
   --> C:\Users\user\.cargo\registry\src\github.com-1ecc6299db9ec823\pager-0.15.0\src\lib.rs:188:55
    |
188 |         if self.skip_on_notty && !utils::isatty(libc::STDOUT_FILENO) {
    |                                                       ^^^^^^^^^^^^^ not found in `libc`

error[E0425]: cannot find value `STDOUT_FILENO` in crate `libc`
   --> C:\Users\user\.cargo\registry\src\github.com-1ecc6299db9ec823\pager-0.15.0\src\lib.rs:204:52
    |
204 |                     utils::dup2(main_stdout, libc::STDOUT_FILENO);
    |                                                    ^^^^^^^^^^^^^ not found in `libc`

error[E0425]: cannot find value `STDIN_FILENO` in crate `libc`
   --> C:\Users\user\.cargo\registry\src\github.com-1ecc6299db9ec823\pager-0.15.0\src\lib.rs:209:52
    |
209 |                     utils::dup2(pager_stdin, libc::STDIN_FILENO);
    |                                                    ^^^^^^^^^^^^ not found in `libc`

error[E0599]: no method named `into_vec` found for type `std::ffi::OsString` in the current scope
 --> C:\Users\user\.cargo\registry\src\github.com-1ecc6299db9ec823\pager-0.15.0\src\utils.rs:9:44
  |
9 |     unsafe { CString::from_vec_unchecked(s.into_vec()) }
  |                                            ^^^^^^^^ method not found in `std::ffi::OsString`

error[E0061]: this function takes 3 parameters but 1 parameter was supplied
  --> C:\Users\user\.cargo\registry\src\github.com-1ecc6299db9ec823\pager-0.15.0\src\utils.rs:45:25
   |
45 |     assert_eq!(unsafe { libc::pipe(fds.as_mut_ptr()) }, 0);
   |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected 3 parameters

error: aborting due to 8 previous errors

Outdated test data

Hey, I was working on #96 and noticed that the file tar-markdown.expected in the tests directory was outdated. I replaced the content with the current version from the tldr repo in #125, but I still wanted to document it here. Keep up the good work!

support variable arguments, for subcommands like "tldr git checkout"

tldr tldr shows tldr git checkout as an option:

โžœ  components git:(develop) โœ— tldr tldr

  Simplified man pages.

  Get typical usages of a command (hint: this is how you got here!):

      tldr command

  Show the tar tldr page for linux:

      tldr -p linux tar

  Get help for a git subcommand:

      tldr git checkout

โžœ  components git:(develop) โœ—

tldr git checkout doesn't work:

โžœ  components git:(develop) โœ— tldr tealdeer
Page tealdeer not found in cache
Try updating with `tldr --update`, or submit a pull request to:
https://github.com/tldr-pages/tldr
โžœ  components git:(develop) โœ—

Poking around, tldr git-checkout works:

โžœ  components git:(develop) โœ— tldr git-checkout

  Checkout a branch or paths to the working tree.
  Homepage: <https://git-scm.com/docs/git-checkout>.

  Create and switch to a new branch:

      git checkout -b branch_name

  Create and switch to a new branch based on a specific reference (branch, remote/branch, tag are examples of valid references):

      git checkout -b branch_name reference

  Switch to an existing local branch:

      git checkout branch_name

  Switch to an existing remote branch:

      git checkout --track remote_name/branch_name

  Discard all unstaged changes in the current directory (see `git reset` for more undo-like commands):

      git checkout .

  Discard unstaged changes to a given file:

      git checkout file_name

  Replace a file in the current directory with the version of it committed in a given branch:

      git checkout branch_name -- file_name

โžœ  components git:(develop) โœ—

I think that perhaps if there are variable arguments they get joined together with a dash. It would be nice if everything tldr tldr worked with tealdeer :)

Use the new index.json file in favor of the deprecated pages/index.json

Hello, I'm from the tldr-pages/tldr repository, and I'm here to inform you that we recently changed the content of the ZIP archive your client relies upon. Here's a link to the merged PR: #2862.

Inside the generated ZIP archive, a new /index.json file has been created, to be used in favor of the now deprecated /pages/index.json file, as you can see here. Once all the clients are updated, or enough time has passed, we will completely remove the /pages/index.json file from the generated ZIP archive, and only keep the top-level /index.json.

If your client does not rely on the mentioned file to work, you can close this right away, sorry for the trouble! Otherwise, in order to support the upcoming change, this client should be updated to either:

  1. Use the index.json file served by the static site itself, that is: https://tldr.sh/assets/index.json.
  2. Or use the new top-level /index.json file inside the ZIP file served by the static site, which is: https://tldr.sh/assets/tldr.zip.

Once the above is taken care of, you can close this issue and your client will be marked as up to date in our tracking issue here. This change should be trivial, but if there's any problem, please do let me know.

Thank you for your work and time you put into creating this client and supporting the TLDR pages project!

ubuntu2004 need libssl-dev

Caro install report an error "failed to run custom build command for openssl-sys v0.9.58
", after run apt install libssl-dev ,build success.

Write update warnings to stderr, not stdout

The update warnings are printed to stdout:

$ target/debug/tldr --list | head -n 5
The cache hasn't been updated for more than 30 days.
You should probably run `tldr --update` soon.
7z
7za
...

This breaks workflows where the output is piped to a different command for further processing (e.g. grep).

Syntax Highlighting

tldr.sh seems to have some kind of syntax highlighting for the example commands:

Screenshot from tldr.sh

Would be nice to have this in tealdeer as well.

Could you tag a new release?

Sorry for such a stupid question.
I'd want to package it for Solus where releases are strongly advised over git snapshots. And last release lacks a few cool feature git has.
For me just fish autocomplete should be enough to justify a new release.

error: linking with `cc` failed: exit code: 1

I want to install tealdeer in my os, but I encounter some problems as shown below.

Any help!
Thank you.

  • OS: CentOS Linux release 7.8.2003 (Core)
  • rustc --version: rustc 1.44.1 (c7087fe00 2020-06-17)
  • tealdeer version: v1.3.0
error: linking with `cc` failed: exit code: 1
  |
  = note: "cc" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-m64" "-L" "/home/kerwin/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "/tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o" "-o" "/tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro" "-Wl,-znow" "-Wl,-O1" "-nodefaultlibs" "-L" "/tmp/cargo-installcGshZg/release/deps" "-L" "/home/kerwin/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,--start-group" "-Wl,-Bstatic" "/tmp/rustc4FxLeD/libbacktrace_sys-5db30a83f5489d12.rlib" "-Wl,--end-group" "/home/kerwin/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-f7cd12d3ecd59a89.rlib" "-Wl,-Bdynamic" "-lssl" "-lcrypto" "-lutil" "-ldl" "-lutil" "-ldl" "-lrt" "-lpthread" "-lgcc_s" "-lc" "-lm" "-lrt" "-lpthread" "-lutil" "-ldl" "-lutil"
  = note: /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `openssl::ssl::connector::SslConnector::configure::hbc0b928854fe1253':
          tldr.42yx8ti4-cgu.0:(.text._ZN7openssl3ssl9connector12SslConnector9configure17hbc0b928854fe1253E+0x7f): undefined reference to `SSL_CTX_up_ref'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `openssl::ssl::bio::create::he20bafb16bb74a5b':
          tldr.42yx8ti4-cgu.0:(.text._ZN7openssl3ssl3bio6create17he20bafb16bb74a5bE+0x8): undefined reference to `BIO_set_init'
          tldr.42yx8ti4-cgu.0:(.text._ZN7openssl3ssl3bio6create17he20bafb16bb74a5bE+0x13): undefined reference to `BIO_set_data'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `std::sync::once::Once::call_once::_$u7b$$u7b$closure$u7d$$u7d$::hfd4bc86560f7d435':
          tldr.42yx8ti4-cgu.0:(.text._ZN3std4sync4once4Once9call_once28_$u7b$$u7b$closure$u7d$$u7d$17hfd4bc86560f7d435E+0x16): undefined reference to `OPENSSL_init_ssl'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::hfa5a6bb9fbc98552':
          tldr.42yx8ti4-cgu.0:(.text._ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17hfa5a6bb9fbc98552E+0x16): undefined reference to `OPENSSL_init_ssl'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `core::ptr::drop_in_place::h0d3f36330627cab8':
          tldr.42yx8ti4-cgu.0:(.text._ZN4core3ptr13drop_in_place17h0d3f36330627cab8E+0x1b): undefined reference to `BIO_meth_free'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `_$LT$reqwest..connect..Connector$u20$as$u20$core..clone..Clone$GT$::clone::h0ab248cb9f38c2da':
          tldr.42yx8ti4-cgu.0:(.text._ZN66_$LT$reqwest..connect..Connector$u20$as$u20$core..clone..Clone$GT$5clone17h0ab248cb9f38c2daE+0x2c): undefined reference to `SSL_CTX_up_ref'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$::poll::h35a5f0c660ea31f4':
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17h35a5f0c660ea31f4E+0x1ba): undefined reference to `SSL_CTX_up_ref'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17h35a5f0c660ea31f4E+0x429): undefined reference to `BIO_get_data'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17h35a5f0c660ea31f4E+0x859): undefined reference to `BIO_meth_free'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `core::ptr::drop_in_place::h9194b519e13a4440':
          tldr.42yx8ti4-cgu.0:(.text._ZN4core3ptr13drop_in_place17h9194b519e13a4440E+0x1b): undefined reference to `BIO_meth_free'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$::poll::h9c3d177f39cf3726':
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17h9c3d177f39cf3726E+0x8b2): undefined reference to `BIO_meth_new'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17h9c3d177f39cf3726E+0x8d2): undefined reference to `BIO_meth_set_write'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17h9c3d177f39cf3726E+0x8ea): undefined reference to `BIO_meth_set_read'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17h9c3d177f39cf3726E+0x902): undefined reference to `BIO_meth_set_puts'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17h9c3d177f39cf3726E+0x91a): undefined reference to `BIO_meth_set_ctrl'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17h9c3d177f39cf3726E+0x932): undefined reference to `BIO_meth_set_create'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17h9c3d177f39cf3726E+0x94a): undefined reference to `BIO_meth_set_destroy'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17h9c3d177f39cf3726E+0xa21): undefined reference to `BIO_set_data'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17h9c3d177f39cf3726E+0xa2f): undefined reference to `BIO_set_init'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17h9c3d177f39cf3726E+0xa98): undefined reference to `BIO_get_data'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17h9c3d177f39cf3726E+0xb74): undefined reference to `BIO_meth_free'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17h9c3d177f39cf3726E+0xbf2): undefined reference to `BIO_get_data'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17h9c3d177f39cf3726E+0xdd6): undefined reference to `BIO_get_data'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17h9c3d177f39cf3726E+0x125f): undefined reference to `BIO_get_data'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17h9c3d177f39cf3726E+0x132b): undefined reference to `BIO_meth_free'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17h9c3d177f39cf3726E+0x1403): undefined reference to `BIO_meth_free'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17h9c3d177f39cf3726E+0x17a3): undefined reference to `BIO_meth_free'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `core::ptr::drop_in_place::hbacae6fa41ffa753':
          tldr.42yx8ti4-cgu.0:(.text._ZN4core3ptr13drop_in_place17hbacae6fa41ffa753E+0x54): undefined reference to `BIO_meth_free'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `core::ptr::drop_in_place::h6360ca7d62046fb1':
          tldr.42yx8ti4-cgu.0:(.text._ZN4core3ptr13drop_in_place17h6360ca7d62046fb1E+0xdd): undefined reference to `BIO_meth_free'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$::poll::hdf73da2252ed77e9':
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17hdf73da2252ed77e9E+0x806): undefined reference to `SSL_CTX_up_ref'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17hdf73da2252ed77e9E+0xe7e): undefined reference to `BIO_meth_free'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17hdf73da2252ed77e9E+0x19a4): undefined reference to `BIO_meth_free'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17hdf73da2252ed77e9E+0x1aaf): undefined reference to `SSL_CTX_up_ref'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17hdf73da2252ed77e9E+0x1f62): undefined reference to `BIO_meth_free'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17hdf73da2252ed77e9E+0x2125): undefined reference to `BIO_meth_free'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17hdf73da2252ed77e9E+0x222c): undefined reference to `BIO_meth_new'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17hdf73da2252ed77e9E+0x2250): undefined reference to `BIO_meth_set_write'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17hdf73da2252ed77e9E+0x2268): undefined reference to `BIO_meth_set_read'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17hdf73da2252ed77e9E+0x2280): undefined reference to `BIO_meth_set_puts'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17hdf73da2252ed77e9E+0x2298): undefined reference to `BIO_meth_set_ctrl'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17hdf73da2252ed77e9E+0x22b0): undefined reference to `BIO_meth_set_create'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17hdf73da2252ed77e9E+0x22c8): undefined reference to `BIO_meth_set_destroy'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17hdf73da2252ed77e9E+0x23d5): undefined reference to `BIO_set_data'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17hdf73da2252ed77e9E+0x23e3): undefined reference to `BIO_set_init'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17hdf73da2252ed77e9E+0x25a5): undefined reference to `BIO_meth_free'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17hdf73da2252ed77e9E+0x2631): undefined reference to `BIO_get_data'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17hdf73da2252ed77e9E+0x2846): undefined reference to `BIO_get_data'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17hdf73da2252ed77e9E+0x2928): undefined reference to `BIO_meth_free'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17hdf73da2252ed77e9E+0x2a33): undefined reference to `BIO_get_data'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17hdf73da2252ed77e9E+0x2dc1): undefined reference to `BIO_get_data'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17hdf73da2252ed77e9E+0x2e7e): undefined reference to `BIO_meth_free'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17hdf73da2252ed77e9E+0x2f5f): undefined reference to `BIO_meth_free'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17hdf73da2252ed77e9E+0x3207): undefined reference to `BIO_meth_free'
          tldr.42yx8ti4-cgu.0:(.text._ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17hdf73da2252ed77e9E+0x3581): undefined reference to `BIO_meth_free'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `core::ptr::drop_in_place::h4275636b7fc4fe64':
          tldr.42yx8ti4-cgu.0:(.text._ZN4core3ptr13drop_in_place17h4275636b7fc4fe64E+0x304): undefined reference to `BIO_meth_free'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o:tldr.42yx8ti4-cgu.0:(.text._ZN4core3ptr13drop_in_place17h0ff3a911e3c57837E+0xee): more undefined references to `BIO_meth_free' follow
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `_$LT$tokio_tls..TlsStream$LT$S$GT$$u20$as$u20$tokio..io..async_write..AsyncWrite$GT$::poll_flush::hb3bfea0b7d22afe0':
          tldr.42yx8ti4-cgu.0:(.text._ZN84_$LT$tokio_tls..TlsStream$LT$S$GT$$u20$as$u20$tokio..io..async_write..AsyncWrite$GT$10poll_flush17hb3bfea0b7d22afe0E+0x26): undefined reference to `BIO_get_data'
          tldr.42yx8ti4-cgu.0:(.text._ZN84_$LT$tokio_tls..TlsStream$LT$S$GT$$u20$as$u20$tokio..io..async_write..AsyncWrite$GT$10poll_flush17hb3bfea0b7d22afe0E+0x5e): undefined reference to `BIO_get_data'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `_ZN4core3ptr13drop_in_place17hcfff2a6716d26c30E.llvm.3533782791772628216':
          tldr.42yx8ti4-cgu.0:(.text._ZN4core3ptr13drop_in_place17hcfff2a6716d26c30E.llvm.3533782791772628216+0x12): undefined reference to `BIO_get_data'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `_$LT$tokio_tls..TlsStream$LT$S$GT$$u20$as$u20$tokio..io..async_write..AsyncWrite$GT$::poll_write::h793d52b13ad58182':
          tldr.42yx8ti4-cgu.0:(.text._ZN84_$LT$tokio_tls..TlsStream$LT$S$GT$$u20$as$u20$tokio..io..async_write..AsyncWrite$GT$10poll_write17h793d52b13ad58182E+0x2b): undefined reference to `BIO_get_data'
          tldr.42yx8ti4-cgu.0:(.text._ZN84_$LT$tokio_tls..TlsStream$LT$S$GT$$u20$as$u20$tokio..io..async_write..AsyncWrite$GT$10poll_write17h793d52b13ad58182E+0x92): undefined reference to `BIO_get_data'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o:tldr.42yx8ti4-cgu.0:(.text._ZN7openssl3ssl18SslStream$LT$S$GT$10make_error17h92148b0d5695e0adE.llvm.3533782791772628216+0x27): more undefined references to `BIO_get_data' follow
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `_ZN4core3ptr13drop_in_place17h1b405e718fe4de1cE.llvm.3533782791772628216':
          tldr.42yx8ti4-cgu.0:(.text._ZN4core3ptr13drop_in_place17h1b405e718fe4de1cE.llvm.3533782791772628216+0x1b): undefined reference to `BIO_meth_free'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `_ZN4core3ptr13drop_in_place17hda943922f88785e3E.llvm.3533782791772628216':
          tldr.42yx8ti4-cgu.0:(.text._ZN4core3ptr13drop_in_place17hda943922f88785e3E.llvm.3533782791772628216+0x12): undefined reference to `BIO_get_data'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `_ZN7openssl3ssl18SslStream$LT$S$GT$10make_error17hc27c0d5676e5dba9E.llvm.3533782791772628216':
          tldr.42yx8ti4-cgu.0:(.text._ZN7openssl3ssl18SslStream$LT$S$GT$10make_error17hc27c0d5676e5dba9E.llvm.3533782791772628216+0x27): undefined reference to `BIO_get_data'
          tldr.42yx8ti4-cgu.0:(.text._ZN7openssl3ssl18SslStream$LT$S$GT$10make_error17hc27c0d5676e5dba9E.llvm.3533782791772628216+0x14a): undefined reference to `BIO_get_data'
          tldr.42yx8ti4-cgu.0:(.text._ZN7openssl3ssl18SslStream$LT$S$GT$10make_error17hc27c0d5676e5dba9E.llvm.3533782791772628216+0x2aa): undefined reference to `BIO_get_data'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `core::ptr::drop_in_place::h2f1400b644903242':
          tldr.42yx8ti4-cgu.0:(.text._ZN4core3ptr13drop_in_place17h2f1400b644903242E+0x14): undefined reference to `BIO_meth_free'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `core::ptr::drop_in_place::h5a0b4f626fca96b0':
          tldr.42yx8ti4-cgu.0:(.text._ZN4core3ptr13drop_in_place17h5a0b4f626fca96b0E+0x22): undefined reference to `BIO_meth_free'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `_$LT$tokio_tls..TlsStream$LT$S$GT$$u20$as$u20$tokio..io..async_read..AsyncRead$GT$::poll_read::ha17c4dc44eaaa421':
          tldr.42yx8ti4-cgu.0:(.text._ZN82_$LT$tokio_tls..TlsStream$LT$S$GT$$u20$as$u20$tokio..io..async_read..AsyncRead$GT$9poll_read17ha17c4dc44eaaa421E+0x2b): undefined reference to `BIO_get_data'
          tldr.42yx8ti4-cgu.0:(.text._ZN82_$LT$tokio_tls..TlsStream$LT$S$GT$$u20$as$u20$tokio..io..async_read..AsyncRead$GT$9poll_read17ha17c4dc44eaaa421E+0xbd): undefined reference to `BIO_get_data'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `_$LT$tokio_tls..TlsStream$LT$S$GT$$u20$as$u20$tokio..io..async_write..AsyncWrite$GT$::poll_flush::h7d485971698e3c4c':
          tldr.42yx8ti4-cgu.0:(.text._ZN84_$LT$tokio_tls..TlsStream$LT$S$GT$$u20$as$u20$tokio..io..async_write..AsyncWrite$GT$10poll_flush17h7d485971698e3c4cE+0x27): undefined reference to `BIO_get_data'
          tldr.42yx8ti4-cgu.0:(.text._ZN84_$LT$tokio_tls..TlsStream$LT$S$GT$$u20$as$u20$tokio..io..async_write..AsyncWrite$GT$10poll_flush17h7d485971698e3c4cE+0x91): undefined reference to `BIO_get_data'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `_$LT$tokio_tls..TlsStream$LT$S$GT$$u20$as$u20$tokio..io..async_write..AsyncWrite$GT$::poll_write::h37447af46412eeb9':
          tldr.42yx8ti4-cgu.0:(.text._ZN84_$LT$tokio_tls..TlsStream$LT$S$GT$$u20$as$u20$tokio..io..async_write..AsyncWrite$GT$10poll_write17h37447af46412eeb9E+0x2b): undefined reference to `BIO_get_data'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o:tldr.42yx8ti4-cgu.0:(.text._ZN84_$LT$tokio_tls..TlsStream$LT$S$GT$$u20$as$u20$tokio..io..async_write..AsyncWrite$GT$10poll_write17h37447af46412eeb9E+0x92): more undefined references to `BIO_get_data' follow
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `core::ptr::drop_in_place::hd0f3f6ee9ac1a6f6':
          tldr.42yx8ti4-cgu.0:(.text._ZN4core3ptr13drop_in_place17hd0f3f6ee9ac1a6f6E+0x26): undefined reference to `BIO_meth_free'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `_ZN4core3ptr13drop_in_place17h4275636b7fc4fe64E.4762':
          tldr.42yx8ti4-cgu.0:(.text._ZN4core3ptr13drop_in_place17h4275636b7fc4fe64E.4762+0x1c4): undefined reference to `BIO_meth_free'
          tldr.42yx8ti4-cgu.0:(.text._ZN4core3ptr13drop_in_place17h4275636b7fc4fe64E.4762+0x2ea): undefined reference to `BIO_meth_free'
          tldr.42yx8ti4-cgu.0:(.text._ZN4core3ptr13drop_in_place17h4275636b7fc4fe64E.4762+0x368): undefined reference to `BIO_meth_free'
          tldr.42yx8ti4-cgu.0:(.text._ZN4core3ptr13drop_in_place17h4275636b7fc4fe64E.4762+0x48d): undefined reference to `BIO_meth_free'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `_$LT$reqwest..connect..native_tls_conn..NativeTlsConn$LT$T$GT$$u20$as$u20$hyper..client..connect..Connection$GT$::connected::hf2f0583dffaf47ea':
          tldr.42yx8ti4-cgu.0:(.text._ZN112_$LT$reqwest..connect..native_tls_conn..NativeTlsConn$LT$T$GT$$u20$as$u20$hyper..client..connect..Connection$GT$9connected17hf2f0583dffaf47eaE+0x12): undefined reference to `BIO_get_data'
          tldr.42yx8ti4-cgu.0:(.text._ZN112_$LT$reqwest..connect..native_tls_conn..NativeTlsConn$LT$T$GT$$u20$as$u20$hyper..client..connect..Connection$GT$9connected17hf2f0583dffaf47eaE+0x2e): undefined reference to `BIO_get_data'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `_$LT$hyper_tls..client..HttpsConnector$LT$T$GT$$u20$as$u20$tower_service..Service$LT$http..uri..Uri$GT$$GT$::call::h4159f020809d408e':
          tldr.42yx8ti4-cgu.0:(.text._ZN107_$LT$hyper_tls..client..HttpsConnector$LT$T$GT$$u20$as$u20$tower_service..Service$LT$http..uri..Uri$GT$$GT$4call17h4159f020809d408eE+0x4de): undefined reference to `SSL_CTX_up_ref'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `core::ptr::drop_in_place::ha88964c0a00396e3':
          tldr.42yx8ti4-cgu.0:(.text._ZN4core3ptr13drop_in_place17ha88964c0a00396e3E+0x10c): undefined reference to `BIO_meth_free'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `_ZN4core3ptr13drop_in_place17h4275636b7fc4fe64E.llvm.5308766293811721020':
          tldr.42yx8ti4-cgu.0:(.text._ZN4core3ptr13drop_in_place17h4275636b7fc4fe64E.llvm.5308766293811721020+0x1c4): undefined reference to `BIO_meth_free'
          tldr.42yx8ti4-cgu.0:(.text._ZN4core3ptr13drop_in_place17h4275636b7fc4fe64E.llvm.5308766293811721020+0x2ea): undefined reference to `BIO_meth_free'
          tldr.42yx8ti4-cgu.0:(.text._ZN4core3ptr13drop_in_place17h4275636b7fc4fe64E.llvm.5308766293811721020+0x368): undefined reference to `BIO_meth_free'
          tldr.42yx8ti4-cgu.0:(.text._ZN4core3ptr13drop_in_place17h4275636b7fc4fe64E.llvm.5308766293811721020+0x48d): undefined reference to `BIO_meth_free'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `openssl::ssl::bio::bwrite::h172339269e08d966':
          tldr.42yx8ti4-cgu.0:(.text._ZN7openssl3ssl3bio6bwrite17h172339269e08d966E+0x24): undefined reference to `BIO_get_data'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `openssl::ssl::bio::bread::hfaacfc6efad9fc42':
          tldr.42yx8ti4-cgu.0:(.text._ZN7openssl3ssl3bio5bread17hfaacfc6efad9fc42E+0x24): undefined reference to `BIO_get_data'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `openssl::ssl::bio::ctrl::h0f389cfd72a6b550':
          tldr.42yx8ti4-cgu.0:(.text._ZN7openssl3ssl3bio4ctrl17h0f389cfd72a6b550E+0x12): undefined reference to `BIO_get_data'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `openssl::ssl::bio::destroy::he34464a0d835327a':
          tldr.42yx8ti4-cgu.0:(.text._ZN7openssl3ssl3bio7destroy17he34464a0d835327aE+0xf): undefined reference to `BIO_get_data'
          tldr.42yx8ti4-cgu.0:(.text._ZN7openssl3ssl3bio7destroy17he34464a0d835327aE+0x2e): undefined reference to `BIO_set_data'
          tldr.42yx8ti4-cgu.0:(.text._ZN7openssl3ssl3bio7destroy17he34464a0d835327aE+0x39): undefined reference to `BIO_set_init'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `core::ptr::drop_in_place::hb000d3f24b22f340':
          tldr.42yx8ti4-cgu.0:(.text._ZN4core3ptr13drop_in_place17hb000d3f24b22f340E+0x5): undefined reference to `BIO_meth_free'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `core::ptr::drop_in_place::hbf79b26b089fc6b0':
          tldr.42yx8ti4-cgu.0:(.text._ZN4core3ptr13drop_in_place17hbf79b26b089fc6b0E+0x24): undefined reference to `BIO_meth_free'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `openssl::ssl::bio::bwrite::h9674177680b43cfc':
          tldr.42yx8ti4-cgu.0:(.text._ZN7openssl3ssl3bio6bwrite17h9674177680b43cfcE+0x24): undefined reference to `BIO_get_data'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `openssl::ssl::bio::bread::hdba80916ef623d71':
          tldr.42yx8ti4-cgu.0:(.text._ZN7openssl3ssl3bio5bread17hdba80916ef623d71E+0x24): undefined reference to `BIO_get_data'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `openssl::ssl::bio::ctrl::h2192b21f55f37c30':
          tldr.42yx8ti4-cgu.0:(.text._ZN7openssl3ssl3bio4ctrl17h2192b21f55f37c30E+0xb): undefined reference to `BIO_get_data'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `openssl::ssl::bio::destroy::h3063b9e73df31d62':
          tldr.42yx8ti4-cgu.0:(.text._ZN7openssl3ssl3bio7destroy17h3063b9e73df31d62E+0xf): undefined reference to `BIO_get_data'
          tldr.42yx8ti4-cgu.0:(.text._ZN7openssl3ssl3bio7destroy17h3063b9e73df31d62E+0x2e): undefined reference to `BIO_set_data'
          tldr.42yx8ti4-cgu.0:(.text._ZN7openssl3ssl3bio7destroy17h3063b9e73df31d62E+0x39): undefined reference to `BIO_set_init'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `_ZN4core3ptr13drop_in_place17h7e5c52f8e8c87366E.llvm.11582590349392063206':
          tldr.42yx8ti4-cgu.0:(.text._ZN4core3ptr13drop_in_place17h7e5c52f8e8c87366E.llvm.11582590349392063206+0x14): undefined reference to `BIO_meth_free'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `_$LT$reqwest..connect..verbose..Verbose$LT$T$GT$$u20$as$u20$hyper..client..connect..Connection$GT$::connected::h162ec3ad762142b3':
          tldr.42yx8ti4-cgu.0:(.text._ZN98_$LT$reqwest..connect..verbose..Verbose$LT$T$GT$$u20$as$u20$hyper..client..connect..Connection$GT$9connected17h162ec3ad762142b3E+0x12): undefined reference to `BIO_get_data'
          tldr.42yx8ti4-cgu.0:(.text._ZN98_$LT$reqwest..connect..verbose..Verbose$LT$T$GT$$u20$as$u20$hyper..client..connect..Connection$GT$9connected17h162ec3ad762142b3E+0x2e): undefined reference to `BIO_get_data'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `_$LT$reqwest..connect..verbose..Verbose$LT$T$GT$$u20$as$u20$hyper..client..connect..Connection$GT$::connected::h6ead31a947beab57':
          tldr.42yx8ti4-cgu.0:(.text._ZN98_$LT$reqwest..connect..verbose..Verbose$LT$T$GT$$u20$as$u20$hyper..client..connect..Connection$GT$9connected17h6ead31a947beab57E+0x1c): undefined reference to `BIO_get_data'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `_ZN4core3ptr13drop_in_place17h9194b519e13a4440E.llvm.11582590349392063206':
          tldr.42yx8ti4-cgu.0:(.text._ZN4core3ptr13drop_in_place17h9194b519e13a4440E.llvm.11582590349392063206+0x23): undefined reference to `BIO_meth_free'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `_$LT$hyper_tls..stream..MaybeHttpsStream$LT$T$GT$$u20$as$u20$hyper..client..connect..Connection$GT$::connected::hdab3a1b363df1759':
          tldr.42yx8ti4-cgu.0:(.text._ZN99_$LT$hyper_tls..stream..MaybeHttpsStream$LT$T$GT$$u20$as$u20$hyper..client..connect..Connection$GT$9connected17hdab3a1b363df1759E+0x1c): undefined reference to `BIO_get_data'
          /tmp/cargo-installcGshZg/release/deps/tldr-b4cceec79f61b085.tldr.42yx8ti4-cgu.0.rcgu.o: In function `reqwest::async_impl::client::ClientBuilder::build::h73b3209037f6581b':
          tldr.42yx8ti4-cgu.0:(.text._ZN7reqwest10async_impl6client13ClientBuilder5build17h73b3209037f6581bE+0x1877): undefined reference to `TLS_method'
          tldr.42yx8ti4-cgu.0:(.text._ZN7reqwest10async_impl6client13ClientBuilder5build17h73b3209037f6581bE+0x18d2): undefined reference to `SSL_CTX_set_options'
          tldr.42yx8ti4-cgu.0:(.text._ZN7reqwest10async_impl6client13ClientBuilder5build17h73b3209037f6581bE+0x18d8): undefined reference to `OpenSSL_version_num'
          tldr.42yx8ti4-cgu.0:(.text._ZN7reqwest10async_impl6client13ClientBuilder5build17h73b3209037f6581bE+0x1bf1): undefined reference to `X509_up_ref'
          tldr.42yx8ti4-cgu.0:(.text._ZN7reqwest10async_impl6client13ClientBuilder5build17h73b3209037f6581bE+0x3582): undefined reference to `X509_up_ref'
          collect2: error: ld returned 1 exit status
          

error: aborting due to previous error

error: failed to compile `tealdeer v1.3.0`, intermediate artifacts can be found at `/tmp/cargo-installcGshZg`

Caused by:
  could not compile `tealdeer`.

To learn more, run the command again with --verbose.

[rust 1.32] compilation fails "SIGSEGV: invalid memory reference"

OS: Arch Linux
rust: 1.32.0

Tried to build the AUR packages tealdeer and tealdeer-git and both builds fail with a "SIGSEGV: invalid memory reference" error while compiling tealdeer source, after all the crates were successfully compiled before that point. Output of makepkg on tealdeer-git in tealdeer-git-aur.txt.

I also tried manually with git clone https://github.com/dbrgn/tealdeer and cargo build --release --verbose and that fails with the same error. Output of that in tealdeer-git-clone.txt.

I can't tell if this is a problem on my end, with my rust version or with the tealdeer source. Any help would be appreciated.

cannot install on macos

i get an error:

โžœ  ~ cargo install tealdeer
    Updating registry `https://github.com/rust-lang/crates.io-index`
  Installing tealdeer v1.1.0                                                    
 Downloading flate2 v1.0.9
error: failed to compile `tealdeer v1.1.0`, intermediate artifacts can be found at `/var/folders/qb/dthzy9hn06dgznktprmdjgt40000gn/T/cargo-install20xgyB`

Caused by:
  unable to get packages from source

Caused by:
  failed to parse manifest at `/Users/apple/.cargo/registry/src/github.com-1ecc6299db9ec823/tar-0.4.26/Cargo.toml`

Caused by:
  editions are unstable

Caused by:
  feature `edition` is required

consider adding `cargo-features = ["edition"]` to the manifest

Allow specifying multiple operating systems

So sometimes I'm using tealdeer on my laptop which is macOS, and looking up a utility that is for linux on another box. I have to -o linux after seeing that the command is not found.

My workaround is function tld { tldr $* || tldr -o linux $* }

I was wondering how you'd feel making this the default behavior.

Allow --update from a local tarball; allow disabling update warnings

Two simple changes would make tealdeer more offline-use friendly. In particular, when packaging it for use in an offline environment, one could include tldr's tarball (master.tar.gz) in the package itself, and make it run tldr --update <tarball> when installing.

Related: it would be nice to be able to disable "Cache wasn't updated for more than 30 days" warning (maybe at build time) -- if you're in an offline environment, you can't really update it so it's just an annoyance...

tldr-rs warns "Cache wasn't updated in 30 days" regardless of when cache was updated

It never used to do this, so I suppose I may have ticked over the 30-day timer. But I have updated frequently since I installed the program, so it looks like tldr --update doesn't properly reset the timer.

# walter @ warg in ~ [20:44:06] 
$ tldr --update
Successfully updated cache.

# walter @ warg in ~ [20:44:24] 
$ tldr sl
Cache wasn't updated in 30 days.
You should probably run `tldr --update` soon.


  Steam locomotive running through your terminal.

  - Let a steam locomotive run through your terminal:

  sl

  - The train burns, people scream:

  sl -a

  - Let the train fly:

  sl -F

Yo, thank you

That's it. Thank you so much. tldr saves me time, but more importantly, it saves me on frustration and anxiety of reading manpages.

Having it available in Rust is all the better: it flows seamlessly with my shell because it's so fast.

Also I love the teal deer in the README. I always forget about its existence, and rediscovering it is such a pleasure ๐Ÿ’™

Thank you!

Add Windows support

See #52. Code needs update because Windows does not conform to the XDG spec.

Errors:

error[E0432]: unresolved import `xdg::BaseDirectories`
  --> src\cache.rs:14:5
   |
14 | use xdg::BaseDirectories;
   |     ^^^^^^^^^^^^^^^^^^^^ no `BaseDirectories` in the root
error[E0432]: unresolved import `xdg::BaseDirectories`
 --> src\config.rs:8:5
  |
8 | use xdg::BaseDirectories;
  |     ^^^^^^^^^^^^^^^^^^^^ no `BaseDirectories` in the root

Best solution would probably be to replace the xdg crate by app_dirs.

Compact output

This is a bug I've meant to keep track of for a long time. I love tealdeer but the output drives me crazy because it's not compact enough compared to other tldr clients.

Official client:
image

Tealdeer:
image

As you can see in the screenshot it takes twice the space.

If I remove the excessive newlines, here is what it looks like (better imho):
image

I'd suggest to match the official client's output by default. I will give it a shot when I get the chance to, but feel free to fix it.

support pagination

Currently output will happily flow when the terminal is smaller than the output.

Switch command-line parsing to clap

It's faster and we might be able to auto-generate the autocompletion files (see comment in #86).

(Generating autocompletion doesn't need to be part of this issue.)

Potentially related to #79.

Support multiple languages

tealdeer currently fetches all languages from the tldr.sh API. However, it only ever displays English documentation. It seems that tealdeer should offer a flag/config option that would display documentation from other languages, when available. (Or maybe it should read the $LANG environmental variable?)

Alternatively, if tealdeer is not going to display non-English documentation, it probably should not save the non-English docs in the user's cache (since they take up space without providing any benefit).

In an ideal world, tealdeer would offer a user the option of selecting their language(s) before downloading the cache, but that seems like a lower priority.

More tests

Add tests that actually cover the main functionality.

Run automatic tests on Linux, OS X (-> Travis) and Windows (->AppVeyor).

This could mean the introduction of a testing framework. I don't know yet what the Rust ecosystem has to offer. I love py.test on Python.

Override config file

Hi, thanks for this tool!

It would be really useful to add a flag for the user to specify a custom configuration file, something like --override-config <...>

In my case, I want to call tldr from albert and in that case (only in that case, not system-wide) I 'd like to specify a custom configuration file which overrides the use_pager option

Allow adding custom entries to pages

Sometimes I want to add custom entries to pages that already contain 8 entries. The tldr guidelines only allow up to 8 entries per page.

Maybe we could set up a way to register "patchfiles" with tealdeer (e.g. by placing them somewhere in the .config/tealdeer/ directory). Those patchfiles would be appended to the corresponding pages when updating the cache.

Evaluate using xdg-basedir crate

The xdg-basedir crate could make the $XDG_CACHE lookup (usually ~/.cache) more standards compliant.

A get_dir function could be conditionally-compiled for unix and non-unix platforms. On unix, the $XDG_CACHE lookup would be used, on Windows a directory in the user profile that doesn't contain a dot would be used.

Avoid loading config twice

Right now, due to #44, the config is loaded twice:

$ RUST_LOG=tldr=debug cargo run --features logging -- tar
DEBUG 2019-03-11T10:16:47Z: tldr::config: Loading config
Cache wasn't updated for more than 30 days.
You should probably run `tldr --update` soon.
DEBUG 2019-03-11T10:16:47Z: tldr::config: Loading config
DEBUG 2019-03-11T10:16:47Z: tldr::formatter: Ignoring title
DEBUG 2019-03-11T10:16:47Z: tldr::formatter: Detected command name: tar

  Archiving utility.
  Often combined with a compression method, such as gzip or bzip.

This should be avoided for performance reasons.

OS Override / SunOS issue

I am running FreeBSD but trying to use tldr --os sunos truss to view the page for SunOS's truss which exists in tldr's cache and am unable to. I am getting:

Page truss not found in cache
Try updating with `tldr --update`, or submit a pull request to:
https://github.com/tldr-pages/tldr

Looks like this is due to this line in cache.rs. I can replace the None with Some('sunos') and it lets me see the page as you would expect. I see you have a comment there but not sure how it is relevant.

--update no longer works behind proxies after switching to reqwest

It looks like #61 has broken cache updating behind proxies:

Commit e732615 (just before switching to reqwest):

$ git checkout e73261542cc601408596fb404c57d54f8cbc6bf7
$ cargo build
$ target/debug/tldr --update
Successfully updated cache.

Master branch:

$ git checkout master
$ cargo build
$ target/debug/tldr --update
Could not update cache: HTTP error: https://github.com/tldr-pages/tldr/archive/master.tar.gz: timed out

`tldr tldr` shows wrong instructions

I guess tldr tldr documents the official interface, not the one of tealdeer:

% tldr tldr

  Command-line client for tldr-pages.
  Displays simplified and community-driven man pages.
  More information: <https://tldr.sh>.

  Get typical usages of a command (hint: this is how you got here!):

      tldr command

  Show the tar tldr page for Linux:

      tldr -p linux tar

  Get help for a git subcommand:

      tldr git-checkout

Especially the tldr -p linux tar example is completely different.

Replace app_dirs crate?

The app_dirs crate has a negative crev review:

cargo crev repo query review app_dirs
---
kind: package review
version: -1
date: "2019-01-06T15:49:21.839825922-08:00"
from:
  id-type: crev
  id: FYlr8YoYGVvDwHQxqEIs89reKKDy-oWisoO0qXXEfHE
  url: "https://github.com/dpc/crev-proofs"
package:
  source: "https://crates.io"
  name: app_dirs
  version: 1.2.1
  digest: mWo2YhBk4cw2sAuMAtQQukncheMihw0EDklVz6nqQGs
review:
  thoroughness: none
  understanding: none
  rating: negative
comment: |-
  It looks like it's not maintained, and they are problems with it. See https://github.com/dpc/crev/pull/133

In crev-dev/cargo-crev#133 they migrated to the directories crate. Maybe tealdeer should do this too.

Usage in README is outdated

The "usage" section in README.md is outdated, the --color option is missing. I can fix this in #125 if you want. There, I have to add the --language flag as well.

Replace deprecated tempdir crate

As reported by cargo audit:

Crate:  tempdir
Title:  `tempdir` crate has been deprecated; use `tempfile` instead
Date:   2018-02-13
URL:    https://rustsec.org/advisories/RUSTSEC-2018-0017
Dependency tree:
tempdir 0.3.7
โ””โ”€โ”€ tealdeer 1.3.0

Speed comparison

A command line tool for quickly looking up a command should be fast.

Is this client faster than others? If yes, add it to the README.

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.