Repository: dbrgn/tealdeer
Pull request #300 (2022-10-25 21:09:26)

Allow querying multiple platforms
Fix for an old issue #45 - to allow specifying multiple `platform`s on the cli.
Behaviour is to try get the tldr page for each platform given - so if a page doesn't exist for one platform but does for another, you still get the page displayed.

jj-style: Thank you for the code review and suggestions! I agree about passing in `platform` where it's needed and refactoring it out of the `Cache`.
I'll have a crack at fixing these issues, I'm still somewhat new to rust but hopefully should be doable and will be a good learning experience!

p.s. thanks for the awesome project - it saves my bacon multiple times a day!
niklasmohrin: Feel free to ask about any problems you encounter, I will try to answer without unreasonable delays

Patch:
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 8f53a47..7bb9bf4 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -14,79 +14,59 @@ jobs:
     strategy:
       matrix:
         platform: [ubuntu-latest, macos-latest, windows-latest]
-        rust: ['1.62', stable]
+        toolchain: [stable, 1.62.1]
     runs-on: ${{ matrix.platform }}
     steps:
-      - uses: actions/checkout@v2
-      - uses: actions-rs/toolchain@v1
+      - uses: actions/checkout@v3
+      - uses: dtolnay/rust-toolchain@master
         with:
-          toolchain: ${{ matrix.rust }}
-          profile: minimal
-          default: true
+          toolchain: ${{ matrix.toolchain }}
       - name: Build with default features
-        uses: actions-rs/cargo@v1
-        with:
-          command: build
+        run: cargo build
       - name: Build with logging and webpki roots
-        uses: actions-rs/cargo@v1
-        with:
-          command: build
-          args: --features logging,webpki-roots --no-default-features
+        run: cargo build --features logging,webpki-roots --no-default-features
       - name: Run tests
-        uses: actions-rs/cargo@v1
-        with:
-          command: test
+        run: cargo test
 
   clippy:
     name: run clippy lints
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v2
-      - uses: actions-rs/toolchain@v1
-        with:
-          toolchain: stable
-          profile: minimal
-          default: true
-          components: clippy
-      - uses: actions-rs/clippy-check@v1
-        with:
-          token: ${{ secrets.GITHUB_TOKEN }}
-          args: --features logging
+       - uses: actions/checkout@v3
+       - uses: dtolnay/rust-toolchain@master
+         with:
+           toolchain: stable
+           components: clippy
+       - name: run clippy lints
+         run: cargo clippy --features logging
 
   fmt:
     name: run rustfmt
     runs-on: ubuntu-latest
     steps:
-    - uses: actions/checkout@v2
-    - uses: actions-rs/toolchain@v1
-      with:
-        toolchain: stable
-        profile: minimal
-        default: true
-        components: rustfmt
-    - uses: actions-rs/cargo@v1
-      with:
-        command: fmt
-        args: --all -- --check
+      - uses: actions/checkout@v3
+      - uses: dtolnay/rust-toolchain@master
+        with:
+          toolchain: stable
+          components: rustfmt
+      - name: run rustfmt
+        run: cargo fmt --all -- --check
 
   docs:
     name: build docs
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v3
       - name: Setup mdBook
         uses: peaceiris/actions-mdbook@v1
         with:
           mdbook-version: '0.4.4'
-      - uses: actions-rs/toolchain@v1
+      - name: Setup toolchain
+        uses: dtolnay/rust-toolchain@master
         with:
-          toolchain: stable
-          profile: minimal
-          default: true
+            toolchain: stable
       - name: Build
-        uses: actions-rs/cargo@v1
-        with:
-          command: build
+        run: cargo build
       - name: Ensure that docs can be built
         run: cd docs && mdbook build
       - name: Generate usage string
diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml
index c32ec71..dafba80 100644
--- a/.github/workflows/gh-pages.yml
+++ b/.github/workflows/gh-pages.yml
@@ -7,9 +7,9 @@ on:
 
 jobs:
   deploy:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v3
 
       - name: Setup mdBook
         uses: peaceiris/actions-mdbook@v1
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 1e42acc..3795fc3 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -5,9 +5,9 @@ on:
 
 jobs:
   create-release:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v3
       - name: Create release for tag
         if: startsWith(github.ref, 'refs/tags/')
         run: |
@@ -18,12 +18,12 @@ jobs:
   upload-completions:
     needs:
       - create-release
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-latest
     strategy:
       matrix:
         target: ["bash", "fish", "zsh"]
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v3
       - name: Upload completion
         if: startsWith(github.ref, 'refs/tags/')
         run: |
@@ -34,12 +34,12 @@ jobs:
   upload-license:
     needs:
       - create-release
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-latest
     strategy:
       matrix:
         target: ["MIT", "APACHE"]
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v3
       - name: Upload license
         if: startsWith(github.ref, 'refs/tags/')
         run: |
