{ "version": "https://jsonfeed.org/version/1.1", "user_comment": "This feed allows you to read the posts from this site in any feed reader that supports the JSON Feed format. To add this feed to your reader, copy the following URL -- https://matoken.org/blog/tag/tui/feed/json/ -- and add it your reader.", "home_page_url": "https://matoken.org/blog/tag/tui/", "feed_url": "https://matoken.org/blog/tag/tui/feed/json/", "language": "ja", "title": "TUI – matoken's blog", "description": "Is there no plan B?", "icon": "https://matoken.org/blog/wp-content/uploads/2025/03/cropped-1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9.jpeg", "items": [ { "id": "https://matoken.org/blog/?p=5121", "url": "https://matoken.org/blog/2025/12/31/cloudflare-speed-test-with-tui/", "title": "Cloudflare\u306e\u901f\u5ea6\u30c6\u30b9\u30c8\u3092TUI\u3067", "content_html": "
Cloudflare \u306e\u901f\u5ea6\u8a08\u6e2c\u30b5\u30a4\u30c8\u306espeed.cloudflare.com \u3092TUI \u3067\u8a08\u6e2c\u3067\u304d\u308bcloudflare-speed-cli \u3068\u3044\u3046\u3082\u306e\u3092\u77e5\u3063\u305f\u306e\u3067\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e
\ncloudflare-speed-cli \u306fRust \u88fd\u3067GPL-3.0 license \u3067\u3059\uff0e
\u985e\u4f3c\u306e\u3082\u306e\u3067\uff0cspeedtest.net \u3092\u8a08\u6e2c\u3067\u304d\u308bspeedtest-cli \u3092\u3088\u304f\u4f7f\u3063\u3066\u3044\u307e\u3059\u304c\uff0cCloudflare \u3082\u4f7f\u3048\u308b\u3068\u4fbf\u5229\u305d\u3046\u3067\u3059\uff0e
\n\n
cloudflare-speed-cli \u306fGitHub Releases \u306b\u306fLinux x86_64, aarch64, macOS aarch64, x86_64, Windows x86_64 \u306e\u30d0\u30a4\u30ca\u30ea\u304c\u3042\u308a\u307e\u3059\uff0e\u3057\u304b\u3057\u4f8b\u306b\u3088\u3063\u3066Raspberry Pi bookworm armhf(Arm 32bit)\u3067\u3082\u8a66\u3057\u3066\u307f\u307e\u3059\uff0e
\nRust \u95a2\u9023\u306fasciimena 3.0 \u3092build \u3057\u305f\u3068\u304d\u306b\u5165\u308c\u305f\u3082\u306e\u304b\u3089rustup \u30671.92.0 \u306b\u3057\u305f\u3082\u306e\u3092\u4f7f\u3044\u307e\u3059\uff0e
\ncargo install \u3067\u6642\u9593\u304c\u639b\u304b\u308a\u307e\u3059\u304c\u7279\u306b\u3064\u307e\u3065\u3044\u305f\u308a\u305b\u305abuild \u3067\u304d\u307e\u3057\u305f\uff0e
$ cargo --version\nwarning: `/home/matoken/.cargo/config` is deprecated in favor of `config.toml`\n |\n = help: if you need to support cargo 1.38 or earlier, you can symlink `config` to `config.toml`\ncargo 1.92.0 (344c4567c 2025-10-21)\n$ cargo install --git https://github.com/kavehtehrani/cloudflare-speed-cli --features tui\n$ cloudflare-speed-cli --help\nCloudflare-based speed test with optional TUI\n\nUsage: cloudflare-speed-cli [OPTIONS]\n\nOptions:\n --base-url <BASE_URL>\n Base URL for the Cloudflare speed test service [default: https://speed.cloudflare.com]\n --json\n Print JSON result and exit (no TUI)\n --text\n Print text summary and exit (no TUI)\n --download-duration <DOWNLOAD_DURATION>\n Download phase duration [default: 10s]\n --upload-duration <UPLOAD_DURATION>\n Upload phase duration [default: 10s]\n --idle-latency-duration <IDLE_LATENCY_DURATION>\n Idle latency probe duration (pre-test) [default: 2s]\n --concurrency <CONCURRENCY>\n Concurrency for download/upload workers [default: 6]\n --download-bytes-per-req <DOWNLOAD_BYTES_PER_REQ>\n Bytes per download request [default: 10000000]\n --upload-bytes-per-req <UPLOAD_BYTES_PER_REQ>\n Bytes per upload request [default: 5000000]\n --probe-interval-ms <PROBE_INTERVAL_MS>\n Probe interval in milliseconds [default: 250]\n --probe-timeout-ms <PROBE_TIMEOUT_MS>\n Probe timeout in milliseconds [default: 800]\n --experimental\n Enable experimental features (TURN fetch + UDP-like loss probe)\n --export-json <EXPORT_JSON>\n Export results as JSON\n --export-csv <EXPORT_CSV>\n Export results as CSV\n --auto-save <AUTO_SAVE>\n Use --auto-save true or --auto-save false to override (default: true) [default: true] [possible values: true, false]\n --interface <INTERFACE>\n Bind to a specific network interface (e.g., ens18, eth0)\n --source <SOURCE>\n Bind to a specific source IP address (e.g., 192.168.10.0)\n --certificate <CERTIFICATE>\n Path to a custom TLS certificate file (PEM or DER format)\n -h, --help\n Print help\n -V, --version\n Print version\n$ cloudflare-speed-cli --version\ncloudflare-speed-cli 0.3.1\n
\u65e9\u901f\u8a66\u3057\u3066\u307f\u307e\u3059\uff0ecloudflare-speed-cli \u3092\u30aa\u30d7\u30b7\u30e7\u30f3\u306a\u3057\u3067\u5b9f\u884c\u3059\u308b\u3068TUI \u3067\u5b9f\u884c\u3055\u308c\u307e\u3059\uff0e\u8d77\u52d5\u3057\u3066\u3059\u3050\u306b\u8a08\u6e2c\u304c\u59cb\u307e\u308a\uff0c\u65e2\u5b9a\u5024\u3067\u306f\u8a08\u6e2c\u7d50\u679c\u304c\u4fdd\u5b58\u3055\u308c\u307e\u3059\uff0etab key \u3067History \u30da\u30fc\u30b8\u306b\u9077\u79fb\u3059\u308b\u3068\u904e\u53bb\u306e\u8a08\u6e2c\u7d50\u679c\u3092\u95b2\u89a7\u3057\u305f\u308a\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3057\u305f\u308a\u3067\u304d\u307e\u3059\uff0e
\n
--text \u30aa\u30d7\u30b7\u30e7\u30f3\u3067cli \u30e2\u30fc\u30c9\u3067\u3059\u304c\uff0c\u30d7\u30ed\u30b0\u30ec\u30b9\u304c\u5927\u91cf\u306b\u51fa\u3066\u3061\u3087\u3063\u3068\u4f7f\u3044\u3065\u3089\u3044\u611f\u3058\u3067\u3059\uff0e
\u30d7\u30ed\u30b9\u30ec\u30b9\u90e8\u5206\u306fSTDERR \u306a\u306e\u3067\u305d\u308c\u3092\u6368\u3066\u3066\u3057\u307e\u3063\u3066\u3082\u3044\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093
\n$ cloudflare-speed-cli --text 2>/dev/null\nIP/Colo/ASN: 133.106.160.49 / NRT / 138384 (-)\nDownload: 23.73 Mbps\nUpload: 2.47 Mbps\nIdle latency p50/p90/p99: 98.9/110.7/110.7 ms (loss 0.0%, jitter 10.2 ms)\nLoaded latency (download) p50/p90/p99: 438.0/578.6/755.2 ms (loss 0.0%, jitter 130.1 ms)\nLoaded latency (upload) p50/p90/p99: 654.8/794.1/794.1 ms (loss 45.5%, jitter 144.4 ms)\n
\u3053\u3093\u306a\u611f\u3058\u3067\u5b9a\u671f\u7684\u306b\u8a08\u6e2c\u3059\u308b\u306e\u306b\u3082\u4fbf\u5229\u304b\u3082\u3068\u601d\u3044\u307e\u3057\u305f\u304c\uff0ccli \u30e2\u30fc\u30c9\u3067\u306f\u65e2\u5b9a\u5024\u3067\u306f\u7d50\u679c\u3092\u4fdd\u5b58\u3057\u306a\u3044\u3088\u3046\u3067\u3059\uff0e
\n$ watch -n 3600 -- cloudflare-speed-cli --text\n
--auto-save true \u3082\u8ffd\u52a0\u3059\u308b\u3068\u7d50\u679c\u304c\u4fdd\u5b58\u3055\u308c\u307e\u3059\uff0e
$ watch -n 3600 -- cloudflare-speed-cli --text --auto-save true\n
\u305f\u3060\uff0c\u4ee5\u4e0b\u306e\u3088\u3046\u306bTUI \u30e2\u30fc\u30c9\u306e\u8a08\u6e2c\u6642\u306e\u30ed\u30b0\u306b\u306f --interface \u3092\u6307\u5b9a\u3057\u3066\u3082Interface \u3084AP \u540d\u306f\u4fdd\u5b58\u3055\u308c\u306a\u3044\u3088\u3046\u3067\u3059\uff0e
\u2502 3. 2025-12-31 06:30:11 +09:00 DL 20.69 Mbps UL 4.66 Mbps Idle p50 103.7 ms - (1)\n\u2502 4. 2025-12-31 06:08:33 +09:00 DL 21.73 Mbps UL 3.16 Mbps Idle p50 100.7 ms wlan0 TP-L13💻 (2)\n
--text \u3067cli \u30e2\u30fc\u30c9\u3067\u5b9f\u884c\u3057\u305f\u3068\u304d\u306e\u7d50\u679c
TUI \u30e2\u30fc\u30c9\u3067\u5b9f\u884c\u3057\u305f\u3068\u304d\u306e\u7d50\u679c
\n$ speedtest-cli\nRetrieving speedtest.net configuration...\nTesting from Rakuten Mobile Network (133.106.160.42)...\nRetrieving speedtest.net server list...\nSelecting best server based on ping...\nHosted by GSL Networks (Tokyo) [0.26 km]: 60.882 ms\nTesting download speed................................................................................\nDownload: 12.70 Mbit/s\nTesting upload speed......................................................................................................\nUpload: 2.69 Mbit/s\n
$ speedtest\n\n Speedtest by Ookla\n\n Server: IPA CyberLab 400G - Tokyo (id: 48463)\n ISP: Rakuten Mobile Network\nIdle Latency: 50.15 ms (jitter: 1.41ms, low: 48.98ms, high: 52.36ms)\n Download: 20.75 Mbps (data used: 19.9 MB)\n 262.40 ms (jitter: 71.32ms, low: 72.73ms, high: 398.26ms)\n Upload: 2.96 Mbps (data used: 1.6 MB)\n 779.27 ms (jitter: 95.79ms, low: 75.05ms, high: 1148.99ms)\n Packet Loss: 0.0%\n Result URL: https://www.speedtest.net/result/c/e1a349cf-53eb-4d63-b8f4-8550dabd772d\n
$ python -m fastcli -v\nApproximate download speed: 17.48 Mbps\n
asciimoon.com \u3068\u3044\u3046\u6708\u306e\u6e80\u3061\u6b20\u3051\u304casciiart \u3067\u8868\u73fe\u3055\u308c\u305f\u30b5\u30a4\u30c8\u304c\u3042\u308a\u307e\u3059\uff0e\u305f\u3060\u3057JavaScript\u304c\u7121\u3044\u3068\u6e80\u3061\u6b20\u3051\u306f\u5206\u304b\u3089\u305aw3m \u306a\u3069\u3067\u306f\u4eca\u3072\u3068\u3064\u306a\u611f\u3058\u3067\u3057\u305f\uff0e
\nASCII Moon \u306f\u305d\u306esite\u306b\u30a4\u30f3\u30b9\u30d1\u30a4\u30a2\u3055\u308c\u305f\u6708\u306e\u6e80\u3061\u6b20\u3051\u3092TUI \u3067\u8868\u793a\u3059\u308b\u30b3\u30de\u30f3\u30c9\u3067\u3059\uff0e
\n\n
ASCII Moon \u306fReleases page \u306bLinux/macOS/Windows \u306eamd64 \u7248\u306e\u30d0\u30a4\u30ca\u30ea\u304c\u7f6e\u3044\u3066\u3042\u308a\u307e\u3059\uff0e
\nLinux armhf \u3067\u306f\u3069\u3046\u3060\u308d\u3046\u3068\u4eca\u56de\u306fsource \u304b\u3089build \u3057\u307e\u3057\u305f\uff0e
$ git clone https://github.com/rockydd/ascii_moon.git\n$ cd ascii_moon\n$ cargo build --release\n$ ./target/release/ascii_moon\n$ ./target/release/ascii_moon --help\nA TUI to show the moon phase\n\nUsage: ascii_moon [OPTIONS]\n\nOptions:\n -d, --date <DATE> Date in YYYY-MM-DD format (defaults to today)\n --lines <LINES> Render the moon to a specific number of lines (non-interactive)\n -h, --help Print help\n -V, --version Print version\n$ ./target/release/ascii_moon --version\nascii_moon 0.2.0\n
\u30aa\u30d7\u30b7\u30e7\u30f3\u7121\u3057\u3067\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u30e2\u30fc\u30c9\uff0e
\n-d, --date <\u65e5\u4ed8(YYY-MM-DD)> \u3067\u7279\u5b9a\u306e\u65e5\u4ed8\u3067\u8d77\u52d5\uff0e
\n--lines <\u884c\u6570> \u306fscript \u3084MOTD \u306a\u3069\u5411\u3051\u3067\u6307\u5b9a\u3057\u305f\u884c\u6570\u3067\u6708\u306eAsciiArt \u3092\u51fa\u529b\u3057\u307e\u3059\uff0e
\n-d, --date \u3068 --lines \u306f\u4e00\u7dd2\u306b\u6307\u5b9a\u3067\u304d\u307e\u3059\uff0e

\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u30e2\u30fc\u30c9\u3067\u306f\u30ab\u30fc\u30bd\u30eb\u5de6\u53f3\u30671\u65e5\u5358\u4f4d\u3067\u65e5\u4ed8\u3092\u64cd\u4f5c\u3067\u304d\u307e\u3059\uff0el key \u3067\u5730\u540d\u306e\u30e9\u30d9\u30eb\u306eon/off\uff0cL key \u3067\u30e9\u30d9\u30eb\u306e\u8a00\u8a9e\u5909\u66f4\uff0ci key \u3067\u4e0b\u90e8\u306e\u60c5\u5831\u306eon/off \u304c\u3067\u304d\u307e\u3059\uff0e
\n\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u30e2\u30fc\u30c9\u306e\u52d5\u4f5c\u306e\u72b6\u614b\u306f\u4ee5\u4e0b\u306easciinema \u3067\u78ba\u8a8d\u3067\u304d\u307e\u3059\uff0e
TUI \u3067\u3082\u3053\u306eAscii Moon, astroterm, tracker \u306a\u3069\u9762\u767d\u3044\u5929\u6587\u30a2\u30d7\u30ea\u304c\u5897\u3048\u3066\u3044\u308b\u611f\u3058\u304c\u3057\u307e\u3059\uff0e
\n$ ./target/release/ascii_moon --version\nascii_moon 0.2.0\n$ cargo version\nwarning: `/home/matoken/.cargo/config` is deprecated in favor of `config.toml`\n |\n = help: if you need to support cargo 1.38 or earlier, you can symlink `config` to `config.toml`\ncargo 1.92.0 (344c4567c 2025-10-21)\n$ cargo build --release\n$ lsb_release -dr\nNo LSB modules are available.\nDescription: Raspbian GNU/Linux 12 (bookworm)\nRelease: 12\n$ arch\narmv7l\n$ cat /sys/firmware/devicetree/base/model\nRaspberry Pi 3 Model B Rev 1.2\n
\n\nPost by @matoken\nView on Mastodon\n
\n", "content_text": "asciimoon.com \u3068\u3044\u3046\u6708\u306e\u6e80\u3061\u6b20\u3051\u304casciiart \u3067\u8868\u73fe\u3055\u308c\u305f\u30b5\u30a4\u30c8\u304c\u3042\u308a\u307e\u3059\uff0e\u305f\u3060\u3057JavaScript\u304c\u7121\u3044\u3068\u6e80\u3061\u6b20\u3051\u306f\u5206\u304b\u3089\u305aw3m \u306a\u3069\u3067\u306f\u4eca\u3072\u3068\u3064\u306a\u611f\u3058\u3067\u3057\u305f\uff0e\n\n\nASCII Moon \u306f\u305d\u306esite\u306b\u30a4\u30f3\u30b9\u30d1\u30a4\u30a2\u3055\u308c\u305f\u6708\u306e\u6e80\u3061\u6b20\u3051\u3092TUI \u3067\u8868\u793a\u3059\u308b\u30b3\u30de\u30f3\u30c9\u3067\u3059\uff0e\n\n\n\n\nrockydd/ascii_moon: A TUI (Terminal User Interface) application written in Rust that displays the moon phase in ASCII art.\n\n\n\n\n\nASCII Moon \u306fReleases page \u306bLinux/macOS/Windows \u306eamd64 \u7248\u306e\u30d0\u30a4\u30ca\u30ea\u304c\u7f6e\u3044\u3066\u3042\u308a\u307e\u3059\uff0e\nLinux armhf \u3067\u306f\u3069\u3046\u3060\u308d\u3046\u3068\u4eca\u56de\u306fsource \u304b\u3089build \u3057\u307e\u3057\u305f\uff0e\n\n\n\n$ git clone https://github.com/rockydd/ascii_moon.git\n$ cd ascii_moon\n$ cargo build --release\n$ ./target/release/ascii_moon\n$ ./target/release/ascii_moon --help\nA TUI to show the moon phase\n\nUsage: ascii_moon [OPTIONS]\n\nOptions:\n -d, --date <DATE> Date in YYYY-MM-DD format (defaults to today)\n --lines <LINES> Render the moon to a specific number of lines (non-interactive)\n -h, --help Print help\n -V, --version Print version\n$ ./target/release/ascii_moon --version\nascii_moon 0.2.0\n\n\n\n\u30aa\u30d7\u30b7\u30e7\u30f3\u7121\u3057\u3067\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u30e2\u30fc\u30c9\uff0e\n-d, --date <\u65e5\u4ed8(YYY-MM-DD)> \u3067\u7279\u5b9a\u306e\u65e5\u4ed8\u3067\u8d77\u52d5\uff0e\n--lines <\u884c\u6570> \u306fscript \u3084MOTD \u306a\u3069\u5411\u3051\u3067\u6307\u5b9a\u3057\u305f\u884c\u6570\u3067\u6708\u306eAsciiArt \u3092\u51fa\u529b\u3057\u307e\u3059\uff0e\n-d, --date \u3068 --lines \u306f\u4e00\u7dd2\u306b\u6307\u5b9a\u3067\u304d\u307e\u3059\uff0e\n\n\n\n\n\n\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u30e2\u30fc\u30c9\u3067\u306f\u30ab\u30fc\u30bd\u30eb\u5de6\u53f3\u30671\u65e5\u5358\u4f4d\u3067\u65e5\u4ed8\u3092\u64cd\u4f5c\u3067\u304d\u307e\u3059\uff0el key \u3067\u5730\u540d\u306e\u30e9\u30d9\u30eb\u306eon/off\uff0cL key \u3067\u30e9\u30d9\u30eb\u306e\u8a00\u8a9e\u5909\u66f4\uff0ci key \u3067\u4e0b\u90e8\u306e\u60c5\u5831\u306eon/off \u304c\u3067\u304d\u307e\u3059\uff0e\n\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u30e2\u30fc\u30c9\u306e\u52d5\u4f5c\u306e\u72b6\u614b\u306f\u4ee5\u4e0b\u306easciinema \u3067\u78ba\u8a8d\u3067\u304d\u307e\u3059\uff0e\n\n\n\nTUI \u3067\u3082\u3053\u306eAscii Moon, astroterm, tracker \u306a\u3069\u9762\u767d\u3044\u5929\u6587\u30a2\u30d7\u30ea\u304c\u5897\u3048\u3066\u3044\u308b\u611f\u3058\u304c\u3057\u307e\u3059\uff0e\n\n\n\n\nastroterm\u3067\u7aef\u672b\u4e0a\u3067\u661f\u56f3\u3092\u697d\u3057\u3080 \u2013 matoken’s blog\n\n\nterminal\u885b\u661f\u8ffd\u8de1\u30a2\u30d7\u30ea\u306etracker \u2013 matoken’s blog\n\n\n\n\n\u74b0\u5883\n\n$ ./target/release/ascii_moon --version\nascii_moon 0.2.0\n$ cargo version\nwarning: `/home/matoken/.cargo/config` is deprecated in favor of `config.toml`\n |\n = help: if you need to support cargo 1.38 or earlier, you can symlink `config` to `config.toml`\ncargo 1.92.0 (344c4567c 2025-10-21)\n$ cargo build --release\n$ lsb_release -dr\nNo LSB modules are available.\nDescription: Raspbian GNU/Linux 12 (bookworm)\nRelease: 12\n$ arch\narmv7l\n$ cat /sys/firmware/devicetree/base/model\nRaspberry Pi 3 Model B Rev 1.2\n\n\n \nPost by @matoken\nView on Mastodon", "date_published": "2025-12-12T20:07:15+09:00", "date_modified": "2025-12-12T20:07:17+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "moon", "RaspberryPi", "TUI", "bookworm", "Linux", "Raspberry Pi OS" ] }, { "id": "https://matoken.org/blog/?p=4613", "url": "https://matoken.org/blog/2025/06/20/try-chawan-a-terminal-web-browser-that-supports-images-javascript-css-etc/", "title": "\u753b\u50cf\uff0cJavaScript/CSS\u306a\u3069\u306b\u5bfe\u5fdc\u3059\u308b\u30bf\u30fc\u30df\u30ca\u30eb\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b6\u306eChawan\u3092\u8a66\u3059", "content_html": "
Chawan\u3068\u3044\u3046\u30bf\u30fc\u30df\u30ca\u30eb\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b6\u3092\u77e5\u308a\u307e\u3057\u305f\uff0e
\n\u30e1\u30e2\u30ea\u30bb\u30fc\u30d5\u306aNim\u3067\u5b9f\u88c5\u3055\u308c\u3066\u3044\u3066\u30e9\u30a4\u30bb\u30f3\u30b9\u306f\u30d1\u30d6\u30ea\u30c3\u30af\u30c9\u30e1\u30a4\u30f3\u3067\u3059\uff0e
\u540c\u3058\u3088\u3046\u306b\u30bf\u30fc\u30df\u30ca\u30eb\u4e0a\u3067\u52d5\u4f5c\u3059\u308bw3m\u3084Lynx\u7cfb\u3068\u306e\u5927\u304d\u306a\u9055\u3044\u306fJavaScript\u3084CSS\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u308b\u8fba\u308a\u3067\u3057\u3087\u3046\u304b\uff0eSixel\u3084Kitty\u306e\u30bf\u30fc\u30df\u30ca\u30eb\u753b\u50cf\u5f62\u5f0f\u306b\u3082\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\uff0e
\n\u5c11\u3057\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e
\n
| \n Note \n | \n\n \n \n\u5c11\u3057\u7528\u9014\u304c\u9055\u3044\u307e\u3059\u304c\uff0cv8\u30a8\u30f3\u30b8\u30f3\u3092\u4f7f\u3063\u305f\u30b9\u30af\u30ec\u30a4\u30d4\u30f3\u30b0\u5411\u3051\u306e\u30d8\u30c3\u30c9\u30ec\u30b9\u30d6\u30e9\u30a6\u30b6\u306eLightpanda\u306a\u3093\u3066\u3082\u306e\u3082\u3042\u308a\u307e\u3059\uff0e \n\n\n \n | \n
\u73fe\u5728\u306eChawan: 0.2.0\u306fLinux amd64\u306e\u9759\u7684\u30d0\u30a4\u30ca\u30eatarball\u3084Debian amd64\u306e.deb\u304c\u3042\u308a\u307e\u3059\uff0e
\n\u4e0d\u5b89\u5b9a\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3068\u3057\u3066AUR/NixOS/AppImage\u304c\u3042\u308b\u3088\u3046\u3067\u3059\uff0e(\u3053\u3061\u3089\u306f\u4eca\u56de\u672a\u78ba\u8a8d)
\u4ed6\u306e\u74b0\u5883\u3067\u306f\u30bb\u30eb\u30d5\u30d3\u30eb\u30c9\u304c\u5fc5\u8981\u305d\u3046\u3067\u3059\uff0e
\nDebian sid amd64\u74b0\u5883\u306b.deb\u30d1\u30c3\u30b1\u30fc\u30b8\u3067\u5c0e\u5165\u3057\u3066\u307f\u307e\u3057\u305f\uff0e
\n$ wget -c https://chawan.net/dl/chawan-0-2-0-amd64.deb (1)\n$ sha256sum ./chawan-0-2-0-amd64.deb\nba3ff4e24a5bf09919caba1cdc4f50b0cbf862f8433f5ea43d5391c1e04eceda ./chawan-0-2-0-amd64.deb\n$ sha512sum ./chawan-0-2-0-amd64.deb\ne941b880c179df8da7eb4cf7a8050c75ef8a1cdfe629aff8287893f4308071454bf7fb54b4054a5ab99330610b17eca12e7f23a71ffc956d613329365d3c7e17 ./chawan-0-2-0-amd64.deb\n$ sudo apt install ./chawan-0-2-0-amd64.deb (2)\n$ chawan (3)\nbash: chawan: command not found\n$ dpkg -L chawan | grep /bin/ (4)\n/usr/bin/cha\n/usr/bin/mancha\n$ cha\nChawan browser v0.2.0 (release, sandboxed)\nUsage: cha [options] [URL(s) or file(s)...]\nOptions:\n -- Interpret all following arguments as URLs\n -c, --css <stylesheet> Pass stylesheet (e.g. -c 'a{color: blue}')\n -d, --dump Print page to stdout\n -h, --help Print this usage message\n -o, --opt <config> Pass config options (e.g. -o 'page.q=\"quit()\"')\n -r, --run <script/file> Run passed script or file\n -v, --version Print version information\n -C, --config <file> Override config path\n -I, --input-charset <enc> Specify document charset\n -M, --monochrome Set color-mode to 'monochrome'\n -O, --display-charset <enc> Specify display charset\n -T, --type <type> Specify content mime type\n -V, --visual Visual startup mode\n$ cha --version\nChawan browser v0.2.0 (release, sandboxed by seccomp-bpf)\n$ mancha\nUsage:\nmancha [-M path] [[-s] section] -k keyword\nmancha [-M path] [[-s] section] name\nmancha -l file\n$ mancha cha\n :\n.deb\u3092\u5165\u624b
\n\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb
\nchwan\u30b3\u30de\u30f3\u30c9\u306f\u306a\u304b\u3063\u305f
\n\u30d0\u30a4\u30ca\u30ea\u3092\u63a2\u3059\u3068 cha \u3068 mancha \u304c\u898b\u3064\u304b\u3063\u305f
source\u304b\u3089\u306ebuild\u3082\u8a66\u3057\u3066\u307f\u307e\u3059\uff0e
\n\u30d1\u30c3\u30b1\u30fc\u30b8\u3067\u5c0e\u5165\u3057\u305fNim\u306f\u3061\u3087\u3063\u3068\u53e4\u305d\u3046\u3067\u3059\uff0e
\n$ /usr/bin/nim -V\nNim Compiler Version 1.6.14 [Linux: amd64]\nCompiled at 2024-04-25\nCopyright (c) 2006-2023 by Andreas Rumpf\n\nactive boot switches: -d:release\n
Nim 2.2.4\u3092\u8cb0\u3063\u3066\u304d\u3066PATH\u3092\u901a\u3057\u3066\u304a\u304d\u307e\u3059\uff0e
\n$ wget -c https://nim-lang.org/download/nim-2.2.4-linux_x64.tar.xz https://nim-lang.org/download/nim-2.2.4-linux_x64.tar.xz.sha256\n$ sha256sum -c nim-2.2.4-linux_x64.tar.xz.sha256\nnim-2.2.4-linux_x64.tar.xz: OK\n$ fuse-archive nim-2.2.4-linux_x64.tar.xz\nfuse-archive: Created mount point 'nim-2.2.4-linux_x64'\n$ export PATH=`pwd`/nim-2.2.4-linux_x64/nim-2.2.4/bin:$PATH\n$ which nim\n/home/matoken/Downloads/nim-2.2.4-linux_x64/nim-2.2.4/bin/nim\n$ nim -V\nNim Compiler Version 2.2.4 [Linux: amd64]\nCompiled at 2025-04-22\nCopyright (c) 2006-2025 by Andreas Rumpf\n\ngit hash: f7145dd26efeeeb6eeae6fff649db244d81b212d\nactive boot switches: -d:release\n
\u9069\u5f53\u306a\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\u3057\u3066Chawan\u306esource\u3092\u8cb0\u3063\u3066\u304d\u3066build\u3057\u307e\u3059\uff0e
\n$ cd ~/src\n$ git clone https://git.sr.ht/~bptato/chawan && cd chawan\n$ sudo apt install libssh2-1-dev libssl-dev libbrotli-dev pkg-config make\n$ make\n$ ./cha\nChawan browser v0.3 (release, sandboxed)\nUsage: cha [options] [URL(s) or file(s)...]\nOptions:\n -- Interpret all following arguments as URLs\n -c, --css <stylesheet> Pass stylesheet (e.g. -c 'a{color: blue}')\n -d, --dump Print page to stdout\n -h, --help Print this usage message\n -o, --opt <config> Pass config options (e.g. -o 'page.q=\"quit()\"')\n -r, --run <script/file> Run passed script or file\n -v, --version Print version information\n -C, --config <file> Override config path\n -I, --input-charset <enc> Specify document charset\n -M, --monochrome Set color-mode to 'monochrome'\n -O, --display-charset <enc> Specify display charset\n -T, --type <type> Specify content mime type\n -V, --visual Visual startup mode\n$ ./cha -v\nChawan browser v0.3 (release, sandboxed by seccomp-bpf)\nSingle-Board Computer\u306eRaspberry Pi\u3067\u3082\u8a66\u3057\u305f\u3044\u306e\u3067\u3053\u3061\u3089\u3067\u3082build\u3092\u8a66\u3057\u307e\u3059\uff0e
\nLinux armhf\u306eNim\u30d0\u30a4\u30ca\u30ea\u306f\u516c\u5f0f\u306b\u898b\u5f53\u305f\u3089\u306a\u3044\u306e\u3067\u3053\u3061\u3089\u306eNightly\u306e\u3082\u306e\u3092\u4f7f\u3044\u307e\u3057\u305f\uff0e
\n$ wget -c https://github.com/nim-lang/nightlies/releases/download/2025-04-22-version-2-2-f7145dd26efeeeb6eeae6fff649db244d81b212d/nim-2.2.4-linux_armv7l.tar.xz\n$ tar tvf nim-2.2.4-linux_armv7l.tar.xz\n$ tar xvf nim-2.2.4-linux_armv7l.tar.xz\n$ export PATH=$PATH:`pwd`/nim-2.2.4/bin\n$ which nim\n/home/matoken/Downloads/nim-2.2.4/bin/nim\n$ cd ~/src\n$ git clone https://git.sr.ht/~bptato/chawan && cd chawan\n$ sudo apt install libssh2-1-dev libssl-dev libbrotli-dev pkg-config make\n$ make\n$ ./cha --version\nChawan browser v0.3 (release, sandboxed by seccomp-bpf)\n
| \n Note \n | \n\n \n \n\u624b\u5143\u306e\u74b0\u5883\u3067\u306f\u30d1\u30c3\u30b1\u30fc\u30b8\u5c0e\u5165\u6642\u306b\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u4f9d\u5b58\u95a2\u4fc2\u306e\u30a8\u30e9\u30fc\u3068\u306a\u308a\u307e\u3057\u305f\uff0e \n\n \n\n \nThe following packages have unmet dependencies:\n zlib1g-dev : Depends: zlib1g (= 1:1.2.13.dfsg-1) but 1:1.2.13.dfsg-1+rpt1 is to be installed\nE: Unable to correct problems, you have held broken packages.\n \n \n\u3068\u308a\u3042\u3048\u305a\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u6307\u5b9a\u3057\u3066\u5165\u308c\u76f4\u3057\u3066\u56de\u907f\u3067\u304d\u307e\u3057\u305f\uff0e \n\n \n\n \n$ sudo apt install zlib1g=1:1.2.13.dfsg-1\n | \n
$ cha\nChawan browser v0.2.0 (release, sandboxed)\nUsage: cha [options] [URL(s) or file(s)...]\nOptions:\n -- Interpret all following arguments as URLs\n -c, --css <stylesheet> Pass stylesheet (e.g. -c 'a{color: blue}')\n -d, --dump Print page to stdout\n -h, --help Print this usage message\n -o, --opt <config> Pass config options (e.g. -o 'page.q=\"quit()\"')\n -r, --run <script/file> Run passed script or file\n -v, --version Print version information\n -C, --config <file> Override config path\n -I, --input-charset <enc> Specify document charset\n -M, --monochrome Set color-mode to 'monochrome'\n -O, --display-charset <enc> Specify display charset\n -T, --type <type> Specify content mime type\n -V, --visual Visual startup mode\n\u3068\u308a\u3042\u3048\u305a cha $URL \u3068\u3044\u3046\u611f\u3058\u3067url\u3092\u6307\u5b9a\u3057\u3066\u8d77\u52d5\u3059\u308b\u3068\u30a6\u30a7\u30d6\u30da\u30fc\u30b8\u304c\u8868\u793a\u3067\u304d\u307e\u3059\uff0e
\n\u65e2\u5b9a\u5024\u3067\u306fCSS\u306f\u8a8d\u8b58\u3057\u307e\u3059\u304c\uff0cJavaScript\u3084\u753b\u50cf\u306f\u4f7f\u3048\u307e\u305b\u3093\uff0e
\u53f3\u30af\u30ea\u30c3\u30af\u304b\u3089\u306e\u30e1\u30fc\u30cb\u30e5\u30fc\u3084\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8\u3067\u6709\u52b9\u306b\u3059\u308b\u3053\u3068\u3082\u51fa\u6765\u307e\u3059\u304c\u9762\u5012\u306a\u306e\u3067\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3067\u8a2d\u5b9a\u3057\u307e\u3059\uff0e
\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Select text (v) \u2502\n\u2502 Copy selection (y) \u2502\n\u2502 Previous buffer (,) \u2502\n\u2502 Next buffer (.) \u2502\n\u2502 Discard buffer (D) \u2502\n\u2502 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2502\n\u2502 View image (I) \u2502\n\u2502 Peek (u) \u2502\n\u2502 Copy link (yu) \u2502\n\u2502 Copy image link (yI) \u2502\n\u2502 Paste link (M-p) \u2502\n\u2502 Reload (U) \u2502\n\u2502 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2502\n\u2502 Save link (sC-m) \u2502\n\u2502 View source (\\) \u2502\n\u2502 Edit source (sE) \u2502\n\u2502 Save source (sS) \u2502\n\u2502 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2502\n\u2502 Linkify URLs (:) \u2502\n\u2502 Toggle images (M-i) \u2502\n\u2502 Toggle JS & reload (M-j) \u2502\n\u2502 Toggle cookie & reload (M-k) \u2502\n\u2502 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2502\n\u2502 Bookmark page (M-a) \u2502\n\u2502 Open bookmarks (M-b) \u2502\n\u2502 Open history (C-h) \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n
\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306f
\n~/.chawan/config.toml \u82e5\u3057\u304f\u306f ~/.config/chawan/config.toml \u304c\u4f7f\u3048\u308b\u3088\u3046\u3067\u3059\uff0e
\ncha-config(5) \u3092\u898b\u306a\u304c\u3089\u8a2d\u5b9a\u3059\u308b\u3068\u826f\u3055\u305d\u3046\u3067\u3059\uff0e
\u3068\u308a\u3042\u3048\u305a\u753b\u50cf\u3068JavaScript\u3092\u6709\u52b9\u306b\u3059\u308b\u6700\u4f4e\u9650\u306e\u8a2d\u5b9a\u306f\u3053\u3093\u306a\u611f\u3058\u306e\u3088\u3046\u3067\u3059\uff0e
\n[buffer]\nimages = true\nscripting = true\n
\u305f\u3060\uff0cJavaScript\u306e\u8a2d\u5b9a\u306e scripting \u306f\u3053\u3053\u3067\u306f\u306a\u304fsite\u3054\u3068\u306e\u8a2d\u5b9a\u306e [siteconf] \u5185\u3067\u6709\u52b9\u306b\u3059\u308b\u306e\u3092\u5f37\u304f\u52e7\u3081\u307e\u3059\u3068\u306e\u3053\u3068\u306a\u306e\u3067\u3061\u3083\u3093\u3068\u5fc5\u8981\u306asite\u3060\u3051\u6709\u52b9\u306b\u3057\u305f\u307b\u3046\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e
\u3053\u306e\u72b6\u614b\u3067Sixel\u3084Kitty\u306b\u5bfe\u5fdc\u3057\u305fXTerm\u306a\u3069\u306e\u7aef\u672b\u3067\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068\u3053\u3093\u306a\u611f\u3058\u3067\u8868\u793a\u3055\u308c\u307e\u3059\uff0e
\nabout:chawan \u30ad\u30fc\u30d0\u30a4\u30f3\u30c9\u306a\u3069\u3082\u78ba\u8a8d\u3067\u304d\u307e\u3059


\n


\n

\u3068\u3044\u3046\u611f\u3058\u3067\u5c11\u3057\u8a66\u3057\u305f\u611f\u3058\u3067\u306fCSS\u3092\u8a8d\u8b58\u3059\u308b\u306e\u3067\u898b\u305f\u76ee\u304cw3m\u306a\u3069\u3068\u6bd4\u3079\u3066\u5927\u5206\u3044\u3044\u611f\u3058\u3067\u3059\uff0e\u30ab\u30fc\u30bd\u30eb\u304c\u80cc\u666f\u3068\u540c\u3058\u306b\u306a\u308a\u5834\u6240\u304c\u308f\u304b\u3089\u306a\u304f\u306a\u3063\u3066\u3057\u307e\u3063\u305f\u308a\u3057\u307e\u3059\u304c\uff0c\u30dd\u30a4\u30f3\u30c6\u30a3\u30f3\u30b0\u30c7\u30d0\u30a4\u30b9\u304c\u4f7f\u3048\u308b\u5834\u5408\u306f\u30af\u30ea\u30c3\u30af\u3067\u30ab\u30fc\u30bd\u30eb\u304c\u305d\u306e\u5834\u6240\u306b\u79fb\u52d5\u3059\u308b\u306e\u3067\u30a2\u30f3\u30ab\u90e8\u5206\u3092\u30af\u30ea\u30c3\u30af&Enter\u3067\u30ea\u30f3\u30af\u5148\u306b\u79fb\u52d5\u3067\u304d\u307e\u3059\uff0e\u753b\u50cf\u304c\u4e00\u90e8\u3057\u304b\u8868\u793a\u3055\u308c\u306a\u3044\u3068\u304d key:[M-i] \u3067\u753b\u50cf\u3092off → \u518d\u5ea6 key:[M-i] \u3067\u753b\u50cf\u3092\u518d\u5ea6on \u3068\u3059\u308b\u3068\u8aad\u307f\u8fbc\u307e\u308c\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\uff0e
\n\u56de\u7dda\u304c\u7d30\u3044\u5834\u5408\u30ea\u30e2\u30fc\u30c8\u306eVPS\u3067Chawan\u3092\u52d5\u304b\u3057\u3066\u7d50\u679c\u3060\u3051\u3092\u3082\u3089\u3046\u3088\u3046\u306b\u3059\u308b\u3068\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u6642\u9593\u304c\u77ed\u7e2e\u3055\u308c\u3066\u3044\u3044\u611f\u3058\u3067\u3059\uff0e\u305f\u3060\u3057\u52a0\u5897\u304c\u591a\u3044\u30b5\u30a4\u30c8\u3067\u30b9\u30af\u30ed\u30fc\u30eb\u3092\u591a\u7528\u3059\u308b\u5834\u5408\u306f\u3082\u305f\u3064\u304d\u307e\u3059\uff0e
\nSixel\u3067\u753b\u50cf\u304c\u5229\u7528\u3067\u304d\u308b\u6642\u306bSixel\u5bfe\u5fdctmux\u7d4c\u7531\u3067Chawan\u3092\u8d77\u52d5\u3059\u308b\u3068Chawan\u306eSixel\u753b\u50cf\u304c\u8868\u793a\u3055\u308c\u306a\u3044\u3088\u3046\u3067\u3059\uff0e\u540c\u3058\u7aef\u672b\u3067img2sixel\u306a\u3069\u306f\u554f\u984c\u306a\u3044\u306e\u3067Chawan\u5074\u306e\u554f\u984c\u3067\u3057\u3087\u3046\u304b?
\nJavaScript\u306f\u601d\u3063\u305f\u3088\u308a\u52d5\u304b\u306a\u3044\u306a\u3068\u3044\u3046\u611f\u3058\u3067\u3059\u304cCSS\u304c\u601d\u3063\u305f\u3088\u308a\u52a9\u304b\u308a\u307e\u3059\uff0eJavaScript\u306b\u3064\u3044\u3066\u306fQuickJS-NG\u3092\u4f7f\u3063\u3066\u3044\u308b\u306e\u3067\u3053\u3061\u3089\u306b\u671f\u5f85\u3067\u3059\uff0eECMAScript\u306e\u6a5f\u80fd\u6e96\u62e0\u306e\u9032\u6357\u72b6\u6cc1\u306f\u3053\u3061\u3089
\n\u305f\u3060\uff0c\u73fe\u6642\u70b9\u3067\u306fChawan\u306fLinux amd64\u74b0\u5883\u3067JavaScript/\u753b\u50cf\u6709\u52b9\u3067\u3082\u30e1\u30e2\u30ea\u5229\u7528\u91cf10MB\u524d\u5f8c\uff0e\u8272\u3005\u3068\u52d5\u304f\u3088\u3046\u306b\u306a\u308b\u3068\u3053\u306e\u8fba\u3082\u5897\u3048\u3066\u3044\u3063\u3066\u3057\u307e\u3046\u3067\u3057\u3087\u3046\u306d\u2026\u2026\uff0e
\n\u3068\u3044\u3046\u611f\u3058\u3067\u8efd\u91cf\u3067\u898b\u305f\u76ee\u3082\u3044\u3044\u306e\u3067\u3053\u308c\u304b\u3089\u306b\u3082\u671f\u5f85\u3057\u3064\u3064w3m\u306a\u3069\u3068\u4f75\u7528\u3057\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\nBBC\u306e\u5929\u6c17\u60c5\u5831\u3092\u53d6\u5f97\u3057\u3066TUI\u3067\u8868\u793a\u3059\u308bbbc_weather_scraper\u3068\u3044\u3046\u30c4\u30fc\u30eb\u3092\u77e5\u3063\u305f\u306e\u3067\u5c11\u3057\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e
\nBBC\u306e\u5929\u6c17\u60c5\u5831\u306f\u7d30\u304b\u306a\u571f\u5730\u306b\u306f\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u305b\u3093\u304c\u5168\u4e16\u754c\u306e\u5929\u6c17\u304c\u78ba\u8a8d\u3067\u304d\uff0conion site\u3082\u3042\u3063\u3066\u4fbf\u5229\u3067\u3059\uff0e
\n
$ git clone https://github.com/leonmavr/bbc_weather_scraper\n$ cd bbc_weather_scraper\n$ python -m venv venv\n$ source venv/bin/activate\n$ pip install -r requirements.txt\n
$ ./scraper.py\nTraceback (most recent call last):\n File \"/home/matoken/src/bbc_weather_scraper/./scraper.py\", line 3, in <module>\n from hourly import fmt_day_hourly\n File \"/home/matoken/src/bbc_weather_scraper/hourly.py\", line 1, in <module>\n import requests\nModuleNotFoundError: No module named 'requests'\n
requests \u304c\u8db3\u308a\u306a\u3044\u3088\u3046\u306a\u306e\u3067\uff0crequirements.txt \u306b requests \u3092\u8ffd\u52a0\u3057\u3066 pip install -r requirements.txt \u3092\u518d\u5b9f\u884c\uff0e
$ ./scraper.py\nTraceback (most recent call last):\n File \"/home/matoken/src/bbc_weather_scraper/./scraper.py\", line 8, in <module>\n from pynput import keyboard\nModuleNotFoundError: No module named 'pynput'\n
\u4eca\u5ea6\u306f pynput \u304c\u8db3\u308a\u306a\u3044\u3088\u3046\u306a\u306e\u3067 requirements.txt \u306b\u8ffd\u52a0\u3057\u3066 pip install -r requirements.txt \u3092\u518d\u5b9f\u884c\uff0e
\u3053\u308c\u3067\u52d5\u4f5c\u3059\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e
\nrequirements.txt$ git diff\ndiff --git a/requirements.txt b/requirements.txt\nindex b6942e8..9172c97 100644\n--- a/requirements.txt\n+++ b/requirements.txt\n@@ -1,3 +1,5 @@\n beautifulsoup4==4.12.3\n wcwidth==0.2.13\n geopy\n+requests\n+pynput\n
| \n Note \n | \n\n\u5831\u544a\u3057\u305f\u306e\u3067\u4fee\u6b63\u3055\u308c\u307e\u3057\u305f\uff0e\n | \n
\u5f15\u6570\u306a\u3057\u3067\u5b9f\u884c\u3059\u308b\u3068 city_ids.dat \u5185\u304b\u3089\u8fd1\u304f\u3067\u3042\u308d\u3046\u5834\u6240\u304c\u9078\u3070\u308c\u307e\u3059\uff0e
\nKagoshima\u306a\u3069BBC\u306b\u306f\u3042\u308b\u3051\u308c\u3069\u3053\u306e\u30ea\u30b9\u30c8\u306b\u306a\u3044\u5834\u6240\u306e\u5834\u5408\u4ee5\u4e0b\u306e\u30da\u30fc\u30b8\u304b\u3089\u63a2\u3057\u3066URL\u306e\u6700\u5f8c\u306eID\u3092\u30e1\u30e2\u3057\u307e\u3059\uff0eKagoshima\u306e\u5834\u5408\uff0c URL\u306f https://www.bbc.com/weather/6300348 \u3067\uff0cID\u306f 6300348 \u3067\u3059\uff0e
city_ids.dat \u306b\u540d\u524d\u3068\u3053\u306eID\u3092\u8ffd\u52a0\u3057\u307e\u3059\uff0e
Kagoshima: 6300348\n
\u5f15\u6570\u306b\u540d\u524d\u3092\u66f8\u304f\u3053\u3068\u3067\u6307\u5b9a\u3057\u305f\u5834\u6240\u304c\u958b\u3051\u307e\u3059\uff0e
\n$ ./scraper.py Kagoshima\n
\u66f4\u306b\u7def\u5ea6\uff0c\u7d4c\u5ea6\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\uff0e
\nKagoshima: 6300348: 31.801837, 130.719404\n
\u81ea\u5206\u306e\u74b0\u5883\u3067\u306f\u7269\u7406\u7684\u306b\u306fKagoshima\u304c\u8fd1\u3044\u306e\u3067\u3059\u304c\uff0cTokyo\u306b\u306a\u3063\u3066\u3057\u307e\u3044\u307e\u3059\uff0e
\n\u3053\u308c\u306f\u56de\u7dda\u306b\u3088\u308b\u306e\u3060\u3068\u601d\u3044\u307e\u3059\uff0e
\u8d77\u52d5\u3057\u305f\u3089wasd\u3067\u65e5\u306b\u3061\u3092\u79fb\u52d5\uff0cf\u3067\u8a73\u7d30\u3092\u958b\u3051\u307e\u3059\uff0ex\u3067\u623b\u308a\uff0cq\u3067\u7d42\u4e86\u3067\u3059\uff0e
\n\u52d5\u4f5c\u3059\u308b\u3088\u3046\u306b\u306a\u3063\u305f\u306e\u3067\u3059\u304c\uff0c\u4f55\u3082\u3057\u306a\u304f\u3066\u3082\u7d30\u304b\u304f\u30d5\u30e9\u30c3\u30b7\u30e5\u3055\u308c\u3066\u898b\u3065\u3089\u3044\u3067\u3059\uff0e
\ndemo\u3067\u306f\u305d\u3093\u306a\u3053\u3068\u306f\u306a\u3055\u305d\u3046\u306a\u306e\u3067\u306a\u306b\u304b\u306e\u74b0\u5883\u304c\u60aa\u3044\u306e\u304b\u3082\u3057\u308c\u307e\u305b\u3093\uff0e
$ git log --pretty=oneline -1\ne648ad41b5d192ff2e21bebb18feece7981ef4de (HEAD -> master, origin/master, origin/HEAD) Add requirements\n$ python --version\nPython 3.13.3\n$ dpkg-query -W python3 python3-venv python3-pip\npython3 3.13.3-1\npython3-pip 25.1+dfsg-1\npython3-venv 3.13.3-1\n$ lsb_release -a\nNo LSB modules are available.\nDistributor ID: Debian\nDescription: Debian GNU/Linux trixie/sid\nRelease: n/a\nCodename: trixie\n$ arch\nx86_64\n
Bluetuith \u3068\u3044\u3046 TUI \u306e Bluetooth \u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u3092\u77e5\u3063\u305f\u306e\u3067\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e
\n\n
terminal \u3067 Bluetooth \u8a2d\u5b9a\u3092\u884c\u3046\u5834\u5408\uff0c\u3044\u3064\u3082\u306f bluez \u306e bluetoothctl \u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u3063\u3066\u3044\u307e\u3059\uff0e\u3053\u308c\u3067\u305d\u3046\u56f0\u3063\u3066\u3044\u306a\u3044\u306e\u3067\u3059\u304c\uff0c TUI \u306e Bluetuith \u3092\u77e5\u3063\u305f\u306e\u3067\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e
\nGo\u88fd MIT license \u3067\u3059\uff0e
\u5c0e\u5165\u306f go install \u3067\u3055\u304f\u3063\u3068\u5165\u308a\u307e\u3057\u305f\uff0eGitHub \u306e release \u306b Linux\u7248 i386/amd64, armv5/armv6/armv7/arm64 \u306e\u30d0\u30a4\u30ca\u30ea\u304c\u3042\u308b\u306e\u3067\u305d\u3061\u3089\u3082\u304a\u624b\u8efd\u3067\u3059\uff0e
\n$ go install -v github.com/darkhz/bluetuith@latest\n$ which bluetuith\n/home/matoken/go/bin/bluetuith\n$ bluetuith\n
$ wget https://github.com/darkhz/bluetuith/releases/download/v0.2.3/bluetuith_0.2.3_Linux_armv7.tar.gz \\\n https://github.com/darkhz/bluetuith/releases/download/v0.2.3/checksums.txt (1)\n$ sha256sum --ignore-missing -c checksums.txt (2)\nbluetuith_0.2.3_Linux_armv7.tar.gz: OK\n$ tar tvf bluetuith_0.2.3_Linux_armv7.tar.gz (3)\n-rw-r--r-- darkhz/darkhz 1064 2024-04-15 22:41 LICENSE\n-rwxr-xr-x darkhz/darkhz 8650904 2024-08-12 20:13 bluetuith\n$ tar xvf bluetuith_0.2.3_Linux_armv7.tar.gz -C ~/bin/ bluetuith (4)\nbluetuith\n$ bluetuith\n
GitHub release \u304b\u3089 armv7\u30d0\u30a4\u30ca\u30ea\u3068 checksum \u3092\u5165\u624b
\n\u30c1\u30a7\u30c3\u30af\u30b5\u30e0\u78ba\u8a8d
\narchive \u78ba\u8a8d
\n\u30d0\u30a4\u30ca\u30ea\u3092\u597d\u307f\u306e\u5834\u6240\u306b\u5c55\u958b
\nBluetuith \u3092\u8d77\u52d5\u3059\u308b\u3068 TUI \u306e\u753b\u9762\u3067\u5927\u307e\u304b\u306a\u64cd\u4f5c\u65b9\u6cd5\u3082\u66f8\u304b\u308c\u3066\u3044\u307e\u3059\uff0e ? key \u3067 help \u3092\u8868\u793a\u3059\u308b\u3068\u3053\u3093\u306a\u611f\u3058\uff0e
\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Help [X]\u2502\n\u2502\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2502\n\u2502Device Screen \u2502\n\u2502Open the menu Alt+m \u2502\n\u2502Navigate between menus Tab \u2502\n\u2502Navigate between devices/options Up/Down \u2502\n\u2502Toggle adapter power state o \u2502\n\u2502Toggle discoverable state S \u2502\n\u2502Toggle pairable state P \u2502\n\u2502Toggle scan (discovery state) s \u2502\n\u2502Change adapter a \u2502\n\u2502Send files f \u2502\n\u2502Connect to network n \u2502\n\u2502Progress view v \u2502\n\u2502Show/Hide player m/M \u2502\n\u2502Show device information i \u2502\n\u2502Connect to selected device c \u2502\n\u2502Pair with selected device p \u2502\n\u2502Trust selected device t \u2502\n\u2502Remove device from adapter d \u2502\n\u2502Cancel operation Ctrl+X \u2502\n\u2502Show help ? \u2502\n\u2502Quit Q \u2502\n\u2502 \u2502\n\u2502File Picker \u2502\n\u2502Navigate between directory entries Up/Down \u2502\n\u2502Enter/Go back a directory Right/Left \u2502\n\u2502Select one file Space \u2502\n\u2502Invert file selection a \u2502\n\u2502Select all files A \u2502\n\u2502Refresh current directory Ctrl+R \u2502\n\u2502Toggle hidden files h \u2502\n\u2502Confirm file(s) selection Ctrl+S \u2502\n\u2502Exit Esc \u2502\n\u2502 \u2502\n\u2502Progress View \u2502\n\u2502Navigate between transfers Up/Down \u2502\n\u2502Suspend transfer z \u2502\n\u2502Resume transfer g \u2502\n\u2502Cancel transfer x \u2502\n\u2502Exit Esc \u2502\n\u2502 \u2502\n\u2502Media Player \u2502\n\u2502Toggle play/pause Up/Down \u2502\n\u2502Next > \u2502\n\u2502Previous < \u2502\n\u2502Rewind Right \u2502\n\u2502Fast forward Left \u2502\n\u2502Stop ] \u2502\n\u2502 \u2502\n\u2502Device Screen \u2502\n\u2502Open the menu Alt+m \u2502\n\u2502Navigate between menus Tab \u2502\n\u2502Navigate between devices/options Up/Down \u2502\n\u2502Toggle adapter power state o \u2502\n\u2502Toggle discoverable state S \u2502\n\u2502Toggle pairable state P \u2502\n\u2502Toggle scan (discovery state) s \u2502\n\u2502Change adapter a \u2502\n\u2502Send files f \u2502\n\u2502Connect to network n \u2502\n\u2502Progress view v \u2502\n\u2502Show/Hide player m/M \u2502\n\u2502Show device information i \u2502\n\u2502Connect to selected device c \u2502\n\u2502Pair with selected device p \u2502\n\u2502Trust selected device t \u2502\n\u2502Remove device from adapter d \u2502\n\u2502Cancel operation Ctrl+X \u2502\n\u2502Show help ? \u2502\n\u2502Quit Q \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n
alt+m \u3067\u4e0a\u90e8\u306e Anapter \u306e\u30e1\u30cb\u30e5\u30fc\u3092\u958b\u304f\u3068\u3053\u3093\u306a\u611f\u3058\u3067\uff0c
[Adapter] [Device]\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502Power Off o \u2502\n\u2502Discoverable On S \u2502\n\u2502Pairable Off P \u2502\n\u2502Stop Scan s \u2502\n\u2502Change a \u2502\n\u2502View Downloads v \u2502\n\u2502Hide Media Player M \u2502\n\u2502Quit Q \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n
\u66f4\u306b\u305d\u3053\u304b\u3089 tab \u3067 Device \u3092\u958b\u304f\u3068\u3053\u3093\u306a\u611f\u3058\u3067\u3059\uff0e
[Device]\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502Connect c \u2502\n\u2502Pair p \u2502\n\u2502Untrust t \u2502\n\u2502Block b \u2502\n\u2502Send f \u2502\n\u2502Network Options n \u2502\n\u2502Audio Profiles A \u2502\n\u2502Show Media Player m \u2502\n\u2502Info i \u2502\n\u2502Remove d \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n
\u3088\u304f\u4f7f\u3046\u30da\u30a2\u30ea\u30f3\u30b0\u306f s \u3067\u30b9\u30ad\u30e3\u30f3\u3092\u884c\u3044\uff0c\u5bfe\u8c61\u30c7\u30d0\u30a4\u30b9\u3092\u9078\u3093\u3067 p \u3067\u30da\u30a2\u30ea\u30f3\u30b0\uff0e
\nt \u3067 Trusted \uff0e
\nc \u3067\u63a5\u7d9a\uff0c\u5207\u65ad\uff0e
\u30aa\u30fc\u30c7\u30a3\u30aa\u30c7\u30d0\u30a4\u30b9\u3060\u3068 A \u3067\u30aa\u30fc\u30c7\u30a3\u30aa\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u306e\u9078\u629e\u3082\u51fa\u6765\u307e\u3059\uff0e
\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Off \u2502\n\u2502 High Fidelity Playback (A2DP Sink, codec SBC) \u2502\n\u2502 High Fidelity Playback (A2DP Sink, codec SBC-XQ)\u2502\n\u2502\u2022 Headset Head Unit (HSP/HFP, codec CVSD) \u2502\n\u2502 Headset Head Unit (HSP/HFP, codec mSBC) \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n
\u30d5\u30a1\u30a4\u30eb\u9001\u53d7\u4fe1\u3082\u51fa\u6765\u307e\u3059\uff0e\u30d5\u30a1\u30a4\u30eb\u53d7\u4fe1\u306e\u3068\u304d\u306e\u683c\u7d0d\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f ~/bluetuith/ \u306e\u4e0b\u306b\u7f6e\u304b\u308c\u307e\u3059\uff0e
\n\u4f46\u3057\uff0c\u30d5\u30a1\u30a4\u30eb\u53d7\u4fe1\u306f Bluetuith \u304c\u8d77\u52d5\u3057\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff0e
Bluetuith \u306e\u7d42\u4e86\u306f Q (shift+q) \u3067\u7d42\u4e86\u3057\u307e\u3059\uff0e
bluetoothctl \u3088\u308a\u4f7f\u3044\u3084\u3059\u3044\u306e\u306f\u3082\u3061\u308d\u3093\u3067\u3059\u304c\uff0cBluetuith \u306e\u65b9\u306f scan \u3057\u305f\u5f8c\u306a\u3069\u306b MAC \u30a2\u30c9\u30ec\u30b9\u3067\u306f\u306a\u304f\u540d\u524d\u3067\u8868\u793a\u3055\u308c\u308b\u306e\u3067\u8907\u6570\u30c7\u30d0\u30a4\u30b9\u306e\u6271\u3044\u306e\u3068\u304d\u306b\u3068\u3066\u3082\u4fbf\u5229\u3067\u3059\uff0e
Rust\u88fd\u306e\u540c\u3058\u3088\u3046\u306a bluetui \u3068\u3044\u3046\u3082\u306e\u3082\u3042\u308b\u3088\u3046\u306a\u306e\u3067\u3053\u3061\u3089\u3082\u8a66\u3057\u3066\u307f\u305f\u3044\u3067\u3059\uff0e
\n$ ls ~/go/pkg/mod/github.com/darkhz/\nbluetuith@v0.2.2 tview@v0.0.0-20240308094543-6078a888ff79\n$ dpkg-query -W golang bluez bluetooth\nbluetooth 5.77-1\nbluez 5.77-1\ngolang:amd64 2:1.22~3\n$ lsb_release -dr\nDescription: Debian GNU/Linux trixie/sid\nRelease: n/a\n$ arch\nx86_64\n
$ bluetuith --version\nBluetuith v0.2.3 (5780d74)\n$ dpkg-query -W bluez\nbluez 5.66-1+rpt1+deb12u2\n$ lsb_release -dr\narchNo LSB modules are available.\nDescription: Raspbian GNU/Linux 12 (bookworm)\nRelease: 12\n$ arch\narmv7l\n$ cat /sys/firmware/devicetree/base/model ;echo\nRaspberry Pi 3 Model B Rev 1.2\n
Textual\u3068\u3044\u3046TUI\u306ePython\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u5229\u7528\u3057\u305fMarkdown\u30d6\u30e9\u30a6\u30b6\u306eTextual Markdown Browser \u3068\u3044\u3046\u3082\u306e\u3092\u898b\u304b\u3051\u305f\u306e\u3067\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e
\n\n
$ python3 -m venv venv\n$ source venv/bin/activate\n$ pip install textual-markdown\n
$ python3 -m textual_markdown ./README.md\n
\u30de\u30a6\u30b9\u30db\u30a4\u30fc\u30eb\u3067\u306e\u30b9\u30af\u30ed\u30fc\u30eb\u306b\u3082\u5bfe\u5fdc\u3057\u3066\u3044\u3066\u52d5\u4f5c\u304c\u3059\u308b\u3059\u308b\u3068\u3044\u3044\u611f\u3058\u3067\u3059\uff0eTOC\u304b\u3089\u306e\u30da\u30fc\u30b8\u5185\u30ea\u30f3\u30af\u3082\u30de\u30a6\u30b9\u30af\u30ea\u30c3\u30af\u3067\u52d5\u4f5c\u3057\u307e\u3059\uff0e\u3068\u3044\u3044\u611f\u3058\u306a\u306e\u3067\u3059\u304c\uff0c\u4ee5\u4e0b\u306e\u3088\u3046\u306bMarkdown\u306b\u3088\u308a\u30a8\u30e9\u30fc\u306b\u306a\u3063\u3066\u52d5\u4f5c\u3057\u306a\u3044\u3082\u306e\u304c\u591a\u3044\u3067\u3059\uff0e
\n$ python3 -m textual_markdown ~/src/reveal.js/README.md\n\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Traceback (most recent call last) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 /home/matoken/.local/lib/python3.10/site-packages/textual_markdown/widgets.py:601 \u2502\n\u2502 in on_tocupdated \u2502\n\u2502 \u2502\n\u2502 598 \u2502 \u2502 yield MarkdownDocument() \u2502\n\u2502 599 \u2502 \u2502\n\u2502 600 \u2502 def on_tocupdated(self, message: TOCUpdated) -> None: \u2502\n\u2502 \u2771 601 \u2502 \u2502 self.query_one(MarkdownTOC).toc = message.toc \u2502\n\u2502 602 \u2502 \u2502 message.stop() \u2502\n\u2502 603 \u2502 \u2502\n\u2502 604 \u2502 def on_tocselected(self, message: TOCSelected) -> None: \u2502\n\u2502 \u2502\n\u2502 \u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 locals \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e \u2502\n\u2502 \u2502 message = TOCUpdated(MarkdownDocument()) \u2502 \u2502\n\u2502 \u2502 self = MarkdownBrowser(classes={'-show-toc'}) \u2502 \u2502\n\u2502 \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f \u2502\n\u2502 \u2502\n\u2502 /home/matoken/.local/lib/python3.10/site-packages/textual_markdown/widgets.py:525 \u2502\n\u2502 in watch_toc \u2502\n\u2502 \u2502\n :\n\u73fe\u6bb5\u968e\u3067\u306f\u8868\u793a\u3067\u306a\u3044Markdown\u304c\u591a\u3044\u306e\u3067html\u306b\u5909\u63db\u3057\u3066\u30d6\u30e9\u30a6\u30b6\u3067\u898b\u308b\u307b\u3046\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e
\n$ pandoc -f markdown -t html ~/src/reveal.js/README.md | w3m -T text/html\n$ pandoc -f markdown -t html ~/src/reveal.js/README.md | lynx -stdin\n
$ pip3 show textual-markdown\nName: textual-markdown\nVersion: 0.1.1\nSummary: Markdown viewer widgets for Textual\nHome-page:\nAuthor: Will McGugan\nAuthor-email: willmcgugan@gmail.com\nLicense: MIT\nLocation: /home/matoken/.local/lib/python3.10/site-packages\nRequires: markdown-it-py, textual\nRequired-by:\n$ dpkg-query -W python3 python3-pip pandoc lynx w3m\nlynx 2.9.0dev.11-1\npandoc 2.17.1.1-1.1\npython3 3.10.6-3+b1\npython3-pip 22.3.1+dfsg-1\nw3m 0.5.3+git20220429-1+b1\n$ lsb_release --all\nDistributor ID: Debian\nDescription: Debian GNU/Linux bookworm/sid\nRelease: n/a\nCodename: bookworm\n$ arch\nx86_64\n
TUI\u3067\u52d5\u4f5c\u3059\u308bPython\u88fd\u306escript\u3092\u898b\u304b\u3051\u305f\u306e\u3067\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e
\n\n
$ git clone https://github.com/pryme-svg/periodic-table-tui\n$ cd ./periodic-table-tui\n$ ./periodic-table.py\n\u7aef\u672b\u30b5\u30a4\u30ba\u304c\u5c0f\u3055\u3044\u3068 Terminal too small! \u3068\u8a00\u308f\u308c\u3066\u52d5\u4f5c\u3057\u307e\u305b\u3093\uff0e
\nsource\u3092\u898b\u308b\u3068\u7e26\u6a2a35×95\u5fc5\u8981\u305d\u3046\u3067\u3059\uff0e
` min_h, min_w = 35, 95`
\n\u30ab\u30fc\u30bd\u30eb\u3067\u79fb\u52d5\uff0c\u5143\u7d20\u540d(\u3084\u7565\u53f7)\u3092\u5165\u529b\u3057\u3066\u30a8\u30f3\u30bf\u30fc\u3067\u305d\u306e\u5143\u7d20\u306b\u79fb\u52d5\u3057\u307e\u3059\uff0eCtrl+c\u3067\u7d42\u4e86\u3057\u307e\u3059\uff0e
\n$ git log -1|head -1\ncommit 8fe6b458cc889fe8c08c8207cd9448bb66c4dfd2\n$ dpkg-query -W python3\npython3\t3.9.2-3\n$ lsb_release -dr\nDescription:\tDebian GNU/Linux 11 (bullseye)\nRelease:\t11\n$ arch\nx86_64\n