@@ -48,7 +48,7 @@ jobs:
           upload_release_file ${{ secrets.GITHUB_TOKEN }} ${{ github.repository }} ${GITHUB_REF#refs/*/} LICENSE-${{ matrix.target }} LICENSE-${{ matrix.target }}.txt
 
   build-linux:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-latest
     strategy:
       matrix:
         include:
@@ -63,42 +63,44 @@ jobs:
           - arch: "arm"
             libc: "musleabihf"
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v3
       - name: Pull Docker image
         run: docker pull messense/rust-musl-cross:${{ matrix.arch }}-${{ matrix.libc }}
       - name: Build in Docker
         run: docker run --rm -i -v "$(pwd)":/home/rust/src messense/rust-musl-cross:${{ matrix.arch }}-${{ matrix.libc }} cargo build --release
       - name: Strip binary
         run: docker run --rm -i -v "$(pwd)":/home/rust/src messense/rust-musl-cross:${{ matrix.arch }}-${{ matrix.libc }} musl-strip -s /home/rust/src/target/${{ matrix.arch }}-unknown-linux-${{ matrix.libc }}/release/tldr
-      - uses: actions/upload-artifact@v2
+      - uses: actions/upload-artifact@v3
         with:
           name: "tealdeer-linux-${{ matrix.arch }}-${{ matrix.libc }}"
           path: "target/${{ matrix.arch }}-unknown-linux-${{ matrix.libc }}/release/tldr"
 
   build-macos:
-    runs-on: macos-11
+    runs-on: macos-latest
     steps:
-      - uses: actions/checkout@v2
-      - name: Build
-        uses: actions-rs/cargo@v1
+      - uses: actions/checkout@v3
+      - name: Setup toolchain
+        uses: dtolnay/rust-toolchain@master
         with:
-          command: build
-          args: --release --target x86_64-apple-darwin --no-default-features --features webpki-roots
-      - uses: actions/upload-artifact@v2
+          toolchain: stable
+      - name: Build
+        run: cargo build --release --target x86_64-apple-darwin --no-default-features --features webpki-roots
+      - uses: actions/upload-artifact@v3
         with:
           name: "tealdeer-macos-x86_64"
           path: "target/x86_64-apple-darwin/release/tldr"
 
   build-windows:
-    runs-on: windows-2022
+    runs-on: windows-latest
     steps:
-      - uses: actions/checkout@v2
-      - name: Build
-        uses: actions-rs/cargo@v1
+      - uses: actions/checkout@v3
+      - name: Setup toolchain
+        uses: dtolnay/rust-toolchain@master
         with:
-          command: build
-          args: --release --target x86_64-pc-windows-msvc
-      - uses: actions/upload-artifact@v2
+            toolchain: stable
+      - name: Build
+        run: cargo build --release --target x86_64-pc-windows-msvc
+      - uses: actions/upload-artifact@v3
         with:
           name: "tealdeer-windows-x86_64-msvc"
           path: "target/x86_64-pc-windows-msvc/release/tldr.exe"
@@ -109,7 +111,7 @@ jobs:
       - build-linux
       - build-macos
       - build-windows
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-latest
     strategy:
       matrix:
         target:
@@ -121,8 +123,8 @@ jobs:
           - macos-x86_64
           - windows-x86_64-msvc
     steps:
-      - uses: actions/checkout@v2
-      - uses: actions/download-artifact@v2
+      - uses: actions/checkout@v3
+      - uses: actions/download-artifact@v3
       - name: Upload binary
         if: startsWith(github.ref, 'refs/tags/')
         run: |
diff --git a/CHANGELOG.md b/CHANGELOG.md
index baccbf0..e26c474 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -38,7 +38,7 @@ probably the option to override the cache directory through the config file.
 The `TEALDEER_CACHE_DIR` env variable is now deprecated.
 
 A note to packagers: Shell completions have been moved to the `completion/`
-subdirectory! Packaging scripst might need to be updated.
+subdirectory! Packaging scripts might need to be updated.
 
 Changes:
 
@@ -107,7 +107,7 @@ The highlights:
 Note that the MSRV (Minimal Supported Rust Version) of the project
 [changed][i190]:
 
-> When publishing a Tealdeer release, the Rust version required to build it
+> When publishing a tealdeer release, the Rust version required to build it
 > should be stable for at least a month.
 
 Changes:
diff --git a/Cargo.lock b/Cargo.lock
index baf16a6..972c24e 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -10,18 +10,18 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
 
 [[package]]
 name = "aho-corasick"
-version = "0.7.19"
+version = "0.7.20"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e"
+checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
 dependencies = [
  "memchr",
 ]
 
 [[package]]
 name = "anyhow"
-version = "1.0.66"
+version = "1.0.68"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6"
+checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61"
 
 [[package]]
 name = "app_dirs2"
@@ -37,9 +37,9 @@ dependencies = [
 
 [[package]]
 name = "assert_cmd"
-version = "2.0.5"
+version = "2.0.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5c2ca00549910ec251e3bd15f87aeeb206c9456b9a77b43ff6c97c54042a472"
+checksum = "fa3d466004a8b4cb1bc34044240a2fd29d17607e2e3bd613eb44fd48e8100da3"
 dependencies = [
  "bstr",
  "doc-comment",
@@ -55,7 +55,7 @@ version = "0.2.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
 dependencies = [
- "hermit-abi",
+ "hermit-abi 0.1.19",
  "libc",
  "winapi",
 ]
@@ -80,13 +80,14 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
 
 [[package]]
 name = "bstr"
-version = "0.2.17"
+version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
+checksum = "b45ea9b00a7b3f2988e9a65ad3917e62123c38dba709b666506207be96d1790b"
 dependencies = [
- "lazy_static",
  "memchr",
+ "once_cell",
  "regex-automata",
+ "serde",
 ]
 
 [[package]]
@@ -103,15 +104,15 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
 
 [[package]]
 name = "bytes"
-version = "1.2.1"
+version = "1.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db"
+checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c"
 
 [[package]]
 name = "cc"
-version = "1.0.73"
+version = "1.0.78"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d"
 
 [[package]]
 name = "cesu8"
@@ -127,9 +128,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
 
 [[package]]
 name = "clap"
-version = "3.2.22"
+version = "3.2.23"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "86447ad904c7fb335a790c9d7fe3d0d971dc523b8ccd1561a520de9a85302750"
+checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5"
 dependencies = [
  "atty",
  "bitflags",
@@ -201,9 +202,9 @@ dependencies = [
 
 [[package]]
 name = "crossbeam-utils"
-version = "0.8.12"
+version = "0.8.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "edbafec5fa1f196ca66527c1b12c2ec4745ca14b50f1ad8f9f6f720b55d11fac"
+checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f"
 dependencies = [
  "cfg-if",
 ]
@@ -257,12 +258,12 @@ dependencies = [
 
 [[package]]
 name = "env_logger"
-version = "0.9.1"
+version = "0.10.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c90bf5f19754d10198ccb95b70664fc925bd1fc090a0fd9a6ebc54acc8cd6272"
+checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
 dependencies = [
- "atty",
  "humantime",
+ "is-terminal",
  "log",
  "regex",
  "termcolor",
@@ -312,9 +313,9 @@ dependencies = [
 
 [[package]]
 name = "filetime"
-version = "0.2.18"
+version = "0.2.19"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b9663d381d07ae25dc88dbdf27df458faa83a9b25336bcac83d5e452b5fc9d3"
+checksum = "4e884668cd0c7480504233e951174ddc3b382f7c2666e3b7310b5c4e7b0c37f9"
 dependencies = [
  "cfg-if",
  "libc",
@@ -324,9 +325,9 @@ dependencies = [
 
 [[package]]
 name = "flate2"
-version = "1.0.24"
+version = "1.0.25"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6"
+checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
 dependencies = [
  "crc32fast",
  "miniz_oxide",
@@ -347,6 +348,21 @@ version = "1.0.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
 
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
 [[package]]
 name = "form_urlencoded"
 version = "1.1.0"
@@ -417,9 +433,9 @@ dependencies = [
 
 [[package]]
 name = "h2"
-version = "0.3.14"
+version = "0.3.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ca32592cf21ac7ccab1825cd87f6c9b3d9022c44d086172ed0966bec8af30be"
+checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4"
 dependencies = [
  "bytes",
  "fnv",
@@ -455,6 +471,15 @@ dependencies = [
  "libc",
 ]
 
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
 [[package]]
 name = "http"
 version = "0.2.8"
@@ -497,9 +522,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
 
 [[package]]
 name = "hyper"
-version = "0.14.20"
+version = "0.14.23"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02c929dc5c39e335a03c405292728118860721b10190d98c2a0f0efd5baafbac"
+checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c"
 dependencies = [
  "bytes",
  "futures-channel",
@@ -521,9 +546,9 @@ dependencies = [
 
 [[package]]
 name = "hyper-rustls"
-version = "0.23.0"
+version = "0.23.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac"
+checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c"
 dependencies = [
  "http",
  "hyper",
@@ -532,6 +557,19 @@ dependencies = [
  "tokio-rustls",
 ]
 
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
 [[package]]
 name = "idna"
 version = "0.3.0"
@@ -544,9 +582,9 @@ dependencies = [
 
 [[package]]
 name = "indexmap"
-version = "1.9.1"
+version = "1.9.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
+checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
 dependencies = [
  "autocfg",
  "hashbrown",
@@ -561,11 +599,33 @@ dependencies = [
  "cfg-if",
 ]
 
+[[package]]
+name = "io-lifetimes"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46112a93252b123d31a119a8d1a1ac19deac4fac6e0e8b0df58f0d4e5870e63c"
+dependencies = [
+ "libc",
+ "windows-sys 0.42.0",
+]
+
 [[package]]
 name = "ipnet"
-version = "2.5.0"
+version = "2.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b"
+checksum = "11b0d96e660696543b251e58030cf9787df56da39dab19ad60eae7353040917e"
+
+[[package]]
+name = "is-terminal"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys 0.42.0",
+]
 
 [[package]]
 name = "itertools"
@@ -578,9 +638,9 @@ dependencies = [
 
 [[package]]
 name = "itoa"
-version = "1.0.4"
+version = "1.0.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc"
+checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440"
 
 [[package]]
 name = "jni"
@@ -619,9 +679,15 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
 
 [[package]]
 name = "libc"
-version = "0.2.135"
+version = "0.2.139"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "68783febc7782c6c5cb401fbda4de5a9898be1762314da0bb2c10ced61f18b0c"
+checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
 
 [[package]]
 name = "log"
@@ -646,23 +712,41 @@ checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
 
 [[package]]
 name = "miniz_oxide"
-version = "0.5.4"
+version = "0.6.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
 dependencies = [
  "adler",
 ]
 
 [[package]]
 name = "mio"
-version = "0.8.4"
+version = "0.8.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf"
+checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de"
 dependencies = [
  "libc",
  "log",
  "wasi",
- "windows-sys 0.36.1",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
 ]
 
 [[package]]
@@ -688,19 +772,45 @@ dependencies = [
 
 [[package]]
 name = "num_cpus"
-version = "1.13.1"
+version = "1.15.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
 dependencies = [
- "hermit-abi",
+ "hermit-abi 0.2.6",
  "libc",
 ]
 
 [[package]]
 name = "once_cell"
-version = "1.15.0"
+version = "1.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1"
+checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860"
+
+[[package]]
+name = "openssl"
+version = "0.10.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29d971fd5722fec23977260f6e81aa67d2f22cadbdc2aa049f1022d9a3be1566"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
 
 [[package]]
 name = "openssl-probe"
@@ -708,11 +818,24 @@ version = "0.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
 
+[[package]]
+name = "openssl-sys"
+version = "0.9.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5454462c0eced1e97f2ec09036abc8da362e66802f66fd20f86854d9d8cbcbc4"
+dependencies = [
+ "autocfg",
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
 [[package]]
 name = "os_str_bytes"
-version = "6.3.0"
+version = "6.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff"
+checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee"
 
 [[package]]
 name = "pager"
@@ -742,11 +865,17 @@ version = "0.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
 
+[[package]]
+name = "pkg-config"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+
 [[package]]
 name = "predicates"
-version = "2.1.1"
+version = "2.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a5aab5be6e4732b473071984b3164dbbfb7a3674d30ea5ff44410b6bcd960c3c"
+checksum = "f54fc5dc63ed3bbf19494623db4f3af16842c0d975818e469022d09e53f0aa05"
 dependencies = [
  "difflib",
  "float-cmp",
@@ -758,15 +887,15 @@ dependencies = [
 
 [[package]]
 name = "predicates-core"
-version = "1.0.3"
+version = "1.0.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da1c2388b1513e1b605fcec39a95e0a9e8ef088f71443ef37099fa9ae6673fcb"
+checksum = "72f883590242d3c6fc5bf50299011695fa6590c2c70eac95ee1bdb9a733ad1a2"
 
 [[package]]
 name = "predicates-tree"
-version = "1.0.5"
+version = "1.0.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4d86de6de25020a36c6d3643a86d9a6a9f552107c0559c60ea03551b5e16c032"
+checksum = "54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d"
 dependencies = [
  "predicates-core",
  "termtree",
@@ -798,18 +927,18 @@ dependencies = [
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.47"
+version = "1.0.49"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725"
+checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5"
 dependencies = [
  "unicode-ident",
 ]
 
 [[package]]
 name = "quote"
-version = "1.0.21"
+version = "1.0.23"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
+checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
 dependencies = [
  "proc-macro2",
 ]
@@ -836,9 +965,9 @@ dependencies = [
 
 [[package]]
 name = "regex"
-version = "1.6.0"
+version = "1.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
+checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a"
 dependencies = [
  "aho-corasick",
  "memchr",
@@ -853,9 +982,9 @@ checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
 
 [[package]]
 name = "regex-syntax"
-version = "0.6.27"
+version = "0.6.28"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
+checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
 
 [[package]]
 name = "remove_dir_all"
@@ -868,9 +997,9 @@ dependencies = [
 
 [[package]]
 name = "reqwest"
-version = "0.11.12"
+version = "0.11.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "431949c384f4e2ae07605ccaa56d1d9d2ecdb5cadd4f9577ccfab29f2e5149fc"
+checksum = "68cc60575865c7831548863cc02356512e3f1dc2f3f82cb837d7fc4cc8f3c97c"
 dependencies = [
  "base64",
  "bytes",
@@ -882,10 +1011,12 @@ dependencies = [
  "http-body",
  "hyper",
  "hyper-rustls",
+ "hyper-tls",
  "ipnet",
  "js-sys",
  "log",
  "mime",
+ "native-tls",
  "once_cell",
  "percent-encoding",
  "pin-project-lite",
@@ -896,6 +1027,7 @@ dependencies = [
  "serde_json",
  "serde_urlencoded",
  "tokio",
+ "tokio-native-tls",
  "tokio-rustls",
  "tower-service",
  "url",
@@ -921,6 +1053,20 @@ dependencies = [
  "winapi",
 ]
 
+[[package]]
+name = "rustix"
+version = "0.36.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3807b5d10909833d3e9acd1eb5fb988f79376ff10fce42937de71a449c4c588"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.42.0",
+]
+
 [[package]]
 name = "rustls"
 version = "0.20.7"
@@ -956,9 +1102,9 @@ dependencies = [
 
 [[package]]
 name = "ryu"
-version = "1.0.11"
+version = "1.0.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
+checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde"
 
 [[package]]
 name = "same-file"
@@ -1014,18 +1160,18 @@ dependencies = [
 
 [[package]]
 name = "serde"
-version = "1.0.147"
+version = "1.0.151"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965"
+checksum = "97fed41fc1a24994d044e6db6935e69511a1153b52c15eb42493b26fa87feba0"
 dependencies = [
  "serde_derive",
 ]
 
 [[package]]
 name = "serde_derive"
-version = "1.0.147"
+version = "1.0.151"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852"
+checksum = "255abe9a125a985c05190d687b320c12f9b1f0b99445e608c21ba0782c719ad8"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -1034,9 +1180,9 @@ dependencies = [
 
 [[package]]
 name = "serde_json"
-version = "1.0.87"
+version = "1.0.91"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ce777b7b150d76b9cf60d28b55f5847135a003f7d7350c6be7a773508ce7d45"
+checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883"
 dependencies = [
  "itoa",
  "ryu",
@@ -1088,9 +1234,9 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
 
 [[package]]
 name = "syn"
-version = "1.0.103"
+version = "1.0.107"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d"
+checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -1147,30 +1293,30 @@ dependencies = [
 
 [[package]]
 name = "termtree"
-version = "0.2.4"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "507e9898683b6c43a9aa55b64259b721b52ba226e0f3779137e50ad114a4c90b"
+checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8"
 
 [[package]]
 name = "textwrap"
-version = "0.15.1"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "949517c0cf1bf4ee812e2e07e08ab448e3ae0d23472aee8a06c985f0c8815b16"
+checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
 
 [[package]]
 name = "thiserror"
-version = "1.0.37"
+version = "1.0.38"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e"
+checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0"
 dependencies = [
  "thiserror-impl",
 ]
 
 [[package]]
 name = "thiserror-impl"
-version = "1.0.37"
+version = "1.0.38"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb"
+checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -1194,9 +1340,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
 
 [[package]]
 name = "tokio"
-version = "1.21.2"
+version = "1.23.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a9e03c497dc955702ba729190dc4aac6f2a0ce97f913e5b1b5912fc5039d9099"
+checksum = "eab6d665857cc6ca78d6e80303a02cea7a7851e85dfbd77cbdc09bd129f1ef46"
 dependencies = [
  "autocfg",
  "bytes",
@@ -1206,7 +1352,17 @@ dependencies = [
  "num_cpus",
  "pin-project-lite",
  "socket2",
- "winapi",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b"
+dependencies = [
+ "native-tls",
+ "tokio",
 ]
 
 [[package]]
@@ -1236,9 +1392,9 @@ dependencies = [
 
 [[package]]
 name = "toml"
-version = "0.5.9"
+version = "0.5.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
+checksum = "1333c76748e868a4d9d1017b5ab53171dfd095f70c712fdb4653a406547f598f"
 dependencies = [
  "serde",
 ]
@@ -1283,9 +1439,9 @@ checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
 
 [[package]]
 name = "unicode-ident"
-version = "1.0.5"
+version = "1.0.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
+checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc"
 
 [[package]]
 name = "unicode-normalization"
@@ -1313,6 +1469,12 @@ dependencies = [
  "percent-encoding",
 ]
 
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
 [[package]]
 name = "version_check"
 version = "0.9.4"
@@ -1443,9 +1605,9 @@ dependencies = [
 
 [[package]]
 name = "webpki-roots"
-version = "0.22.5"
+version = "0.22.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "368bfe657969fb01238bb756d351dcade285e0f6fcbd36dcb23359a5169975be"
+checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87"
 dependencies = [
  "webpki",
 ]
diff --git a/Cargo.toml b/Cargo.toml
index de29b01..2953457 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -5,13 +5,13 @@ authors = [
 ]
 description = "Fetch and show tldr help pages for many CLI commands. Full featured offline client with caching support."
 homepage = "https://github.com/dbrgn/tealdeer/"
-license = "MIT/Apache-2.0"
+license = "MIT OR Apache-2.0"
 name = "tealdeer"
 readme = "README.md"
 repository = "https://github.com/dbrgn/tealdeer/"
 documentation = "https://dbrgn.github.io/tealdeer/"
 version = "1.6.1"
-include = ["/src/**/*", "/tests/**/*", "/Cargo.toml", "/README.md", "/LICENSE-*", "/screenshot.png"]
+include = ["/src/**/*", "/tests/**/*", "/Cargo.toml", "/README.md", "/LICENSE-*", "/screenshot.png", "completion/*"]
 rust-version = "1.62"
 edition = "2021"
 
@@ -24,7 +24,7 @@ anyhow = "1"
 app_dirs = { version = "2", package = "app_dirs2" }
 atty = "0.2"
 clap = { version = "3", features = ["std", "derive", "suggestions", "color"], default-features = false }
-env_logger = { version = "0.9", optional = true }
+env_logger = { version = "0.10", optional = true }
 log = "0.4"
 reqwest = { version = "0.11.3", features = ["blocking"], default-features = false }
 serde = "1.0.21"
@@ -46,9 +46,20 @@ filetime = "0.2.10"
 
 [features]
 default = ["native-roots"]
+logging = ["env_logger"]
+
+# Reqwest (the HTTP client library) can handle TLS connections in three
+# different modes:
+#
+# - Rustls with native roots
+# - Rustls with WebPK roots
+# - Native TLS (SChannel on Windows, Secure Transport on macOS and OpenSSL otherwise)
+#
+# Exactly one of the three variants must be selected. By default, Rustls with
+# native roots is enabled.
 native-roots = ["reqwest/rustls-tls-native-roots"]
 webpki-roots = ["reqwest/rustls-tls-webpki-roots"]
-logging = ["env_logger"]
+native-tls = ["reqwest/native-tls"]
 
 [profile.release]
 lto = true
diff --git a/README.md b/README.md
index 1746860..fb38ea6 100644
--- a/README.md
+++ b/README.md
@@ -89,7 +89,7 @@ To run lints:
 
 ## MSRV (Minimally Supported Rust Version)
 
-When publishing a Tealdeer release, the Rust version required to build it
+When publishing a tealdeer release, the Rust version required to build it
 should be stable for at least a month.
 
 
diff --git a/completion/bash_tealdeer b/completion/bash_tealdeer
index 507e956..1fc0655 100644
--- a/completion/bash_tealdeer
+++ b/completion/bash_tealdeer
@@ -27,8 +27,9 @@ _tealdeer()
 		COMPREPLY=( $( compgen -W '$( _parse_help "$1" )' -- "$cur" ) )
 		return
 	fi
-
-	COMPREPLY=( $(compgen -W '$( tldr -l | tr -d , )' -- "${cur}") )
+	if tldrlist=$(tldr -l 2>/dev/null); then
+		COMPREPLY=( $(compgen -W '$( echo "$tldrlist" | tr -d , )' -- "${cur}") )
+	fi
 }
 
 complete -F _tealdeer tldr
diff --git a/completion/fish_tealdeer b/completion/fish_tealdeer
index 601b114..dcb41c3 100644
--- a/completion/fish_tealdeer
+++ b/completion/fish_tealdeer
@@ -20,7 +20,9 @@ complete -c tldr      -l seed-config    -d 'Create a basic config.' -f
 complete -c tldr      -l color          -d 'Controls when to use color.' -xa 'always auto never'
 
 function __tealdeer_entries
-    tldr --list | string replace -a -i -r "\,\s" "\n"
+    if set entries (tldr --list  2>/dev/null)
+        string replace -a -i -r "\,\s" "\n" $entries
+    end
 end
 
 complete -f -c tldr -a '(__tealdeer_entries)'
diff --git a/completion/zsh_tealdeer b/completion/zsh_tealdeer
index 99c12be..0d08745 100644
--- a/completion/zsh_tealdeer
+++ b/completion/zsh_tealdeer
@@ -2,8 +2,9 @@
 
 _applications() {
     local -a commands
-    commands=(${(uonzf)"$(tldr --list 2>/dev/null)"//:/\\:})
-    _describe -t commands 'command' commands
+    if commands=(${(uonzf)"$(tldr --list 2>/dev/null)"//:/\\:}); then
+        _describe -t commands 'command' commands
+    fi
 }
 
 _tealdeer() {
diff --git a/docs/src/config.md b/docs/src/config.md
index 020687e..ece2706 100644
--- a/docs/src/config.md
+++ b/docs/src/config.md
@@ -52,11 +52,3 @@ auto_update = true
 The directory where the configuration file resides may be overwritten by the
 environment variable `TEALDEER_CONFIG_DIR`. Remember to use an absolute path.
 Variable expansion will not be performed on the path.
-
-## Override Cache Directory
-
-Similarly, the cache directory where the pages are downloaded to, also follows
-OS conventions. On Linux, it will usually be at `~/.cache/tealdeer/`. The path
-can be overwritten using the environment variable `TEALDEER_CACHE_DIR`.
-Remember to use an absolute path. Variable expansion will not be performed on
-the path.
diff --git a/docs/src/config_style.md b/docs/src/config_style.md
index 527e3e5..190df4c 100644
--- a/docs/src/config_style.md
+++ b/docs/src/config_style.md
@@ -28,13 +28,13 @@ Colors can be specified in one of three ways:
 
       foreground = "green"
 
-- 256 color ANSI code (*Tealdeer v1.5.0+*)
+- 256 color ANSI code (*tealdeer v1.5.0+*)
 
   Example:
 
       foreground = { ansi = 4 }
 
-- 24-bit RGB color (*Tealdeer v1.5.0+*)
+- 24-bit RGB color (*tealdeer v1.5.0+*)
 
   Example:
 
diff --git a/docs/src/config_updates.md b/docs/src/config_updates.md
index 5eb8f95..f010cc6 100644
--- a/docs/src/config_updates.md
+++ b/docs/src/config_updates.md
@@ -2,7 +2,7 @@
 
 ## Automatic updates
 
-tealdeer can refresh the cache automatically when it is outdated. This
+Tealdeer can refresh the cache automatically when it is outdated. This
 behavior can be configured in the `updates` section and is disabled by
 default.
 
diff --git a/docs/src/installing.md b/docs/src/installing.md
index 67c3748..1163a14 100644
--- a/docs/src/installing.md
+++ b/docs/src/installing.md
@@ -1,6 +1,6 @@
 # Installing
 
-There are a few different ways to install Tealdeer:
+There are a few different ways to install tealdeer:
 
 - Through [package managers](#package-managers)
 - Through [static binaries](#static-binaries-linux)
@@ -15,6 +15,7 @@ autocompletions](#autocompletion).
 Tealdeer has been added to a few package managers:
 
 - Arch Linux: [`tealdeer`](https://archlinux.org/packages/community/x86_64/tealdeer/)
+- Debian: [`tealdeer`](https://tracker.debian.org/tealdeer)
 - Fedora: [`tealdeer`](https://src.fedoraproject.org/rpms/rust-tealdeer)
 - FreeBSD: [`sysutils/tealdeer`](https://www.freshports.org/sysutils/tealdeer/)
 - Funtoo: [`app-misc/tealdeer`](https://github.com/funtoo/core-kit/tree/1.4-release/app-misc/tealdeer)
@@ -23,6 +24,7 @@ Tealdeer has been added to a few package managers:
 - NetBSD: [`sysutils/tealdeer`](https://pkgsrc.se/sysutils/tealdeer)
 - Nix: [`tealdeer`](https://nixos.org/nixos/packages.html#tealdeer)
 - openSUSE: [`tealdeer`](https://software.opensuse.org/package/tealdeer?search_term=tealdeer)
+- Scoop: [`tealdeer`](https://github.com/ScoopInstaller/Main/blob/master/bucket/tealdeer.json)
 - Solus: [`tealdeer`](https://packages.getsol.us/shannon/t/tealdeer/)
 - Void Linux: [`tealdeer`](https://github.com/void-linux/void-packages/tree/master/srcpkgs/tealdeer)
 
@@ -38,27 +40,25 @@ Build and install the tool via cargo...
 
     $ cargo install tealdeer
 
-*(Note: You might need to install OpenSSL development headers, otherwise you get
-a "failed to run custom build command for openssl-sys" error message. The
-package is called `libssl-dev` on Ubuntu.)*
-
 ## Build From Source
 
-Debug build with logging enabled:
+Release build:
 
-    $ cargo build --features logging
+    $ cargo build --release
 
-Release build without logging:
+Release build with bundled CA roots:
 
-    $ cargo build --release
+    $ cargo build --release --no-default-features --features webpki-roots
+
+Debug build with logging support:
 
-To enable the log output, set the `RUST_LOG` env variable:
+    $ cargo build --features logging
 
-    $ export RUST_LOG=tldr=debug
+(To enable logging at runtime, export the `RUST_LOG=tldr=debug` env variable.)
 
 ## Autocompletion
 
-Shell completion scripts are located in the folder `completion`. 
+Shell completion scripts are located in the folder `completion`.
 Just copy them to their designated location:
 
 - *Bash*: `cp completion/bash_tealdeer /usr/share/bash-completion/completions/tldr`
diff --git a/docs/src/intro.md b/docs/src/intro.md
index 09106b0..ca9f8cc 100644
--- a/docs/src/intro.md
+++ b/docs/src/intro.md
@@ -6,7 +6,7 @@ and community-driven man pages.
 
 ![Screenshot](screenshot-default.png)
 
-This documentation shows how to install, use and configure Tealdeer.
+This documentation shows how to install, use and configure tealdeer.
 
 ## Links
 
diff --git a/docs/src/usage.txt b/docs/src/usage.txt
index 09edc5e..74b3b2e 100644
--- a/docs/src/usage.txt
+++ b/docs/src/usage.txt
@@ -9,21 +9,22 @@ ARGS:
     <COMMAND>...    The command to show (e.g. `tar` or `git log`)
 
 OPTIONS:
-    -l, --list                   List all commands in the cache
-    -f, --render <FILE>          Render a specific markdown file
-    -p, --platform <PLATFORM>    Override the operating system [possible values: linux, macos,
-                                 windows, sunos, osx, android]
-    -L, --language <LANGUAGE>    Override the language
-    -u, --update                 Update the local cache
-        --no-auto-update         If auto update is configured, disable it for this run
-    -c, --clear-cache            Clear the local cache
-        --pager                  Use a pager to page output
-    -r, --raw                    Display the raw markdown instead of rendering it
-    -q, --quiet                  Suppress informational messages
-        --show-paths             Show file and directory paths used by tealdeer
-        --seed-config            Create a basic config
-        --color <WHEN>           Control whether to use color [possible values: always, auto, never]
-    -v, --version                Print the version
-    -h, --help                   Print help information
+    -l, --list                    List all commands in the cache
+    -f, --render <FILE>           Render a specific markdown file
+    -p, --platform <PLATFORMS>    Override the operating system [possible values: linux, macos,
+                                  windows, sunos, osx, android]
+    -L, --language <LANGUAGE>     Override the language
+    -u, --update                  Update the local cache
+        --no-auto-update          If auto update is configured, disable it for this run
+    -c, --clear-cache             Clear the local cache
+        --pager                   Use a pager to page output
+    -r, --raw                     Display the raw markdown instead of rendering it
+    -q, --quiet                   Suppress informational messages
+        --show-paths              Show file and directory paths used by tealdeer
+        --seed-config             Create a basic config
+        --color <WHEN>            Control whether to use color [possible values: always, auto,
+                                  never]
+    -v, --version                 Print the version
+    -h, --help                    Print help information
 
 To view the user documentation, please visit https://dbrgn.github.io/tealdeer/.
diff --git a/src/cache.rs b/src/cache.rs
index 57b1a30..aa64f5e 100644
--- a/src/cache.rs
+++ b/src/cache.rs
@@ -20,7 +20,6 @@ static TLDR_OLD_PAGES_DIR: &str = "tldr-master";
 
 #[derive(Debug)]
 pub struct Cache {
-    platform: PlatformType,
     cache_dir: PathBuf,
 }
 
@@ -86,12 +85,11 @@ pub enum CacheFreshness {
 }
 
 impl Cache {
-    pub fn new<P>(platform: PlatformType, cache_dir: P) -> Self
+    pub fn new<P>(cache_dir: P) -> Self
     where
         P: Into<PathBuf>,
     {
         Self {
-            platform,
             cache_dir: cache_dir.into(),
         }
     }
@@ -155,7 +153,7 @@ impl Cache {
             .get(archive_url)
             .send()?
             .error_for_status()
-            .with_context(|| format!("Could not download tldr pages from {}", archive_url))?;
+            .with_context(|| format!("Could not download tldr pages from {archive_url}"))?;
         let mut buf: Vec<u8> = vec![];
         let bytes_downloaded = resp.copy_to(&mut buf)?;
         debug!("{} bytes downloaded", bytes_downloaded);
@@ -211,8 +209,8 @@ impl Cache {
     }
 
     /// Return the platform directory.
-    fn get_platform_dir(&self) -> &'static str {
-        match self.platform {
+    fn get_platform_dir(platform: PlatformType) -> &'static str {
+        match platform {
             PlatformType::Linux => "linux",
             PlatformType::OsX => "osx",
             PlatformType::SunOs => "sunos",
@@ -247,10 +245,11 @@ impl Cache {
         name: &str,
         languages: &[String],
         custom_pages_dir: Option<&Path>,
+        platforms: &[PlatformType],
     ) -> Option<PageLookupResult> {
-        let page_filename = format!("{}.md", name);
-        let patch_filename = format!("{}.patch", name);
-        let custom_filename = format!("{}.page", name);
+        let page_filename = format!("{name}.md");
+        let patch_filename = format!("{name}.patch");
+        let custom_filename = format!("{name}.page");
 
         // Determine directory paths
         let pages_dir = self.pages_dir();
@@ -260,7 +259,7 @@ impl Cache {
                 if lang == "en" {
                     String::from("pages")
                 } else {
-                    format!("pages.{}", lang)
+                    format!("pages.{lang}")
                 }
             })
             .collect();
@@ -275,12 +274,14 @@ impl Cache {
 
         let patch_path = Self::find_patch(&patch_filename, custom_pages_dir);
 
-        // Try to find a platform specific path next, append custom patch to it.
-        let platform_dir = self.get_platform_dir();
-        if let Some(page) =
-            Self::find_page_for_platform(&page_filename, &pages_dir, platform_dir, &lang_dirs)
-        {
-            return Some(PageLookupResult::with_page(page).with_optional_patch(patch_path));
+        // Try to find a platform specific path next, in the order supplied by the user, and append custom patch to it.
+        for &platform in platforms {
+            let platform_dir = Cache::get_platform_dir(platform);
+            if let Some(page) =
+                Self::find_page_for_platform(&page_filename, &pages_dir, platform_dir, &lang_dirs)
+            {
+                return Some(PageLookupResult::with_page(page).with_optional_patch(patch_path));
+            }
         }
 
         // Did not find platform specific results, fall back to "common"
@@ -289,10 +290,17 @@ impl Cache {
     }
 
     /// Return the available pages.
-    pub fn list_pages(&self, custom_pages_dir: Option<&Path>) -> Vec<String> {
+    pub fn list_pages(
+        &self,
+        custom_pages_dir: Option<&Path>,
+        platforms: &[PlatformType],
+    ) -> Vec<String> {
         // Determine platforms directory and platform
         let platforms_dir = self.pages_dir().join("pages");
-        let platform_dir = self.get_platform_dir();
+        let platform_dirs: Vec<&'static str> = platforms
+            .iter()
+            .map(|&p| Self::get_platform_dir(p))
+            .collect();
 
         // Closure that allows the WalkDir instance to traverse platform
         // specific and common page directories, but not others.
@@ -303,7 +311,7 @@ impl Cache {
                 None => return false,
             };
             if file_type.is_dir() {
-                return file_name == "common" || file_name == platform_dir;
+                return file_name == "common" || platform_dirs.contains(&file_name);
             } else if file_type.is_file() {
                 return true;
             }
diff --git a/src/cli.rs b/src/cli.rs
index 8646cac..ed71ef8 100644
--- a/src/cli.rs
+++ b/src/cli.rs
@@ -2,7 +2,7 @@
 
 use std::path::PathBuf;
 
-use clap::{AppSettings, ArgGroup, Parser};
+use clap::{AppSettings, ArgAction, ArgGroup, Parser};
 
 use crate::types::{ColorOptions, PlatformType};
 
@@ -39,9 +39,10 @@ pub(crate) struct Args {
     #[clap(
         short = 'p',
         long = "platform",
+        action = ArgAction::Append,
         possible_values = ["linux", "macos", "windows", "sunos", "osx", "android"],
     )]
-    pub platform: Option<PlatformType>,
+    pub platforms: Option<Vec<PlatformType>>,
 
     /// Override the language
     #[clap(short = 'L', long = "language")]
diff --git a/src/config.rs b/src/config.rs
index e1bc4ba..98d4e46 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -308,7 +308,7 @@ impl Config {
             // For backwards compatibility reasons, the cache directory can be
             // overridden using an env variable. This is deprecated and will be
             // phased out in the future.
-            eprintln!("Warning: The ${} env variable is deprecated, use the `cache_dir` option in the config file instead.", cache_dir_env_var);
+            eprintln!("Warning: The ${cache_dir_env_var} env variable is deprecated, use the `cache_dir` option in the config file instead.");
             PathWithSource {
                 path: PathBuf::from(env_var),
                 source: PathSource::EnvVar,
@@ -376,7 +376,7 @@ impl Config {
                 format!("Failed to read from config file at {:?}", &config_file_path)
             })?;
             toml::from_str(&contents).with_context(|| {
-                format!("Failed to parse TOML config file at {:?}", config_file_path)
+                format!("Failed to parse TOML config file at {config_file_path:?}")
             })?
         } else {
             RawConfig::new()
diff --git a/src/line_iterator.rs b/src/line_iterator.rs
index 4d0eab6..75a56bd 100644
--- a/src/line_iterator.rs
+++ b/src/line_iterator.rs
@@ -1,6 +1,6 @@
 //! Code to split a `BufRead` instance into an iterator of `LineType`s.
 
-use std::io::BufRead;
+use std::io::{BufRead, Read};
 
 use log::warn;
 
@@ -64,9 +64,10 @@ impl<R: BufRead> Iterator for LineIterator<R> {
                         self.format = TldrFormat::V1;
                     } else {
                         // It's the new format! Drop next line.
-                        // (Hmm, is there a way to do this without an allocation?)
-                        let mut devnull = String::new();
-                        if let Err(e) = self.reader.read_line(&mut devnull) {
+                        if let Err(e) = Read::bytes(&mut self.reader)
+                            .find(|b| matches!(b, Ok(b'\n') | Err(_)))
+                            .transpose()
+                        {
                             warn!("Could not read line from reader: {:?}", e);
                             return None;
                         }
@@ -95,21 +96,27 @@ mod test {
 
     #[test]
     fn test_first_line_old_format() {
-        let input = "# The Title\n\n";
+        let input = "# The Title\n> Description\n";
         let mut lines = LineIterator::new(input.as_bytes());
         let title = lines.next().unwrap();
         assert_eq!(title, LineType::Title("The Title".to_string()));
-        let empty = lines.next().unwrap();
-        assert_eq!(empty, LineType::Empty);
+        let description = lines.next().unwrap();
+        assert_eq!(
+            description,
+            LineType::Description("Description".to_string())
+        );
     }
 
     #[test]
     fn test_first_line_new_format() {
-        let input = "The Title\n=========\n\n";
+        let input = "The Title\n=========\n> Description\n";
         let mut lines = LineIterator::new(input.as_bytes());
         let title = lines.next().unwrap();
         assert_eq!(title, LineType::Title("The Title".to_string()));
-        let empty = lines.next().unwrap();
-        assert_eq!(empty, LineType::Empty);
+        let description = lines.next().unwrap();
+        assert_eq!(
+            description,
+            LineType::Description("Description".to_string())
+        );
     }
 }
diff --git a/src/main.rs b/src/main.rs
index 8f601e4..15110e6 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -18,10 +18,16 @@
 
 #[cfg(any(
     all(feature = "native-roots", feature = "webpki-roots"),
-    not(any(feature = "native-roots", feature = "webpki-roots")),
+    all(feature = "native-roots", feature = "native-tls"),
+    all(feature = "webpki-roots", feature = "native-tls"),
+    not(any(
+        feature = "native-roots",
+        feature = "webpki-roots",
+        feature = "native-tls"
+    )),
 ))]
 compile_error!(
-    "exactly one of feature \"native-roots\" and feature \"webpki-roots\" must be enabled"
+    "exactly one of the features \"native-roots\", \"webpki-roots\" or \"native-tls\" must be enabled"
 );
 
 use std::{env, process};
@@ -119,12 +125,9 @@ fn clear_cache(cache: &Cache, quietly: bool, enable_styles: bool) {
     if !quietly {
         let cache_dir = cache.cache_dir().display();
         if cache_dir_found {
-            eprintln!("Successfully cleared cache at `{}`.", cache_dir);
+            eprintln!("Successfully cleared cache at `{cache_dir}`.");
         } else {
-            eprintln!(
-                "Cache directory not found at `{}`, nothing to do.",
-                cache_dir
-            );
+            eprintln!("Cache directory not found at `{cache_dir}`, nothing to do.");
         }
     }
 }
@@ -143,17 +146,17 @@ fn update_cache(cache: &Cache, quietly: bool, enable_styles: bool) {
 /// Show file paths
 fn show_paths(config: &Config) {
     let config_dir = get_config_dir().map_or_else(
-        |e| format!("[Error: {}]", e),
+        |e| format!("[Error: {e}]"),
         |(mut path, source)| {
             path.push(""); // Trailing path separator
             match path.to_str() {
-                Some(path) => format!("{} ({})", path, source),
+                Some(path) => format!("{path} ({source})"),
                 None => "[Invalid]".to_string(),
             }
         },
     );
     let config_path = get_config_path().map_or_else(
-        |e| format!("[Error: {}]", e),
+        |e| format!("[Error: {e}]"),
         |(path, _)| path.display().to_string(),
     );
     let cache_dir = config.directories.cache_dir.to_string();
@@ -167,11 +170,11 @@ fn show_paths(config: &Config) {
         Some(ref path_with_source) => path_with_source.to_string(),
         None => "[None]".to_string(),
     };
-    println!("Config dir:       {}", config_dir);
-    println!("Config path:      {}", config_path);
-    println!("Cache dir:        {}", cache_dir);
-    println!("Pages dir:        {}", pages_dir);
-    println!("Custom pages dir: {}", custom_pages_dir);
+    println!("Config dir:       {config_dir}");
+    println!("Config path:      {config_path}");
+    println!("Cache dir:        {cache_dir}");
+    println!("Pages dir:        {pages_dir}");
+    println!("Custom pages dir: {custom_pages_dir}");
 }
 
 /// Create seed config file and exit
@@ -280,8 +283,11 @@ fn main() {
         create_config_and_exit(enable_styles);
     }
 
-    // Specify target OS
-    let platform: PlatformType = args.platform.unwrap_or_else(PlatformType::current);
+    let fallback_platforms: &[PlatformType] = &[PlatformType::current()];
+    let platforms = args
+        .platforms
+        .as_ref()
+        .map_or(fallback_platforms, Vec::as_slice);
 
     // If a local file was passed in, render it and exit
     if let Some(file) = args.render {
@@ -295,7 +301,7 @@ fn main() {
     }
 
     // Instantiate cache. This will not yet create the cache directory!
-    let cache = Cache::new(platform, &config.directories.cache_dir.path);
+    let cache = Cache::new(&config.directories.cache_dir.path);
 
     // Clear cache, pass through
     if args.clear_cache {
@@ -325,7 +331,10 @@ fn main() {
             .custom_pages_dir
             .as_ref()
             .map(PathWithSource::path);
-        println!("{}", cache.list_pages(custom_pages_dir).join("\n"));
+        println!(
+            "{}",
+            cache.list_pages(custom_pages_dir, platforms).join("\n")
+        );
         process::exit(0);
     }
 
@@ -350,6 +359,7 @@ fn main() {
                 .custom_pages_dir
                 .as_ref()
                 .map(PathWithSource::path),
+            platforms,
         ) {
             if let Err(ref e) =
                 print_page(&lookup_result, args.raw, enable_styles, args.pager, &config)
diff --git a/src/output.rs b/src/output.rs
index e09481e..357b988 100644
--- a/src/output.rs
+++ b/src/output.rs
@@ -51,7 +51,7 @@ pub fn print_page(
         // Print the raw markdown of the file.
         for line in reader.lines() {
             let line = line.context("Error while reading from a page")?;
-            writeln!(handle, "{}", line).context("Could not write to stdout")?;
+            writeln!(handle, "{line}").context("Could not write to stdout")?;
         }
     } else {
         // Closure that processes a page snippet and writes it to stdout
diff --git a/src/utils.rs b/src/utils.rs
index 879733a..1649281 100644
--- a/src/utils.rs
+++ b/src/utils.rs
@@ -9,18 +9,13 @@ pub fn print_warning(enable_styles: bool, message: &str) {
 /// Print an anyhow error to stderr. If `enable_styles` is true, then a red
 /// message will be printed.
 pub fn print_error(enable_styles: bool, error: &anyhow::Error) {
-    print_msg(
-        enable_styles,
-        &format!("{:?}", error),
-        "Error: ",
-        Color::Red,
-    );
+    print_msg(enable_styles, &format!("{error:?}"), "Error: ", Color::Red);
 }
 
 fn print_msg(enable_styles: bool, message: &str, prefix: &'static str, color: Color) {
     if enable_styles {
         eprintln!("{}{}", color.paint(prefix), color.paint(message));
     } else {
-        eprintln!("{}", message);
+        eprintln!("{message}");
     }
 }


Test patch:
diff --git a/tests/lib.rs b/tests/lib.rs
index 230b2f2..0afac46 100644
--- a/tests/lib.rs
+++ b/tests/lib.rs
@@ -55,7 +55,7 @@ impl TestEnv {
     /// Write `content` to "config.toml" in the `config_dir` directory
     fn write_config(&self, content: impl AsRef<str>) {
         let config_file_name = self.config_dir.path().join("config.toml");
-        println!("Config path: {:?}", config_file_name);
+        println!("Config path: {config_file_name:?}");
 
         let mut config_file = File::create(&config_file_name).unwrap();
         config_file.write_all(content.as_ref().as_bytes()).unwrap();
@@ -76,7 +76,7 @@ impl TestEnv {
             .join(os);
         create_dir_all(&dir).unwrap();
 
-        let mut file = File::create(&dir.join(format!("{}.md", name))).unwrap();
+        let mut file = File::create(dir.join(format!("{name}.md"))).unwrap();
         file.write_all(contents.as_bytes()).unwrap();
     }
 
@@ -84,7 +84,7 @@ impl TestEnv {
     fn add_page_entry(&self, name: &str, contents: &str) {
         let dir = self.custom_pages_dir.path();
         create_dir_all(dir).unwrap();
-        let mut file = File::create(&dir.join(format!("{}.page", name))).unwrap();
+        let mut file = File::create(dir.join(format!("{name}.page"))).unwrap();
         file.write_all(contents.as_bytes()).unwrap();
     }
 
@@ -92,7 +92,7 @@ impl TestEnv {
     fn add_patch_entry(&self, name: &str, contents: &str) {
         let dir = self.custom_pages_dir.path();
         create_dir_all(dir).unwrap();
-        let mut file = File::create(&dir.join(format!("{}.patch", name))).unwrap();
+        let mut file = File::create(dir.join(format!("{name}.patch"))).unwrap();
         file.write_all(contents.as_bytes()).unwrap();
     }
 
@@ -120,7 +120,7 @@ impl TestEnv {
             build = build.arg("--no-default-features");
         }
         if !self.features.is_empty() {
-            build = build.arg(&format!("--feature {}", self.features.join(",")));
+            build = build.arg(format!("--feature {}", self.features.join(",")));
         }
         let run = build.run().unwrap();
         let mut cmd = run.command();
@@ -426,7 +426,7 @@ fn _test_correct_rendering(
 
     // Create input file
     let file_path = testenv.input_dir.path().join(filename);
-    println!("Testfile path: {:?}", file_path);
+    println!("Testfile path: {file_path:?}");
     let mut file = File::create(&file_path).unwrap();
     file.write_all(input_file.as_bytes()).unwrap();
 
@@ -501,7 +501,7 @@ fn test_correct_rendering_with_config() {
     // Setup config file
     // TODO should be config::CONFIG_FILE_NAME
     let config_file_path = testenv.config_dir.path().join("config.toml");
-    println!("Config path: {:?}", config_file_path);
+    println!("Config path: {config_file_path:?}");
 
     let mut config_file = File::create(&config_file_path).unwrap();
     config_file
@@ -510,7 +510,7 @@ fn test_correct_rendering_with_config() {
 
     // Create input file
     let file_path = testenv.input_dir.path().join("inkscape-v2.md");
-    println!("Testfile path: {:?}", file_path);
+    println!("Testfile path: {file_path:?}");
 
     let mut file = File::create(&file_path).unwrap();
     file.write_all(include_bytes!("inkscape-v2.md")).unwrap();
@@ -562,6 +562,71 @@ fn test_pager_flag_enable() {
         .success();
 }
 
+#[test]
+fn test_multiple_platform_command_search() {
+    let testenv = TestEnv::new();
+    testenv.add_os_entry("linux", "linux-only", "this command only exists for linux");
+    testenv.add_os_entry(
+        "linux",
+        "windows-and-linux",
+        "# windows-and-linux \n\n > linux version",
+    );
+    testenv.add_os_entry(
+        "windows",
+        "windows-and-linux",
+        "# windows-and-linux \n\n > windows version",
+    );
+
+    testenv
+        .command()
+        .args(["--platform", "windows", "--platform", "linux", "linux-only"])
+        .assert()
+        .success();
+
+    // test order of platforms supplied if preserved
+    testenv
+        .command()
+        .args([
+            "--platform",
+            "windows",
+            "--platform",
+            "linux",
+            "windows-and-linux",
+        ])
+        .assert()
+        .success()
+        .stdout(contains("windows version"));
+
+    testenv
+        .command()
+        .args([
+            "--platform",
+            "linux",
+            "--platform",
+            "windows",
+            "windows-and-linux",
+        ])
+        .assert()
+        .success()
+        .stdout(contains("linux version"));
+}
+
+#[test]
+fn test_multiple_platform_command_search_not_found() {
+    let testenv = TestEnv::new();
+    testenv.add_os_entry(
+        "windows",
+        "windows-only",
+        "this command only exists for Windows",
+    );
+
+    testenv
+        .command()
+        .args(["--platform", "macos", "--platform", "linux", "windows-only"])
+        .assert()
+        .stderr(contains("Page `windows-only` not found in cache."));
+}
+
 #[test]
 fn test_list_flag_rendering() {
     let testenv = TestEnv::new();
@@ -604,6 +669,79 @@ fn test_list_flag_rendering() {
         .stdout("bar\nbaz\nfaz\nfiz\nfoo\nqux\n");
 }
 
+#[test]
+fn test_multi_platform_list_flag_rendering() {
+    let testenv = TestEnv::new();
+
+    // set custom pages directory
+    testenv.write_config(format!(
+        "[directories]\ncustom_pages_dir = '{}'",
+        testenv.custom_pages_dir.path().to_str().unwrap()
+    ));
+
+    testenv.add_entry("common", "");
+
+    testenv
+        .command()
+        .args(["--list"])
+        .assert()
+        .success()
+        .stdout("common\n");
+
+    testenv
+        .command()
+        .args(["--platform", "linux", "--list"])
+        .assert()
+        .success()
+        .stdout("common\n");
+
+    testenv
+        .command()
+        .args(["--platform", "windows", "--list"])
+        .assert()
+        .success()
+        .stdout("common\n");
+
+    testenv.add_os_entry("linux", "rm", "");
+    testenv.add_os_entry("linux", "ls", "");
+    testenv.add_os_entry("windows", "del", "");
+    testenv.add_os_entry("windows", "dir", "");
+    testenv.add_os_entry("linux", "winux", "");
+    testenv.add_os_entry("windows", "winux", "");
+
+    // test `--list` for `--platform linux` by itself
+    testenv
+        .command()
+        .args(["--platform", "linux", "--list"])
+        .assert()
+        .success()
+        .stdout("common\nls\nrm\nwinux\n");
+
+    // test `--list` for `--platform windows` by itself
+    testenv
+        .command()
+        .args(["--platform", "windows", "--list"])
+        .assert()
+        .success()
+        .stdout("common\ndel\ndir\nwinux\n");
+
+    // test `--list` for `--platform linux --platform windows`
+    testenv
+        .command()
+        .args(["--platform", "linux", "--platform", "windows", "--list"])
+        .assert()
+        .success()
+        .stdout("common\ndel\ndir\nls\nrm\nwinux\n");
+
+    // test `--list` for `--platform windows --platform linux`
+    testenv
+        .command()
+        .args(["--platform", "linux", "--platform", "windows", "--list"])
+        .assert()
+        .success()
+        .stdout("common\ndel\ndir\nls\nrm\nwinux\n");
+}
+
 #[test]
 fn test_autoupdate_cache() {
     let testenv = TestEnv::new();
@@ -620,7 +758,7 @@ fn test_autoupdate_cache() {
     let cache_file_path = testenv.cache_dir.path().join(TLDR_PAGES_DIR);
 
     // Activate automatic updates, set the auto-update interval to 24 hours
-    let mut config_file = File::create(&config_file_path).unwrap();
+    let mut config_file = File::create(config_file_path).unwrap();
     config_file
         .write_all(b"[updates]\nauto_update = true\nauto_update_interval_hours = 24")
         .unwrap();