Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package bottom for openSUSE:Factory checked in at 2025-11-18 15:37:41 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/bottom (Old) and /work/SRC/openSUSE:Factory/.bottom.new.2061 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "bottom" Tue Nov 18 15:37:41 2025 rev:29 rq:1318308 version:0.11.4 Changes: -------- --- /work/SRC/openSUSE:Factory/bottom/bottom.changes 2025-11-09 21:12:35.006892799 +0100 +++ /work/SRC/openSUSE:Factory/.bottom.new.2061/bottom.changes 2025-11-18 15:39:28.842546584 +0100 @@ -1,0 +2,15 @@ +Mon Nov 17 10:19:53 UTC 2025 - Michael Vetter <[email protected]> + +- Update to 0.11.4: + Bug Fixes: + * #1859: Ensure average CPU is drawn on top in "All" mode. + * #1867: Fix network graph y-axis height cache not updating correctly. + * #1867: Fix network graph y-axis occasionally starting with a range of zero. + Other: + * #1862: Simplify cfg condition + * #1863: Replace bottom icon with a square version + * #1865: Improve help dialog width calculation. + * #1869: Add mise installation method to README +- Remove obscpio file, we already use the .tar.zst + +------------------------------------------------------------------- Old: ---- bottom-0.11.3.obscpio bottom-0.11.3.tar.zst New: ---- bottom-0.11.4.tar.zst ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ bottom.spec ++++++ --- /var/tmp/diff_new_pack.GzXzIT/_old 2025-11-18 15:39:30.890632906 +0100 +++ /var/tmp/diff_new_pack.GzXzIT/_new 2025-11-18 15:39:30.894633074 +0100 @@ -18,7 +18,7 @@ Name: bottom -Version: 0.11.3 +Version: 0.11.4 Release: 0 Summary: Yet another graphical process/system monitor License: Apache-2.0 AND MIT ++++++ _service ++++++ --- /var/tmp/diff_new_pack.GzXzIT/_old 2025-11-18 15:39:30.938634930 +0100 +++ /var/tmp/diff_new_pack.GzXzIT/_new 2025-11-18 15:39:30.942635098 +0100 @@ -3,7 +3,7 @@ <param name="url">https://github.com/ClementTsang/bottom.git</param> <param name="versionformat">@PARENT_TAG@</param> <param name="scm">git</param> - <param name="revision">0.11.3</param> + <param name="revision">0.11.4</param> <param name="match-tag">*</param> <param name="versionrewrite-pattern">(\d+\.\d+\.\d+)</param> <param name="versionrewrite-replacement">\1</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.GzXzIT/_old 2025-11-18 15:39:30.970636278 +0100 +++ /var/tmp/diff_new_pack.GzXzIT/_new 2025-11-18 15:39:30.974636447 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/ClementTsang/bottom.git</param> - <param name="changesrevision">e2e2bc5e22acfe2762f9db3fea60a73318d027cf</param></service></servicedata> + <param name="changesrevision">0e98e0239205f641df29d5fe0b1f439e9bd9c66c</param></service></servicedata> (No newline at EOF) ++++++ bottom-0.11.3.tar.zst -> bottom-0.11.4.tar.zst ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bottom-0.11.3/.all-contributorsrc new/bottom-0.11.4/.all-contributorsrc --- old/bottom-0.11.3/.all-contributorsrc 2025-11-06 16:26:15.000000000 +0100 +++ new/bottom-0.11.4/.all-contributorsrc 2025-11-16 22:36:20.000000000 +0100 @@ -636,6 +636,25 @@ "contributions": [ "doc" ] + }, + { + "login": "Tommimon", + "name": "Tommaso Montanari", + "avatar_url": "https://avatars.githubusercontent.com/u/37435103?v=4", + "profile": "https://github.com/Tommimon", + "contributions": [ + "design", + "ideas" + ] + }, + { + "login": "jylenhof", + "name": "Jean-Yves LENHOF", + "avatar_url": "https://avatars.githubusercontent.com/u/36410287?v=4", + "profile": "http://blog.lenhof.eu.org", + "contributions": [ + "doc" + ] } ], "contributorsPerLine": 7, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bottom-0.11.3/.github/ISSUE_TEMPLATE/bug_report.yml new/bottom-0.11.4/.github/ISSUE_TEMPLATE/bug_report.yml --- old/bottom-0.11.3/.github/ISSUE_TEMPLATE/bug_report.yml 2025-11-06 16:26:15.000000000 +0100 +++ new/bottom-0.11.4/.github/ISSUE_TEMPLATE/bug_report.yml 2025-11-16 22:36:20.000000000 +0100 @@ -81,7 +81,7 @@ It would also be helpful if you are not running [the latest version](https://github.com/ClementTsang/bottom/releases/latest) to try that as well to see if the issue has already been resolved. - placeholder: 0.11.3 + placeholder: 0.11.4 - type: textarea id: install diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bottom-0.11.3/.github/ci/rust_version.txt new/bottom-0.11.4/.github/ci/rust_version.txt --- old/bottom-0.11.3/.github/ci/rust_version.txt 2025-11-06 16:26:15.000000000 +0100 +++ new/bottom-0.11.4/.github/ci/rust_version.txt 2025-11-16 22:36:20.000000000 +0100 @@ -1 +1 @@ -1.91.0 \ No newline at end of file +1.91.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bottom-0.11.3/.github/workflows/ci.yml new/bottom-0.11.4/.github/workflows/ci.yml --- old/bottom-0.11.3/.github/workflows/ci.yml 2025-11-06 16:26:15.000000000 +0100 +++ new/bottom-0.11.4/.github/workflows/ci.yml 2025-11-16 22:36:20.000000000 +0100 @@ -48,7 +48,7 @@ uses: fkirc/skip-duplicate-actions@f75f66ce1886f00957d99748a42c724f4330bdcf # v5.3.1 with: skip_after_successful_duplicate: "true" - paths: '[".cargo/**", ".github/workflows/ci.yml", "sample_configs/**", "src/**", "tests/**", "build.rs", "Cargo.lock", "Cargo.toml", "clippy.toml", "rustfmt.toml", "Cross.toml"]' + paths: '[".cargo/**", ".github/workflows/ci.yml", ".github/ci", "sample_configs/**", "src/**", "tests/**", "build.rs", "Cargo.lock", "Cargo.toml", "clippy.toml", "rustfmt.toml", "Cross.toml"]' do_not_skip: '["workflow_dispatch", "push"]' # Runs rustfmt + tests + clippy on the main supported platforms. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bottom-0.11.3/.github/workflows/coverage.yml new/bottom-0.11.4/.github/workflows/coverage.yml --- old/bottom-0.11.3/.github/workflows/coverage.yml 2025-11-06 16:26:15.000000000 +0100 +++ new/bottom-0.11.4/.github/workflows/coverage.yml 2025-11-16 22:36:20.000000000 +0100 @@ -30,7 +30,7 @@ uses: fkirc/skip-duplicate-actions@f75f66ce1886f00957d99748a42c724f4330bdcf # v5.3.1 with: skip_after_successful_duplicate: "false" - paths: '["tests/**", "src/**", ".github/workflows/coverage.yml", ".cargo/**", "Cargo.toml", "Cargo.lock", "build.rs"]' + paths: '["tests/**", "src/**", ".github/workflows/coverage.yml", ".github/ci", ".cargo/**", "Cargo.toml", "Cargo.lock", "build.rs"]' do_not_skip: '["workflow_dispatch", "push"]' coverage: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bottom-0.11.3/.github/workflows/validate_schema.yml new/bottom-0.11.4/.github/workflows/validate_schema.yml --- old/bottom-0.11.3/.github/workflows/validate_schema.yml 2025-11-06 16:26:15.000000000 +0100 +++ new/bottom-0.11.4/.github/workflows/validate_schema.yml 2025-11-16 22:36:20.000000000 +0100 @@ -28,7 +28,7 @@ uses: fkirc/skip-duplicate-actions@f75f66ce1886f00957d99748a42c724f4330bdcf # v5.3.1 with: skip_after_successful_duplicate: "true" - paths: '["schema/**", "scripts/schema/**", ".github/workflows/validate_schema.yml", "src/bin/schema.rs", "Cargo.toml"]' + paths: '["schema/**", "scripts/schema/**", ".github/workflows/validate_schema.yml", ".github/ci", "src/bin/schema.rs", "Cargo.toml"]' do_not_skip: '["workflow_dispatch"]' test-build-documentation: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bottom-0.11.3/.gitignore new/bottom-0.11.4/.gitignore --- old/bottom-0.11.3/.gitignore 2025-11-06 16:26:15.000000000 +0100 +++ new/bottom-0.11.4/.gitignore 2025-11-16 22:36:20.000000000 +0100 @@ -12,6 +12,7 @@ flamegraphs/ rust-unmangle ./*.svg +flamegraph.svg *.data *.data.old diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bottom-0.11.3/CHANGELOG.md new/bottom-0.11.4/CHANGELOG.md --- old/bottom-0.11.3/CHANGELOG.md 2025-11-06 16:26:15.000000000 +0100 +++ new/bottom-0.11.4/CHANGELOG.md 2025-11-16 22:36:20.000000000 +0100 @@ -20,6 +20,19 @@ --- +## [0.11.4] - 2025-11-16 + +### Bug Fixes + +- [#1859](https://github.com/ClementTsang/bottom/pull/1859): Ensure average CPU is drawn on top in "All" mode. +- [#1867](https://github.com/ClementTsang/bottom/pull/1867): Fix network graph y-axis height cache not updating correctly. +- [#1867](https://github.com/ClementTsang/bottom/pull/1867): Fix network graph y-axis occasionally starting with a range of zero. + +### Other + +- [#1863](https://github.com/ClementTsang/bottom/pull/1863): Replace bottom icon with a square version. +- [#1865](https://github.com/ClementTsang/bottom/pull/1865): Improve help dialog width calculation. + ## [0.11.3] - 2025-11-06 ### Features diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bottom-0.11.3/Cargo.lock new/bottom-0.11.4/Cargo.lock --- old/bottom-0.11.3/Cargo.lock 2025-11-06 16:26:15.000000000 +0100 +++ new/bottom-0.11.4/Cargo.lock 2025-11-16 22:36:20.000000000 +0100 @@ -163,9 +163,9 @@ [[package]] name = "bitflags" -version = "2.9.4" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "block-buffer" @@ -178,7 +178,7 @@ [[package]] name = "bottom" -version = "0.11.3" +version = "0.11.4" dependencies = [ "anyhow", "assert_cmd", @@ -197,7 +197,7 @@ "dirs", "fern", "filedescriptor", - "hashbrown 0.16.0", + "hashbrown", "humantime", "indexmap", "indoc", @@ -436,7 +436,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "crossterm_winapi", "derive_more", "document-features", @@ -737,12 +737,6 @@ [[package]] name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - -[[package]] -name = "foldhash" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" @@ -788,24 +782,13 @@ [[package]] name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "allocator-api2", - "equivalent", - "foldhash 0.1.5", -] - -[[package]] -name = "hashbrown" version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" dependencies = [ "allocator-api2", "equivalent", - "foldhash 0.2.0", + "foldhash", ] [[package]] @@ -839,7 +822,7 @@ checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" dependencies = [ "equivalent", - "hashbrown 0.16.0", + "hashbrown", ] [[package]] @@ -907,7 +890,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12a3d6645acdef96d256c1f9fd3be7ecfa60d8457520a50bbd1600b6053f8173" dependencies = [ - "hashbrown 0.16.0", + "hashbrown", "portable-atomic", "thiserror 2.0.16", ] @@ -952,7 +935,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "libc", ] @@ -962,7 +945,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51a1679740111eb63b7b4cb3c97b1d5d9f82e142292a25edcfdb4120a48b3880" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", ] [[package]] @@ -995,11 +978,11 @@ [[package]] name = "lru" -version = "0.14.0" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f8cc7106155f10bdf99a6f379688f543ad6596a415375b36a59a054ceda1198" +checksum = "96051b46fc183dc9cd4a223960ef37b9af631b55191852a8274bfef064cda20f" dependencies = [ - "hashbrown 0.15.5", + "hashbrown", ] [[package]] @@ -1084,7 +1067,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cfg-if", "cfg_aliases 0.1.1", "libc", @@ -1096,7 +1079,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cfg-if", "cfg_aliases 0.2.1", "libc", @@ -1109,7 +1092,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cfg-if", "cfg_aliases 0.2.1", "libc", @@ -1181,7 +1164,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d5c6c0ef9702176a570f06ad94f3198bc29c524c8b498f1b9346e1b1bdcbb3a" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "libloading", "nvml-wrapper-sys", "static_assertions", @@ -1204,7 +1187,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", ] [[package]] @@ -1498,9 +1481,9 @@ [[package]] name = "ratatui" -version = "0.30.0-alpha.5" +version = "0.30.0-beta.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71365e96fb8f1350c02908e788815c5a57c0c1f557673b274a94edee7a4fe001" +checksum = "6c9f96d98eaa3ce9d7ed031916670ea79a3ce487f8365385b11bc69da69038ba" dependencies = [ "instability", "ratatui-core", @@ -1512,13 +1495,13 @@ [[package]] name = "ratatui-core" -version = "0.1.0-alpha.6" +version = "0.1.0-beta.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f836b2eac888da74162b680a8facdbe784ae73df3b0f711eef74bb90a7477f78" +checksum = "dc3634611dccc2110ab05a64fec77d26c5f0e0cb0c0bfecb291d9a15841aae91" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "compact_str", - "hashbrown 0.15.5", + "hashbrown", "indoc", "itertools 0.14.0", "kasuari", @@ -1532,10 +1515,11 @@ [[package]] name = "ratatui-crossterm" -version = "0.1.0-alpha.5" +version = "0.1.0-beta.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22f4a90548bf8ed759d226d621d73561110db23aee7b7dc4e12c39ac7132062f" +checksum = "fd7e4e028ac1cb4718f25ff039a476c8e2270a3021a614221f9fa2551abfa51c" dependencies = [ + "cfg-if", "crossterm", "instability", "ratatui-core", @@ -1543,9 +1527,9 @@ [[package]] name = "ratatui-macros" -version = "0.7.0-alpha.4" +version = "0.7.0-beta.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4c660248a5a9edf95698cf33dc36a82ae48a918594480cdada340d81584e0b" +checksum = "b59d6fd5d3796a0305d4bfb1e5f7b86db2f4968a8c69b439f379f73efa4495c3" dependencies = [ "ratatui-core", "ratatui-widgets", @@ -1553,9 +1537,9 @@ [[package]] name = "ratatui-termwiz" -version = "0.1.0-alpha.5" +version = "0.1.0-beta.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cbb5d7645e56f06ead2a49a72b9cc05022f0b215ec7cdf39d37ed94e9a73d69" +checksum = "2ec648e651a590a4e45c1e8d90a0ebbe324253ad410f34c8e1866a3e76c27240" dependencies = [ "ratatui-core", "termwiz", @@ -1563,12 +1547,12 @@ [[package]] name = "ratatui-widgets" -version = "0.3.0-alpha.5" +version = "0.3.0-beta.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388428527811be6da3e23157d951308d9eae4ce1b4d1d545a55673bbcdfb7326" +checksum = "5bf145c4da1f8e5c58957350985ace8facbbf394ddecc526cd33e7dcf5831c41" dependencies = [ - "bitflags 2.9.4", - "hashbrown 0.15.5", + "bitflags 2.10.0", + "hashbrown", "indoc", "instability", "itertools 0.14.0", @@ -1586,7 +1570,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", ] [[package]] @@ -1667,7 +1651,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys", @@ -1948,7 +1932,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cca424247104946a59dacd27eaad296223b7feec3d168a6dd04585183091eb0b" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "byteorder", "enum-as-inner", "libc", @@ -2027,7 +2011,7 @@ dependencies = [ "anyhow", "base64", - "bitflags 2.9.4", + "bitflags 2.10.0", "fancy-regex", "filedescriptor", "finl_unicode", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bottom-0.11.3/Cargo.toml new/bottom-0.11.4/Cargo.toml --- old/bottom-0.11.3/Cargo.toml 2025-11-06 16:26:15.000000000 +0100 +++ new/bottom-0.11.4/Cargo.toml 2025-11-16 22:36:20.000000000 +0100 @@ -1,6 +1,6 @@ [package] name = "bottom" -version = "0.11.3" +version = "0.11.4" repository = "https://github.com/ClementTsang/bottom" license = "MIT" description = "A customizable cross-platform graphical process/system monitor for the terminal. Supports Linux, macOS, and Windows." @@ -33,6 +33,9 @@ "codecov.yml", "CONTRIBUTING.md", "Cross.toml", + "debug.log", + "flamegraph.svg", + "profile.json.gz", "rustfmt.toml", ] edition = "2021" @@ -91,7 +94,7 @@ sysinfo = "=0.37.0" timeless = "0.0.14-alpha" toml_edit = { version = "0.23.6", features = ["serde"] } -tui = { version = "0.30.0-alpha.5", package = "ratatui", features = ["unstable-rendered-line-info"] } +tui = { version = "0.30.0-beta.0", package = "ratatui", features = ["unstable-rendered-line-info", "layout-cache"] } unicode-ellipsis = "0.3.0" unicode-segmentation = "1.12.0" unicode-width = "0.2.0" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bottom-0.11.3/README.md new/bottom-0.11.4/README.md --- old/bottom-0.11.3/README.md 2025-11-06 16:26:15.000000000 +0100 +++ new/bottom-0.11.4/README.md 2025-11-16 22:36:20.000000000 +0100 @@ -48,6 +48,7 @@ - [winget](#winget) - [Windows installer](#windows-installer) - [Conda](#conda) + - [mise](#mise) - [Pre-built binaries](#pre-built-binaries) - [Auto-completion](#auto-completion) - [Usage](#usage) @@ -163,8 +164,8 @@ rustup update stable # Option 1 - Download an archive from releases and install -curl -LO https://github.com/ClementTsang/bottom/archive/0.11.3.tar.gz -tar -xzvf 0.11.3.tar.gz +curl -LO https://github.com/ClementTsang/bottom/archive/0.11.4.tar.gz +tar -xzvf 0.11.4.tar.gz cargo install --path . --locked # Option 2 - Manually clone the repo and install @@ -216,20 +217,20 @@ ```bash # x86-64 -curl -LO https://github.com/ClementTsang/bottom/releases/download/0.11.3/bottom_0.11.3-1_amd64.deb -sudo dpkg -i bottom_0.11.3-1_amd64.deb +curl -LO https://github.com/ClementTsang/bottom/releases/download/0.11.4/bottom_0.11.4-1_amd64.deb +sudo dpkg -i bottom_0.11.4-1_amd64.deb # ARM64 -curl -LO https://github.com/ClementTsang/bottom/releases/download/0.11.3/bottom_0.11.3-1_arm64.deb -sudo dpkg -i bottom_0.11.3-1_arm64.deb +curl -LO https://github.com/ClementTsang/bottom/releases/download/0.11.4/bottom_0.11.4-1_arm64.deb +sudo dpkg -i bottom_0.11.4-1_arm64.deb # ARM -curl -LO https://github.com/ClementTsang/bottom/releases/download/0.11.3/bottom_0.11.3-1_armhf.deb -sudo dpkg -i bottom_0.11.3-1_armhf.deb +curl -LO https://github.com/ClementTsang/bottom/releases/download/0.11.4/bottom_0.11.4-1_armhf.deb +sudo dpkg -i bottom_0.11.4-1_armhf.deb # musl-based -curl -LO https://github.com/ClementTsang/bottom/releases/download/0.11.3/bottom-musl_0.11.3-1_amd64.deb -sudo dpkg -i bottom-musl_0.11.3-1_amd64.deb +curl -LO https://github.com/ClementTsang/bottom/releases/download/0.11.4/bottom-musl_0.11.4-1_amd64.deb +sudo dpkg -i bottom-musl_0.11.4-1_amd64.deb ``` ### Exherbo Linux @@ -261,8 +262,8 @@ For example: ```bash -curl -LO https://github.com/ClementTsang/bottom/releases/download/0.11.3/bottom-0.11.3-1.x86_64.rpm -sudo rpm -i bottom-0.11.3-1.x86_64.rpm +curl -LO https://github.com/ClementTsang/bottom/releases/download/0.11.4/bottom-0.11.4-1.x86_64.rpm +sudo rpm -i bottom-0.11.4-1.x86_64.rpm ``` ### Gentoo @@ -399,6 +400,14 @@ conda install bottom ``` +### mise + +bottom is available in [mise](https://github.com/jdx/mise). You can install it with something like: + +``` +mise use -g bottom@latest +``` + ### Pre-built binaries You can also use the pre-built release binaries: @@ -554,6 +563,10 @@ <td align="center" valign="top" width="14.28%"><a href="https://github.com/yahlia"><img src="https://avatars.githubusercontent.com/u/40295453?v=4?s=100" width="100px;" alt="yahlia"/><br /><sub><b>yahlia</b></sub></a><br /><a href="https://github.com/ClementTsang/bottom/commits?author=yahlia" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Bucket-Bucket-Bucket"><img src="https://avatars.githubusercontent.com/u/107044719?v=4?s=100" width="100px;" alt="Bucket-Bucket-Bucket"/><br /><sub><b>Bucket-Bucket-Bucket</b></sub></a><br /><a href="https://github.com/ClementTsang/bottom/commits?author=Bucket-Bucket-Bucket" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="http://marek.sierocinscy.pl"><img src="https://avatars.githubusercontent.com/u/2142811?v=4?s=100" width="100px;" alt="Marek Sierociński"/><br /><sub><b>Marek Sierociński</b></sub></a><br /><a href="https://github.com/ClementTsang/bottom/commits?author=marverix" title="Documentation">📖</a></td> + <td align="center" valign="top" width="14.28%"><a href="https://github.com/Tommimon"><img src="https://avatars.githubusercontent.com/u/37435103?v=4?s=100" width="100px;" alt="Tommaso Montanari"/><br /><sub><b>Tommaso Montanari</b></sub></a><br /><a href="#design-Tommimon" title="Design">🎨</a> <a href="#ideas-Tommimon" title="Ideas, Planning, & Feedback">🤔</a></td> + </tr> + <tr> + <td align="center" valign="top" width="14.28%"><a href="http://blog.lenhof.eu.org"><img src="https://avatars.githubusercontent.com/u/36410287?v=4?s=100" width="100px;" alt="Jean-Yves LENHOF"/><br /><sub><b>Jean-Yves LENHOF</b></sub></a><br /><a href="https://github.com/ClementTsang/bottom/commits?author=jylenhof" title="Documentation">📖</a></td> </tr> </tbody> </table> Binary files old/bottom-0.11.3/assets/icons/bottom.ico and new/bottom-0.11.4/assets/icons/bottom.ico differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bottom-0.11.3/assets/icons/bottom.svg new/bottom-0.11.4/assets/icons/bottom.svg --- old/bottom-0.11.3/assets/icons/bottom.svg 2025-11-06 16:26:15.000000000 +0100 +++ new/bottom-0.11.4/assets/icons/bottom.svg 2025-11-16 22:36:20.000000000 +0100 @@ -2,13 +2,13 @@ <!-- Created with Inkscape (http://www.inkscape.org/) --> <svg - width="230mm" - height="180mm" - viewBox="0 0 230 180.00011" + width="256mm" + height="256mm" + viewBox="0 0 256 256.00016" version="1.1" id="svg1" inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)" - sodipodi:docname="btm_final.svg" + sodipodi:docname="bottom.svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" @@ -23,9 +23,9 @@ inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" inkscape:document-units="mm" - inkscape:zoom="0.83541731" - inkscape:cx="360.89748" - inkscape:cy="253.16689" + inkscape:zoom="0.46404075" + inkscape:cx="664.8123" + inkscape:cy="524.73839" inkscape:window-width="1920" inkscape:window-height="1011" inkscape:window-x="0" @@ -61,8 +61,8 @@ id="rect1-1-7-1-2" width="230" height="180" - x="0" - y="0" + x="13" + y="38" rx="16" /> <g id="text3-6-6-9-2" @@ -71,20 +71,20 @@ aria-label="BTM"> <path style="fill:#3063d9" - d="m 30.511846,165.13392 q -1.856906,0 -3.145371,-1.28846 -1.288466,-1.28847 -1.288466,-3.14537 0,-1.81901 1.288466,-3.14537 1.288465,-1.28847 3.145371,-1.28847 1.819011,0 3.145372,1.28847 1.288466,1.32636 1.288466,3.14537 0,1.8569 -1.288466,3.14537 -1.326361,1.28846 -3.145372,1.28846 z m 11.065645,0 q -1.81901,0 -3.107475,-1.28846 -1.326362,-1.28847 -1.326362,-3.14537 0,-1.81901 1.326362,-3.14537 1.288465,-1.28847 3.107475,-1.28847 1.856907,0 3.145372,1.28847 1.288466,1.32636 1.288466,3.14537 0,1.8569 -1.288466,3.14537 -1.288465,1.28846 -3.145372,1.28846 z m 11.103541,0 q -1.856906,0 -3.145371,-1.28846 -1.288466,-1.28847 -1.288466,-3.14537 0,-1.81901 1.288466,-3.14537 1.288465,-1.28847 3.145371,-1.28847 1.819011,0 3.145372,1.28847 1.288466,1.32636 1.288466,3.14537 0,1.8569 -1.288466,3.14537 -1.326361,1.28846 -3.145372,1.28846 z m 11.103542,0 q -1.856907,0 -3.145372,-1.28846 -1.326362,-1.28847 -1.326362,-3.14537 0,-1.81901 1.326362,-3.14537 1.288465,-1.28847 3.145372,-1.288 47 1.81901,0 3.107475,1.28847 1.326362,1.32636 1.326362,3.14537 0,1.8569 -1.326362,3.14537 -1.288465,1.28846 -3.107475,1.28846 z M 30.511846,154.06828 q -1.856906,0 -3.145371,-1.32636 -1.288466,-1.28847 -1.288466,-3.10748 0,-1.8569 1.288466,-3.14537 1.288465,-1.28846 3.145371,-1.28846 1.819011,0 3.145372,1.28846 1.288466,1.28847 1.288466,3.14537 0,1.81901 -1.288466,3.10748 -1.326361,1.32636 -3.145372,1.32636 z m 44.338373,0 q -1.819011,0 -3.145372,-1.32636 -1.288466,-1.28847 -1.288466,-3.10748 0,-1.8569 1.288466,-3.14537 1.326361,-1.28846 3.145372,-1.28846 1.856906,0 3.145371,1.28846 1.288466,1.28847 1.288466,3.14537 0,1.81901 -1.288466,3.10748 -1.288465,1.32636 -3.145371,1.32636 z M 30.511846,142.96474 q -1.856906,0 -3.145371,-1.28847 -1.288466,-1.28846 -1.288466,-3.14537 0,-1.81901 1.288466,-3.14537 1.288465,-1.28847 3.145371,-1.28847 1.819011,0 3.145372,1.28847 1.288466,1.32636 1.288466,3.14537 0,1.85691 -1.288466,3.14537 -1.326361,1.28847 -3.145372,1.28847 z m 44.338373,0 q -1.8 19011,0 -3.145372,-1.28847 -1.288466,-1.28846 -1.288466,-3.14537 0,-1.81901 1.288466,-3.14537 1.326361,-1.28847 3.145372,-1.28847 1.856906,0 3.145371,1.28847 1.288466,1.32636 1.288466,3.14537 0,1.85691 -1.288466,3.14537 -1.288465,1.28847 -3.145371,1.28847 z M 30.511846,131.89909 q -1.856906,0 -3.145371,-1.32636 -1.288466,-1.28846 -1.288466,-3.14537 0,-1.81901 1.288466,-3.10748 1.288465,-1.32636 3.145371,-1.32636 1.819011,0 3.145372,1.32636 1.288466,1.28847 1.288466,3.10748 0,1.85691 -1.288466,3.14537 -1.326361,1.32636 -3.145372,1.32636 z m 11.065645,0 q -1.81901,0 -3.107475,-1.32636 -1.326362,-1.28846 -1.326362,-3.14537 0,-1.81901 1.326362,-3.10748 1.288465,-1.32636 3.107475,-1.32636 1.856907,0 3.145372,1.32636 1.288466,1.28847 1.288466,3.10748 0,1.85691 -1.288466,3.14537 -1.288465,1.32636 -3.145372,1.32636 z m 11.103541,0 q -1.856906,0 -3.145371,-1.32636 -1.288466,-1.28846 -1.288466,-3.14537 0,-1.81901 1.288466,-3.10748 1.288465,-1.32636 3.145371,-1.32636 1.819011,0 3.145372,1.3263 6 1.288466,1.28847 1.288466,3.10748 0,1.85691 -1.288466,3.14537 -1.326361,1.32636 -3.145372,1.32636 z m 11.103542,0 q -1.856907,0 -3.145372,-1.32636 -1.326362,-1.28846 -1.326362,-3.14537 0,-1.81901 1.326362,-3.10748 1.288465,-1.32636 3.145372,-1.32636 1.81901,0 3.107475,1.32636 1.326362,1.28847 1.326362,3.10748 0,1.85691 -1.326362,3.14537 -1.288465,1.32636 -3.107475,1.32636 z M 30.511846,120.79555 q -1.856906,0 -3.145371,-1.28846 -1.288466,-1.32636 -1.288466,-3.14537 0,-1.85691 1.288466,-3.14538 1.288465,-1.28846 3.145371,-1.28846 1.819011,0 3.145372,1.28846 1.288466,1.28847 1.288466,3.14538 0,1.81901 -1.288466,3.14537 -1.326361,1.28846 -3.145372,1.28846 z m 44.338373,0 q -1.819011,0 -3.145372,-1.28846 -1.288466,-1.32636 -1.288466,-3.14537 0,-1.85691 1.288466,-3.14538 1.326361,-1.28846 3.145372,-1.28846 1.856906,0 3.145371,1.28846 1.288466,1.28847 1.288466,3.14538 0,1.81901 -1.288466,3.14537 -1.288465,1.28846 -3.145371,1.28846 z M 30.511846,109.69201 q -1.856906,0 -3.145371,-1.28846 -1.288466,-1.28847 -1.288466,-3.14538 0,-1.81901 1.288466,-3.10747 1.288465,-1.32636 3.145371,-1.32636 1.819011,0 3.145372,1.32636 1.288466,1.28846 1.288466,3.10747 0,1.85691 -1.288466,3.14538 -1.326361,1.28846 -3.145372,1.28846 z m 44.338373,0 q -1.819011,0 -3.145372,-1.28846 -1.288466,-1.28847 -1.288466,-3.14538 0,-1.81901 1.288466,-3.10747 1.326361,-1.32636 3.145372,-1.32636 1.856906,0 3.145371,1.32636 1.288466,1.28846 1.288466,3.10747 0,1.85691 -1.288466,3.14538 -1.288465,1.28846 -3.145371,1.28846 z M 30.511846,98.626367 q -1.856906,0 -3.145371,-1.288466 -1.288466,-1.326361 -1.288466,-3.145372 0,-1.856906 1.288466,-3.145371 1.288465,-1.288466 3.145371,-1.288466 1.819011,0 3.145372,1.288466 1.288466,1.288465 1.288466,3.145371 0,1.819011 -1.288466,3.145372 -1.326361,1.288466 -3.145372,1.288466 z m 11.065645,0 q -1.81901,0 -3.107475,-1.288466 -1.326362,-1.326361 -1.326362,-3.145372 0,-1.856906 1.326362,-3.145371 1.288465,-1.288466 3.107475,-1.288466 1.856907,0 3.145372,1.288466 1. 288466,1.288465 1.288466,3.145371 0,1.819011 -1.288466,3.145372 -1.288465,1.288466 -3.145372,1.288466 z m 11.103541,0 q -1.856906,0 -3.145371,-1.288466 -1.288466,-1.326361 -1.288466,-3.145372 0,-1.856906 1.288466,-3.145371 1.288465,-1.288466 3.145371,-1.288466 1.819011,0 3.145372,1.288466 1.288466,1.288465 1.288466,3.145371 0,1.819011 -1.288466,3.145372 -1.326361,1.288466 -3.145372,1.288466 z m 11.103542,0 q -1.856907,0 -3.145372,-1.288466 -1.326362,-1.326361 -1.326362,-3.145372 0,-1.856906 1.326362,-3.145371 1.288465,-1.288466 3.145372,-1.288466 1.81901,0 3.107475,1.288466 1.326362,1.288465 1.326362,3.145371 0,1.819011 -1.326362,3.145372 -1.288465,1.288466 -3.107475,1.288466 z" + d="m 43.511846,203.13404 q -1.856906,0 -3.145371,-1.28846 -1.288466,-1.28847 -1.288466,-3.14537 0,-1.81901 1.288466,-3.14537 1.288465,-1.28847 3.145371,-1.28847 1.819011,0 3.145372,1.28847 1.288466,1.32636 1.288466,3.14537 0,1.8569 -1.288466,3.14537 -1.326361,1.28846 -3.145372,1.28846 z m 11.065645,0 q -1.81901,0 -3.107475,-1.28846 -1.326362,-1.28847 -1.326362,-3.14537 0,-1.81901 1.326362,-3.14537 1.288465,-1.28847 3.107475,-1.28847 1.856907,0 3.145372,1.28847 1.288466,1.32636 1.288466,3.14537 0,1.8569 -1.288466,3.14537 -1.288465,1.28846 -3.145372,1.28846 z m 11.103541,0 q -1.856906,0 -3.145371,-1.28846 -1.288466,-1.28847 -1.288466,-3.14537 0,-1.81901 1.288466,-3.14537 1.288465,-1.28847 3.145371,-1.28847 1.819011,0 3.145372,1.28847 1.288466,1.32636 1.288466,3.14537 0,1.8569 -1.288466,3.14537 -1.326361,1.28846 -3.145372,1.28846 z m 11.103542,0 q -1.856907,0 -3.145372,-1.28846 -1.326362,-1.28847 -1.326362,-3.14537 0,-1.81901 1.326362,-3.14537 1.288465,-1.28847 3.145372,-1.288 47 1.81901,0 3.107475,1.28847 1.326362,1.32636 1.326362,3.14537 0,1.8569 -1.326362,3.14537 -1.288465,1.28846 -3.107475,1.28846 z M 43.511846,192.0684 q -1.856906,0 -3.145371,-1.32636 -1.288466,-1.28847 -1.288466,-3.10748 0,-1.8569 1.288466,-3.14537 1.288465,-1.28846 3.145371,-1.28846 1.819011,0 3.145372,1.28846 1.288466,1.28847 1.288466,3.14537 0,1.81901 -1.288466,3.10748 -1.326361,1.32636 -3.145372,1.32636 z m 44.338373,0 q -1.819011,0 -3.145372,-1.32636 -1.288466,-1.28847 -1.288466,-3.10748 0,-1.8569 1.288466,-3.14537 1.326361,-1.28846 3.145372,-1.28846 1.856906,0 3.145371,1.28846 1.288466,1.28847 1.288466,3.14537 0,1.81901 -1.288466,3.10748 -1.288465,1.32636 -3.145371,1.32636 z M 43.511846,180.96486 q -1.856906,0 -3.145371,-1.28847 -1.288466,-1.28846 -1.288466,-3.14537 0,-1.81901 1.288466,-3.14537 1.288465,-1.28847 3.145371,-1.28847 1.819011,0 3.145372,1.28847 1.288466,1.32636 1.288466,3.14537 0,1.85691 -1.288466,3.14537 -1.326361,1.28847 -3.145372,1.28847 z m 44.338373,0 q -1.81 9011,0 -3.145372,-1.28847 -1.288466,-1.28846 -1.288466,-3.14537 0,-1.81901 1.288466,-3.14537 1.326361,-1.28847 3.145372,-1.28847 1.856906,0 3.145371,1.28847 1.288466,1.32636 1.288466,3.14537 0,1.85691 -1.288466,3.14537 -1.288465,1.28847 -3.145371,1.28847 z M 43.511846,169.89921 q -1.856906,0 -3.145371,-1.32636 -1.288466,-1.28846 -1.288466,-3.14537 0,-1.81901 1.288466,-3.10748 1.288465,-1.32636 3.145371,-1.32636 1.819011,0 3.145372,1.32636 1.288466,1.28847 1.288466,3.10748 0,1.85691 -1.288466,3.14537 -1.326361,1.32636 -3.145372,1.32636 z m 11.065645,0 q -1.81901,0 -3.107475,-1.32636 -1.326362,-1.28846 -1.326362,-3.14537 0,-1.81901 1.326362,-3.10748 1.288465,-1.32636 3.107475,-1.32636 1.856907,0 3.145372,1.32636 1.288466,1.28847 1.288466,3.10748 0,1.85691 -1.288466,3.14537 -1.288465,1.32636 -3.145372,1.32636 z m 11.103541,0 q -1.856906,0 -3.145371,-1.32636 -1.288466,-1.28846 -1.288466,-3.14537 0,-1.81901 1.288466,-3.10748 1.288465,-1.32636 3.145371,-1.32636 1.819011,0 3.145372,1.32636 1.288466,1.28847 1.288466,3.10748 0,1.85691 -1.288466,3.14537 -1.326361,1.32636 -3.145372,1.32636 z m 11.103542,0 q -1.856907,0 -3.145372,-1.32636 -1.326362,-1.28846 -1.326362,-3.14537 0,-1.81901 1.326362,-3.10748 1.288465,-1.32636 3.145372,-1.32636 1.81901,0 3.107475,1.32636 1.326362,1.28847 1.326362,3.10748 0,1.85691 -1.326362,3.14537 -1.288465,1.32636 -3.107475,1.32636 z M 43.511846,158.79567 q -1.856906,0 -3.145371,-1.28846 -1.288466,-1.32636 -1.288466,-3.14537 0,-1.85691 1.288466,-3.14538 1.288465,-1.28846 3.145371,-1.28846 1.819011,0 3.145372,1.28846 1.288466,1.28847 1.288466,3.14538 0,1.81901 -1.288466,3.14537 -1.326361,1.28846 -3.145372,1.28846 z m 44.338373,0 q -1.819011,0 -3.145372,-1.28846 -1.288466,-1.32636 -1.288466,-3.14537 0,-1.85691 1.288466,-3.14538 1.326361,-1.28846 3.145372,-1.28846 1.856906,0 3.145371,1.28846 1.288466,1.28847 1.288466,3.14538 0,1.81901 -1.288466,3.14537 -1.288465,1.28846 -3.145371,1.28846 z M 43.511846,147.69213 q -1.856906,0 -3.145371,-1.28846 -1.288466,-1.28847 -1.288466,-3.14538 0,-1.81901 1.288466,-3.10747 1.288465,-1.32636 3.145371,-1.32636 1.819011,0 3.145372,1.32636 1.288466,1.28846 1.288466,3.10747 0,1.85691 -1.288466,3.14538 -1.326361,1.28846 -3.145372,1.28846 z m 44.338373,0 q -1.819011,0 -3.145372,-1.28846 -1.288466,-1.28847 -1.288466,-3.14538 0,-1.81901 1.288466,-3.10747 1.326361,-1.32636 3.145372,-1.32636 1.856906,0 3.145371,1.32636 1.288466,1.28846 1.288466,3.10747 0,1.85691 -1.288466,3.14538 -1.288465,1.28846 -3.145371,1.28846 z M 43.511846,136.62648 q -1.856906,0 -3.145371,-1.28848 -1.288466,-1.32636 -1.288466,-3.14538 0,-1.85692 1.288466,-3.14539 1.288465,-1.28848 3.145371,-1.28848 1.819011,0 3.145372,1.28848 1.288466,1.28847 1.288466,3.14539 0,1.81902 -1.288466,3.14538 -1.326361,1.28848 -3.145372,1.28848 z m 11.065645,0 q -1.81901,0 -3.107475,-1.28848 -1.326362,-1.32636 -1.326362,-3.14538 0,-1.85692 1.326362,-3.14539 1.288465,-1.28848 3.107475,-1.28848 1.856907,0 3.145372,1.28848 1.288466,1.28847 1.288466 ,3.14539 0,1.81902 -1.288466,3.14538 -1.288465,1.28848 -3.145372,1.28848 z m 11.103541,0 q -1.856906,0 -3.145371,-1.28848 -1.288466,-1.32636 -1.288466,-3.14538 0,-1.85692 1.288466,-3.14539 1.288465,-1.28848 3.145371,-1.28848 1.819011,0 3.145372,1.28848 1.288466,1.28847 1.288466,3.14539 0,1.81902 -1.288466,3.14538 -1.326361,1.28848 -3.145372,1.28848 z m 11.103542,0 q -1.856907,0 -3.145372,-1.28848 -1.326362,-1.32636 -1.326362,-3.14538 0,-1.85692 1.326362,-3.14539 1.288465,-1.28848 3.145372,-1.28848 1.81901,0 3.107475,1.28848 1.326362,1.28847 1.326362,3.14539 0,1.81902 -1.326362,3.14538 -1.288465,1.28848 -3.107475,1.28848 z" id="path17" /> <path style="fill:#30d9a4" - d="m 115.74901,165.13392 q -1.8569,0 -3.14537,-1.28846 -1.28846,-1.28847 -1.28846,-3.14537 0,-1.81901 1.28846,-3.14537 1.28847,-1.28847 3.14537,-1.28847 1.81901,0 3.14538,1.28847 1.28846,1.32636 1.28846,3.14537 0,1.8569 -1.28846,3.14537 -1.32637,1.28846 -3.14538,1.28846 z m 0,-11.06564 q -1.8569,0 -3.14537,-1.32636 -1.28846,-1.28847 -1.28846,-3.10748 0,-1.8569 1.28846,-3.14537 1.28847,-1.28846 3.14537,-1.28846 1.81901,0 3.14538,1.28846 1.28846,1.28847 1.28846,3.14537 0,1.81901 -1.28846,3.10748 -1.32637,1.32636 -3.14538,1.32636 z m 0,-11.10354 q -1.8569,0 -3.14537,-1.28847 -1.28846,-1.28846 -1.28846,-3.14537 0,-1.81901 1.28846,-3.14537 1.28847,-1.28847 3.14537,-1.28847 1.81901,0 3.14538,1.28847 1.28846,1.32636 1.28846,3.14537 0,1.85691 -1.28846,3.14537 -1.32637,1.28847 -3.14538,1.28847 z m 0,-11.06565 q -1.8569,0 -3.14537,-1.32636 -1.28846,-1.28846 -1.28846,-3.14537 0,-1.81901 1.28846,-3.10748 1.28847,-1.32636 3.14537,-1.32636 1.81901,0 3.14538,1.32636 1.28846,1.28847 1.2884 6,3.10748 0,1.85691 -1.28846,3.14537 -1.32637,1.32636 -3.14538,1.32636 z m 0,-11.10354 q -1.8569,0 -3.14537,-1.28846 -1.28846,-1.32636 -1.28846,-3.14537 0,-1.85691 1.28846,-3.14538 1.28847,-1.28846 3.14537,-1.28846 1.81901,0 3.14538,1.28846 1.28846,1.28847 1.28846,3.14538 0,1.81901 -1.28846,3.14537 -1.32637,1.28846 -3.14538,1.28846 z m 0,-11.10354 q -1.8569,0 -3.14537,-1.28846 -1.28846,-1.28847 -1.28846,-3.14538 0,-1.81901 1.28846,-3.10747 1.28847,-1.32636 3.14537,-1.32636 1.81901,0 3.14538,1.32636 1.28846,1.28846 1.28846,3.10747 0,1.85691 -1.28846,3.14538 -1.32637,1.28846 -3.14538,1.28846 z M 93.579828,98.626367 q -1.856906,0 -3.145372,-1.288466 -1.288465,-1.326361 -1.288465,-3.145372 0,-1.856906 1.288465,-3.145371 1.288466,-1.288466 3.145372,-1.288466 1.81901,0 3.145372,1.288466 1.288465,1.288465 1.288465,3.145371 0,1.819011 -1.288465,3.145372 -1.326362,1.288466 -3.145372,1.288466 z m 11.065642,0 q -1.81901,0 -3.10747,-1.288466 -1.32636,-1.326361 -1.32636,-3.145372 0,-1.856906 1.3 2636,-3.145371 1.28846,-1.288466 3.10747,-1.288466 1.85691,0 3.14537,1.288466 1.28847,1.288465 1.28847,3.145371 0,1.819011 -1.28847,3.145372 -1.28846,1.288466 -3.14537,1.288466 z m 11.10354,0 q -1.8569,0 -3.14537,-1.288466 -1.28846,-1.326361 -1.28846,-3.145372 0,-1.856906 1.28846,-3.145371 1.28847,-1.288466 3.14537,-1.288466 1.81901,0 3.14538,1.288466 1.28846,1.288465 1.28846,3.145371 0,1.819011 -1.28846,3.145372 -1.32637,1.288466 -3.14538,1.288466 z m 11.10355,0 q -1.85691,0 -3.14538,-1.288466 -1.32636,-1.326361 -1.32636,-3.145372 0,-1.856906 1.32636,-3.145371 1.28847,-1.288466 3.14538,-1.288466 1.81901,0 3.10747,1.288466 1.32636,1.288465 1.32636,3.145371 0,1.819011 -1.32636,3.145372 -1.28846,1.288466 -3.10747,1.288466 z m 11.06564,0 q -1.81901,0 -3.14537,-1.288466 -1.28847,-1.326361 -1.28847,-3.145372 0,-1.856906 1.28847,-3.145371 1.32636,-1.288466 3.14537,-1.288466 1.85691,0 3.14537,1.288466 1.28847,1.288465 1.28847,3.145371 0,1.819011 -1.28847,3.145372 -1.28846,1.288466 -3.14537 ,1.288466 z" + d="m 128.74901,203.13404 q -1.8569,0 -3.14537,-1.28846 -1.28846,-1.28847 -1.28846,-3.14537 0,-1.81901 1.28846,-3.14537 1.28847,-1.28847 3.14537,-1.28847 1.81901,0 3.14538,1.28847 1.28846,1.32636 1.28846,3.14537 0,1.8569 -1.28846,3.14537 -1.32637,1.28846 -3.14538,1.28846 z m 0,-11.06564 q -1.8569,0 -3.14537,-1.32636 -1.28846,-1.28847 -1.28846,-3.10748 0,-1.8569 1.28846,-3.14537 1.28847,-1.28846 3.14537,-1.28846 1.81901,0 3.14538,1.28846 1.28846,1.28847 1.28846,3.14537 0,1.81901 -1.28846,3.10748 -1.32637,1.32636 -3.14538,1.32636 z m 0,-11.10354 q -1.8569,0 -3.14537,-1.28847 -1.28846,-1.28846 -1.28846,-3.14537 0,-1.81901 1.28846,-3.14537 1.28847,-1.28847 3.14537,-1.28847 1.81901,0 3.14538,1.28847 1.28846,1.32636 1.28846,3.14537 0,1.85691 -1.28846,3.14537 -1.32637,1.28847 -3.14538,1.28847 z m 0,-11.06565 q -1.8569,0 -3.14537,-1.32636 -1.28846,-1.28846 -1.28846,-3.14537 0,-1.81901 1.28846,-3.10748 1.28847,-1.32636 3.14537,-1.32636 1.81901,0 3.14538,1.32636 1.28846,1.28847 1.2884 6,3.10748 0,1.85691 -1.28846,3.14537 -1.32637,1.32636 -3.14538,1.32636 z m 0,-11.10354 q -1.8569,0 -3.14537,-1.28846 -1.28846,-1.32636 -1.28846,-3.14537 0,-1.85691 1.28846,-3.14538 1.28847,-1.28846 3.14537,-1.28846 1.81901,0 3.14538,1.28846 1.28846,1.28847 1.28846,3.14538 0,1.81901 -1.28846,3.14537 -1.32637,1.28846 -3.14538,1.28846 z m 0,-11.10354 q -1.8569,0 -3.14537,-1.28846 -1.28846,-1.28847 -1.28846,-3.14538 0,-1.81901 1.28846,-3.10747 1.28847,-1.32636 3.14537,-1.32636 1.81901,0 3.14538,1.32636 1.28846,1.28846 1.28846,3.10747 0,1.85691 -1.28846,3.14538 -1.32637,1.28846 -3.14538,1.28846 z m -22.16918,-11.06565 q -1.85691,0 -3.14537,-1.28848 -1.28847,-1.32636 -1.28847,-3.14538 0,-1.85692 1.28847,-3.14539 1.28846,-1.28848 3.14537,-1.28848 1.81901,0 3.14537,1.28848 1.28847,1.28847 1.28847,3.14539 0,1.81902 -1.28847,3.14538 -1.32636,1.28848 -3.14537,1.28848 z m 11.06564,0 q -1.81901,0 -3.10747,-1.28848 -1.32636,-1.32636 -1.32636,-3.14538 0,-1.85692 1.32636,-3.14539 1.28846,-1.28848 3 .10747,-1.28848 1.85691,0 3.14537,1.28848 1.28847,1.28847 1.28847,3.14539 0,1.81902 -1.28847,3.14538 -1.28846,1.28848 -3.14537,1.28848 z m 11.10354,0 q -1.8569,0 -3.14537,-1.28848 -1.28846,-1.32636 -1.28846,-3.14538 0,-1.85692 1.28846,-3.14539 1.28847,-1.28848 3.14537,-1.28848 1.81901,0 3.14538,1.28848 1.28846,1.28847 1.28846,3.14539 0,1.81902 -1.28846,3.14538 -1.32637,1.28848 -3.14538,1.28848 z m 11.10355,0 q -1.85691,0 -3.14538,-1.28848 -1.32636,-1.32636 -1.32636,-3.14538 0,-1.85692 1.32636,-3.14539 1.28847,-1.28848 3.14538,-1.28848 1.81901,0 3.10747,1.28848 1.32636,1.28847 1.32636,3.14539 0,1.81902 -1.32636,3.14538 -1.28846,1.28848 -3.10747,1.28848 z m 11.06564,0 q -1.81901,0 -3.14537,-1.28848 -1.28847,-1.32636 -1.28847,-3.14538 0,-1.85692 1.28847,-3.14539 1.32636,-1.28848 3.14537,-1.28848 1.85691,0 3.14537,1.28848 1.28847,1.28847 1.28847,3.14539 0,1.81902 -1.28847,3.14538 -1.28846,1.28848 -3.14537,1.28848 z" id="path18" /> <path style="fill:#d9bd30" - d="m 156.64781,165.13392 q -1.85691,0 -3.14537,-1.28846 -1.28847,-1.28847 -1.28847,-3.14537 0,-1.81901 1.28847,-3.14537 1.28846,-1.28847 3.14537,-1.28847 1.81901,0 3.14537,1.28847 1.28847,1.32636 1.28847,3.14537 0,1.8569 -1.28847,3.14537 -1.32636,1.28846 -3.14537,1.28846 z m 44.33837,0 q -1.81901,0 -3.14537,-1.28846 -1.28847,-1.28847 -1.28847,-3.14537 0,-1.81901 1.28847,-3.14537 1.32636,-1.28847 3.14537,-1.28847 1.85691,0 3.14537,1.28847 1.28847,1.32636 1.28847,3.14537 0,1.8569 -1.28847,3.14537 -1.28846,1.28846 -3.14537,1.28846 z m -44.33837,-11.06564 q -1.85691,0 -3.14537,-1.32636 -1.28847,-1.28847 -1.28847,-3.10748 0,-1.8569 1.28847,-3.14537 1.28846,-1.28846 3.14537,-1.28846 1.81901,0 3.14537,1.28846 1.28847,1.28847 1.28847,3.14537 0,1.81901 -1.28847,3.10748 -1.32636,1.32636 -3.14537,1.32636 z m 44.33837,0 q -1.81901,0 -3.14537,-1.32636 -1.28847,-1.28847 -1.28847,-3.10748 0,-1.8569 1.28847,-3.14537 1.32636,-1.28846 3.14537,-1.28846 1.85691,0 3.14537,1.28846 1.28847,1.2884 7 1.28847,3.14537 0,1.81901 -1.28847,3.10748 -1.28846,1.32636 -3.14537,1.32636 z m -44.33837,-11.10354 q -1.85691,0 -3.14537,-1.28847 -1.28847,-1.28846 -1.28847,-3.14537 0,-1.81901 1.28847,-3.14537 1.28846,-1.28847 3.14537,-1.28847 1.81901,0 3.14537,1.28847 1.28847,1.32636 1.28847,3.14537 0,1.85691 -1.28847,3.14537 -1.32636,1.28847 -3.14537,1.28847 z m 44.33837,0 q -1.81901,0 -3.14537,-1.28847 -1.28847,-1.28846 -1.28847,-3.14537 0,-1.81901 1.28847,-3.14537 1.32636,-1.28847 3.14537,-1.28847 1.85691,0 3.14537,1.28847 1.28847,1.32636 1.28847,3.14537 0,1.85691 -1.28847,3.14537 -1.28846,1.28847 -3.14537,1.28847 z m -44.33837,-11.06565 q -1.85691,0 -3.14537,-1.32636 -1.28847,-1.28846 -1.28847,-3.14537 0,-1.81901 1.28847,-3.10748 1.28846,-1.32636 3.14537,-1.32636 1.81901,0 3.14537,1.32636 1.28847,1.28847 1.28847,3.10748 0,1.85691 -1.28847,3.14537 -1.32636,1.32636 -3.14537,1.32636 z m 44.33837,0 q -1.81901,0 -3.14537,-1.32636 -1.28847,-1.28846 -1.28847,-3.14537 0,-1.81901 1.28847,-3.10748 1 .32636,-1.32636 3.14537,-1.32636 1.85691,0 3.14537,1.32636 1.28847,1.28847 1.28847,3.10748 0,1.85691 -1.28847,3.14537 -1.28846,1.32636 -3.14537,1.32636 z m -44.33837,-11.10354 q -1.85691,0 -3.14537,-1.28846 -1.28847,-1.32636 -1.28847,-3.14537 0,-1.85691 1.28847,-3.14538 1.28846,-1.28846 3.14537,-1.28846 1.81901,0 3.14537,1.28846 1.28847,1.28847 1.28847,3.14538 0,1.81901 -1.28847,3.14537 -1.32636,1.28846 -3.14537,1.28846 z m 22.16919,0 q -1.85691,0 -3.14538,-1.28846 -1.28846,-1.32636 -1.28846,-3.14537 0,-1.85691 1.28846,-3.14538 1.28847,-1.28846 3.14538,-1.28846 1.81901,0 3.14537,1.28846 1.28846,1.28847 1.28846,3.14538 0,1.81901 -1.28846,3.14537 -1.32636,1.28846 -3.14537,1.28846 z m 22.16918,0 q -1.81901,0 -3.14537,-1.28846 -1.28847,-1.32636 -1.28847,-3.14537 0,-1.85691 1.28847,-3.14538 1.32636,-1.28846 3.14537,-1.28846 1.85691,0 3.14537,1.28846 1.28847,1.28847 1.28847,3.14538 0,1.81901 -1.28847,3.14537 -1.28846,1.28846 -3.14537,1.28846 z m -44.33837,-11.10354 q -1.85691,0 -3.14537,- 1.28846 -1.28847,-1.28847 -1.28847,-3.14538 0,-1.81901 1.28847,-3.10747 1.28846,-1.32636 3.14537,-1.32636 1.81901,0 3.14537,1.32636 1.28847,1.28846 1.28847,3.10747 0,1.85691 -1.28847,3.14538 -1.32636,1.28846 -3.14537,1.28846 z m 11.06564,0 q -1.81901,0 -3.10747,-1.28846 -1.32636,-1.28847 -1.32636,-3.14538 0,-1.81901 1.32636,-3.10747 1.28846,-1.32636 3.10747,-1.32636 1.85691,0 3.14538,1.32636 1.28846,1.28846 1.28846,3.10747 0,1.85691 -1.28846,3.14538 -1.28847,1.28846 -3.14538,1.28846 z m 22.20709,0 q -1.85691,0 -3.14537,-1.28846 -1.32637,-1.28847 -1.32637,-3.14538 0,-1.81901 1.32637,-3.10747 1.28846,-1.32636 3.14537,-1.32636 1.81901,0 3.10747,1.32636 1.32636,1.28846 1.32636,3.10747 0,1.85691 -1.32636,3.14538 -1.28846,1.28846 -3.10747,1.28846 z m 11.06564,0 q -1.81901,0 -3.14537,-1.28846 -1.28847,-1.28847 -1.28847,-3.14538 0,-1.81901 1.28847,-3.10747 1.32636,-1.32636 3.14537,-1.32636 1.85691,0 3.14537,1.32636 1.28847,1.28846 1.28847,3.10747 0,1.85691 -1.28847,3.14538 -1.28846,1.28846 -3.14537,1.28846 z M 156.64781,98.626367 q -1.85691,0 -3.14537,-1.288466 -1.28847,-1.326361 -1.28847,-3.145372 0,-1.856906 1.28847,-3.145371 1.28846,-1.288466 3.14537,-1.288466 1.81901,0 3.14537,1.288466 1.28847,1.288465 1.28847,3.145371 0,1.819011 -1.28847,3.145372 -1.32636,1.288466 -3.14537,1.288466 z m 44.33837,0 q -1.81901,0 -3.14537,-1.288466 -1.28847,-1.326361 -1.28847,-3.145372 0,-1.856906 1.28847,-3.145371 1.32636,-1.288466 3.14537,-1.288466 1.85691,0 3.14537,1.288466 1.28847,1.288465 1.28847,3.145371 0,1.819011 -1.28847,3.145372 -1.28846,1.288466 -3.14537,1.288466 z" + d="m 169.64781,203.13404 q -1.85691,0 -3.14537,-1.28846 -1.28847,-1.28847 -1.28847,-3.14537 0,-1.81901 1.28847,-3.14537 1.28846,-1.28847 3.14537,-1.28847 1.81901,0 3.14537,1.28847 1.28847,1.32636 1.28847,3.14537 0,1.8569 -1.28847,3.14537 -1.32636,1.28846 -3.14537,1.28846 z m 44.33837,0 q -1.81901,0 -3.14537,-1.28846 -1.28847,-1.28847 -1.28847,-3.14537 0,-1.81901 1.28847,-3.14537 1.32636,-1.28847 3.14537,-1.28847 1.85691,0 3.14537,1.28847 1.28847,1.32636 1.28847,3.14537 0,1.8569 -1.28847,3.14537 -1.28846,1.28846 -3.14537,1.28846 z M 169.64781,192.0684 q -1.85691,0 -3.14537,-1.32636 -1.28847,-1.28847 -1.28847,-3.10748 0,-1.8569 1.28847,-3.14537 1.28846,-1.28846 3.14537,-1.28846 1.81901,0 3.14537,1.28846 1.28847,1.28847 1.28847,3.14537 0,1.81901 -1.28847,3.10748 -1.32636,1.32636 -3.14537,1.32636 z m 44.33837,0 q -1.81901,0 -3.14537,-1.32636 -1.28847,-1.28847 -1.28847,-3.10748 0,-1.8569 1.28847,-3.14537 1.32636,-1.28846 3.14537,-1.28846 1.85691,0 3.14537,1.28846 1.28847,1.28847 1.28847,3.14537 0,1.81901 -1.28847,3.10748 -1.28846,1.32636 -3.14537,1.32636 z m -44.33837,-11.10354 q -1.85691,0 -3.14537,-1.28847 -1.28847,-1.28846 -1.28847,-3.14537 0,-1.81901 1.28847,-3.14537 1.28846,-1.28847 3.14537,-1.28847 1.81901,0 3.14537,1.28847 1.28847,1.32636 1.28847,3.14537 0,1.85691 -1.28847,3.14537 -1.32636,1.28847 -3.14537,1.28847 z m 44.33837,0 q -1.81901,0 -3.14537,-1.28847 -1.28847,-1.28846 -1.28847,-3.14537 0,-1.81901 1.28847,-3.14537 1.32636,-1.28847 3.14537,-1.28847 1.85691,0 3.14537,1.28847 1.28847,1.32636 1.28847,3.14537 0,1.85691 -1.28847,3.14537 -1.28846,1.28847 -3.14537,1.28847 z m -44.33837,-11.06565 q -1.85691,0 -3.14537,-1.32636 -1.28847,-1.28846 -1.28847,-3.14537 0,-1.81901 1.28847,-3.10748 1.28846,-1.32636 3.14537,-1.32636 1.81901,0 3.14537,1.32636 1.28847,1.28847 1.28847,3.10748 0,1.85691 -1.28847,3.14537 -1.32636,1.32636 -3.14537,1.32636 z m 44.33837,0 q -1.81901,0 -3.14537,-1.32636 -1.28847,-1.28846 -1.28847,-3.14537 0,-1.81901 1.28847,-3.10748 1. 32636,-1.32636 3.14537,-1.32636 1.85691,0 3.14537,1.32636 1.28847,1.28847 1.28847,3.10748 0,1.85691 -1.28847,3.14537 -1.28846,1.32636 -3.14537,1.32636 z m -44.33837,-11.10354 q -1.85691,0 -3.14537,-1.28846 -1.28847,-1.32636 -1.28847,-3.14537 0,-1.85691 1.28847,-3.14538 1.28846,-1.28846 3.14537,-1.28846 1.81901,0 3.14537,1.28846 1.28847,1.28847 1.28847,3.14538 0,1.81901 -1.28847,3.14537 -1.32636,1.28846 -3.14537,1.28846 z m 22.16919,0 q -1.85691,0 -3.14538,-1.28846 -1.28846,-1.32636 -1.28846,-3.14537 0,-1.85691 1.28846,-3.14538 1.28847,-1.28846 3.14538,-1.28846 1.81901,0 3.14537,1.28846 1.28846,1.28847 1.28846,3.14538 0,1.81901 -1.28846,3.14537 -1.32636,1.28846 -3.14537,1.28846 z m 22.16918,0 q -1.81901,0 -3.14537,-1.28846 -1.28847,-1.32636 -1.28847,-3.14537 0,-1.85691 1.28847,-3.14538 1.32636,-1.28846 3.14537,-1.28846 1.85691,0 3.14537,1.28846 1.28847,1.28847 1.28847,3.14538 0,1.81901 -1.28847,3.14537 -1.28846,1.28846 -3.14537,1.28846 z m -44.33837,-11.10354 q -1.85691,0 -3.14537,-1 .28846 -1.28847,-1.28847 -1.28847,-3.14538 0,-1.81901 1.28847,-3.10747 1.28846,-1.32636 3.14537,-1.32636 1.81901,0 3.14537,1.32636 1.28847,1.28846 1.28847,3.10747 0,1.85691 -1.28847,3.14538 -1.32636,1.28846 -3.14537,1.28846 z m 11.06564,0 q -1.81901,0 -3.10747,-1.28846 -1.32636,-1.28847 -1.32636,-3.14538 0,-1.81901 1.32636,-3.10747 1.28846,-1.32636 3.10747,-1.32636 1.85691,0 3.14538,1.32636 1.28846,1.28846 1.28846,3.10747 0,1.85691 -1.28846,3.14538 -1.28847,1.28846 -3.14538,1.28846 z m 22.20709,0 q -1.85691,0 -3.14537,-1.28846 -1.32637,-1.28847 -1.32637,-3.14538 0,-1.81901 1.32637,-3.10747 1.28846,-1.32636 3.14537,-1.32636 1.81901,0 3.10747,1.32636 1.32636,1.28846 1.32636,3.10747 0,1.85691 -1.32636,3.14538 -1.28846,1.28846 -3.10747,1.28846 z m 11.06564,0 q -1.81901,0 -3.14537,-1.28846 -1.28847,-1.28847 -1.28847,-3.14538 0,-1.81901 1.28847,-3.10747 1.32636,-1.32636 3.14537,-1.32636 1.85691,0 3.14537,1.32636 1.28847,1.28846 1.28847,3.10747 0,1.85691 -1.28847,3.14538 -1.28846,1.28846 - 3.14537,1.28846 z m -44.33837,-11.06565 q -1.85691,0 -3.14537,-1.28848 -1.28847,-1.32636 -1.28847,-3.14538 0,-1.85692 1.28847,-3.14539 1.28846,-1.28848 3.14537,-1.28848 1.81901,0 3.14537,1.28848 1.28847,1.28847 1.28847,3.14539 0,1.81902 -1.28847,3.14538 -1.32636,1.28848 -3.14537,1.28848 z m 44.33837,0 q -1.81901,0 -3.14537,-1.28848 -1.28847,-1.32636 -1.28847,-3.14538 0,-1.85692 1.28847,-3.14539 1.32636,-1.28848 3.14537,-1.28848 1.85691,0 3.14537,1.28848 1.28847,1.28847 1.28847,3.14539 0,1.81902 -1.28847,3.14538 -1.28846,1.28848 -3.14537,1.28848 z" id="path19" /> </g> <g id="g21-9-9-4-2" - transform="translate(-21.54617,-15.000057)"> + transform="translate(-8.54617,22.999952)"> <rect style="fill:#ffffff;fill-opacity:1;stroke-width:0.264583" id="rect19-0-2-9-2" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bottom-0.11.3/src/canvas/components/time_graph/base/time_chart/canvas.rs new/bottom-0.11.4/src/canvas/components/time_graph/base/time_chart/canvas.rs --- old/bottom-0.11.3/src/canvas/components/time_graph/base/time_chart/canvas.rs 2025-11-06 16:26:15.000000000 +0100 +++ new/bottom-0.11.4/src/canvas/components/time_graph/base/time_chart/canvas.rs 2025-11-16 22:36:20.000000000 +0100 @@ -323,7 +323,8 @@ .zip(layer.colors.into_iter()) .enumerate() { - if ch != ' ' && ch != '\u{2800}' { + const BRAILLE_BASE: char = '\u{2800}'; + if ch != ' ' && ch != BRAILLE_BASE { let (x, y) = (i % width, i / width); if let Some(cell) = buf.cell_mut((x as u16 + canvas_area.left(), y as u16 + canvas_area.top())) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bottom-0.11.3/src/canvas/dialogs/process_kill_dialog.rs new/bottom-0.11.4/src/canvas/dialogs/process_kill_dialog.rs --- old/bottom-0.11.3/src/canvas/dialogs/process_kill_dialog.rs 2025-11-06 16:26:15.000000000 +0100 +++ new/bottom-0.11.4/src/canvas/dialogs/process_kill_dialog.rs 2025-11-16 22:36:20.000000000 +0100 @@ -709,7 +709,7 @@ Constraint::Max(num_lines), Constraint::Max(SIGNAL_TEXT_LEN), ]) - .flex(Flex::SpaceAround) + .flex(Flex::SpaceEvenly) .areas(block.inner(draw_area)); // Render the block. @@ -769,7 +769,7 @@ // and one for the buttons. let [text_area, button_area] = Layout::vertical([Constraint::Max(num_lines), Constraint::Length(1)]) - .flex(Flex::SpaceAround) + .flex(Flex::SpaceEvenly) .areas(block.inner(draw_area)); // Render things, starting from the block. @@ -790,7 +790,7 @@ }; let [yes_area, no_area] = Layout::horizontal([Constraint::Length(3); 2]) - .flex(Flex::SpaceAround) + .flex(Flex::SpaceEvenly) .areas(button_area); *last_yes_button_area = yes_area; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bottom-0.11.3/src/canvas/widgets/cpu_graph.rs new/bottom-0.11.4/src/canvas/widgets/cpu_graph.rs --- old/bottom-0.11.3/src/canvas/widgets/cpu_graph.rs 2025-11-06 16:26:15.000000000 +0100 +++ new/bottom-0.11.4/src/canvas/widgets/cpu_graph.rs 2025-11-16 22:36:20.000000000 +0100 @@ -132,10 +132,8 @@ .iter() .enumerate() .map(|(itx, values)| { - let style = if show_avg_cpu && itx == AVG_POSITION { + let style = if show_avg_cpu && itx == 0 { self.styles.avg_cpu_colour - } else if itx == ALL_POSITION { - self.styles.all_cpu_colour } else { self.styles.cpu_colour_styles [(itx - show_avg_offset) % self.styles.cpu_colour_styles.len()] @@ -147,6 +145,7 @@ .collect() } else if let Some(CpuData { .. }) = cpu_entries.get(current_scroll_position - 1) { // We generally subtract one from current scroll position because of the all entry. + // TODO: Do this a bit better (e.g. we can just do if let Some(_) = cpu_points.get()) let style = if show_avg_cpu && current_scroll_position == AVG_POSITION { self.styles.avg_cpu_colour diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bottom-0.11.3/src/canvas/widgets/network_graph.rs new/bottom-0.11.4/src/canvas/widgets/network_graph.rs --- old/bottom-0.11.3/src/canvas/widgets/network_graph.rs 2025-11-06 16:26:15.000000000 +0100 +++ new/bottom-0.11.4/src/canvas/widgets/network_graph.rs 2025-11-16 22:36:20.000000000 +0100 @@ -66,7 +66,7 @@ let network_latest_data = &(shared_data.network_harvest); let rx_points = &(shared_data.timeseries_data.rx); let tx_points = &(shared_data.timeseries_data.tx); - let time = &(shared_data.timeseries_data.time); + let times = &(shared_data.timeseries_data.time); let time_start = -(network_widget_state.current_display_time as f64); let border_style = self.get_border_style(widget_id, app_state.current_widget.widget_id); @@ -78,12 +78,40 @@ ); let y_max = { - if let Some(last_time) = time.last() { - let (mut biggest, mut biggest_time, oldest_to_check) = - check_network_height_cache(network_widget_state, last_time, time); + if let Some(last_time) = times.last() { + let cached_network_height = + check_network_height_cache(network_widget_state, last_time); + + let (mut biggest, mut biggest_time, oldest_to_check) = cached_network_height + .unwrap_or_else(|| { + let visible_duration = + Duration::from_millis(network_widget_state.current_display_time); + + let visible_left_bound = match last_time.checked_sub(visible_duration) { + Some(v) => v, + None => { + // On some systems (like Windows) it can be possible that the current display time + // causes subtraction to fail if, for example, the uptime of the system is too low + // and current_display_time is too high. See https://github.com/ClementTsang/bottom/issues/1825. + // + // As such, we instead take the oldest visible time. This is a bit inefficient, but + // since it should only happen rarely, it should be fine. + times + .iter() + .take_while(|t| { + last_time.duration_since(**t) < visible_duration + }) + .last() + .cloned() + .unwrap_or(*last_time) + } + }; + + (0.0, visible_left_bound, visible_left_bound) + }); for (&time, &v) in rx_points - .iter_along_base(time) + .iter_along_base(times) .rev() .take_while(|&(&time, _)| time >= oldest_to_check) { @@ -94,7 +122,7 @@ } for (&time, &v) in tx_points - .iter_along_base(time) + .iter_along_base(times) .rev() .take_while(|&(&time, _)| time >= oldest_to_check) { @@ -115,8 +143,9 @@ 0.0 } }; - let (y_max, y_labels) = adjust_network_data_point(y_max, &app_state.app_config_fields); - let y_bounds = AxisBound::Max(y_max); + let (adjusted_y_max, y_labels) = + adjust_network_data_point(y_max, &app_state.app_config_fields); + let y_bounds = AxisBound::Max(adjusted_y_max); let legend_constraints = if full_screen { (Constraint::Ratio(0, 1), Constraint::Ratio(0, 1)) @@ -149,12 +178,12 @@ vec![ GraphData::default() .name(rx_label.into()) - .time(time) + .time(times) .values(rx_points) .style(self.styles.rx_style), GraphData::default() .name(tx_label.into()) - .time(time) + .time(times) .values(tx_points) .style(self.styles.tx_style), GraphData::default() @@ -173,12 +202,12 @@ vec![ GraphData::default() .name(format!("RX: {rx_label:<10} All: {total_rx_label}").into()) - .time(time) + .time(times) .values(rx_points) .style(self.styles.rx_style), GraphData::default() .name(format!("TX: {tx_label:<10} All: {total_tx_label}").into()) - .time(time) + .time(times) .values(tx_points) .style(self.styles.tx_style), ] @@ -278,11 +307,11 @@ } } +/// Returns a cached max value, it's time, and what period it covers if it is cached. #[inline] fn check_network_height_cache( network_widget_state: &NetWidgetState, last_time: &std::time::Instant, - time: &[std::time::Instant], -) -> (f64, std::time::Instant, std::time::Instant) { +) -> Option<(f64, std::time::Instant, std::time::Instant)> { let visible_duration = Duration::from_millis(network_widget_state.current_display_time); if let Some(NetWidgetHeightCache { @@ -292,29 +321,13 @@ }) = &network_widget_state.height_cache { if *period == network_widget_state.current_display_time - && last_time.duration_since(*right_edge) < visible_duration + && last_time.duration_since(best_point.0) < visible_duration { - return (best_point.1, best_point.0, *right_edge); + return Some((best_point.1, best_point.0, *right_edge)); } } - let visible_left_bound = match last_time.checked_sub(visible_duration) { - Some(v) => v, - None => { - // On some systems (like Windows) it can be possible that the current display time - // causes subtraction to fail if, for example, the uptime of the system is too low - // and current_display_time is too high. See https://github.com/ClementTsang/bottom/issues/1825. - // - // As such, instead take the oldest visible time. - time.iter() - .take_while(|t| last_time.duration_since(**t) < visible_duration) - .last() - .cloned() - .unwrap_or(*last_time) - } - }; - - (0.0, visible_left_bound, visible_left_bound) + None } /// Returns the required labels. @@ -341,10 +354,10 @@ // // Dynamic chart idea based off of FreeNAS's chart design. // - // === + // --- // - // For log data, we just use the old method of log intervals - // (kilo/mega/giga/etc.). Keep it nice and simple. + // For log data, we just use the old method of log intervals (kilo/mega/giga/etc.). + // Keep it nice and simple. // Now just check the largest unit we correspond to... then proceed to build // some entries from there! @@ -376,8 +389,15 @@ ) }; - let max_entry_upper = max_entry * 1.5; // We use the bumped up version to calculate our unit type. - let (max_value_scaled, unit_prefix, unit_type): (f64, &str, &str) = + let max_entry_upper = if max_entry == 0.0 { + // If it's 0, then just use a very low value so the labels aren't just "0.0" 4 times. + // This _also_ prevents the y-axis height range ever being 0. + 1.0 + } else { + max_entry * 1.5 // We use the bumped up version to calculate our unit type. + }; + + let (max_value_scaled, unit_prefix, unit_type): (f64, &str, &str) = { if max_entry_upper < k_limit { (max_entry, "", unit_char) } else if max_entry_upper < m_limit { @@ -404,7 +424,8 @@ if use_binary_prefix { "Ti" } else { "T" }, unit_char, ) - }; + } + }; // Finally, build an acceptable range starting from there, using the given // height! Note we try to put more of a weight on the bottom section diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bottom-0.11.3/src/canvas.rs new/bottom-0.11.4/src/canvas.rs --- old/bottom-0.11.3/src/canvas.rs 2025-11-06 16:26:15.000000000 +0100 +++ new/bottom-0.11.4/src/canvas.rs 2025-11-16 22:36:20.000000000 +0100 @@ -11,7 +11,7 @@ use tui::{ Frame, Terminal, backend::Backend, - layout::{Constraint, Direction, Layout, Rect}, + layout::{Constraint, Direction, Flex, Layout, Rect}, text::Span, widgets::Paragraph, }; @@ -122,35 +122,61 @@ if app_state.help_dialog_state.is_showing_help { let gen_help_len = GENERAL_HELP_TEXT.len() as u16 + 3; let border_len = terminal_height.saturating_sub(gen_help_len) / 2; - let vertical_dialog_chunk = Layout::default() + let [_, vertical_dialog_chunk, _] = Layout::default() .direction(Direction::Vertical) .constraints([ Constraint::Length(border_len), Constraint::Length(gen_help_len), Constraint::Length(border_len), ]) - .split(terminal_size); + .areas(terminal_size); - let middle_dialog_chunk = Layout::default() - .direction(Direction::Horizontal) - .constraints(if terminal_width < 100 { - // TODO: [REFACTOR] The point we start changing size at currently hard-coded - // in. - [ - Constraint::Percentage(0), - Constraint::Percentage(100), - Constraint::Percentage(0), - ] + // An approximate proxy for the max line length to use. + const MAX_TEXT_LENGTH: u16 = const { + let mut max = 0; + + let mut i = 0; + while i < HELP_TEXT.len() { + let section = HELP_TEXT[i]; + let mut j = 0; + while j < section.len() { + let line = section[j]; + if line.len() > max { + max = line.len(); + } + + j += 1; + } + + i += 1; + } + + max as u16 + }; + + let dialog_width = vertical_dialog_chunk.width; + let [middle_dialog_chunk] = if dialog_width < MAX_TEXT_LENGTH { + Layout::default() + .direction(Direction::Horizontal) + .constraints([Constraint::Percentage(100)]) + .areas(vertical_dialog_chunk) + } else { + // We calculate this so that the margins never have to split an odd number. + let len = if (dialog_width.saturating_sub(MAX_TEXT_LENGTH)) % 2 == 0 { + MAX_TEXT_LENGTH } else { - [ - Constraint::Percentage(15), - Constraint::Percentage(70), - Constraint::Percentage(15), - ] - }) - .split(vertical_dialog_chunk[1]); + // It can only be 1 if the difference is greater than 1, so this is fine. + MAX_TEXT_LENGTH + 1 + }; + + Layout::default() + .direction(Direction::Horizontal) + .constraints([Constraint::Length(len)]) + .flex(Flex::SpaceAround) + .areas(vertical_dialog_chunk) + }; - self.draw_help_dialog(f, app_state, middle_dialog_chunk[1]); + self.draw_help_dialog(f, app_state, middle_dialog_chunk); } else if app_state.process_kill_dialog.is_open() { // FIXME: For width, just limit to a max size or full width. For height, not sure. Maybe pass max and let child handle? let horizontal_padding = if terminal_width < 100 { 0 } else { 5 }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bottom-0.11.3/src/collection/temperature.rs new/bottom-0.11.4/src/collection/temperature.rs --- old/bottom-0.11.3/src/collection/temperature.rs 2025-11-06 16:26:15.000000000 +0100 +++ new/bottom-0.11.4/src/collection/temperature.rs 2025-11-16 22:36:20.000000000 +0100 @@ -7,7 +7,7 @@ if #[cfg(target_os = "linux")] { pub mod linux; pub use self::linux::*; - } else if #[cfg(any(target_os = "freebsd", target_os = "macos", target_os = "windows", target_os = "android", target_os = "ios"))] { + } else { pub mod sysinfo; pub use self::sysinfo::*; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bottom-0.11.3/src/constants.rs new/bottom-0.11.4/src/constants.rs --- old/bottom-0.11.3/src/constants.rs 2025-11-06 16:26:15.000000000 +0100 +++ new/bottom-0.11.4/src/constants.rs 2025-11-16 22:36:20.000000000 +0100 @@ -25,159 +25,155 @@ // TODO [Help]: Search in help? // TODO [Help]: Move to using tables for easier formatting? -pub(crate) const GENERAL_HELP_TEXT: [&str; 32] = [ +pub(crate) const GENERAL_HELP_TEXT: [&str; 28] = [ "1 - General", - "q, Ctrl-c Quit", - "Esc Close dialog windows, search, widgets, or exit expanded mode", - "Ctrl-r Reset display and any collected data", - "f Freeze/unfreeze updating with new data", - "Ctrl-Left, ", - "Shift-Left, Move widget selection left", - "H, A ", - "Ctrl-Right, ", - "Shift-Right, Move widget selection right", - "L, D ", - "Ctrl-Up, ", - "Shift-Up, Move widget selection up", - "K, W ", - "Ctrl-Down, ", - "Shift-Down, Move widget selection down", - "J, S ", - "Left, h Move left within widget", - "Down, j Move down within widget", - "Up, k Move up within widget", - "Right, l Move right within widget", - "? Open help menu", - "gg Jump to the first entry", - "G Jump to the last entry", - "e Toggle expanding the currently selected widget", - "+ Zoom in on chart (decrease time range)", - "- Zoom out on chart (increase time range)", - "= Reset zoom", - "PgUp, PgDown Scroll up/down a table by a page", - "Ctrl-u, Ctrl-d Scroll up/down a table by half a page", - "Mouse scroll Scroll through the tables or zoom in/out of charts by scrolling up/down", - "Mouse click Selects the clicked widget, table entry, dialog option, or tab", + "q, Ctrl-c Quit", + "Esc Close dialog windows, search, widgets, or exit expanded mode", + "Ctrl-r Reset display and any collected data", + "f Freeze/unfreeze updating with new data", + "Ctrl-Left, ", + "Shift-Left, H, A Move widget selection left", + "Ctrl-Right, ", + "Shift-Right, L, D Move widget selection right", + "Ctrl-Up, ", + "Shift-Up, K, W Move widget selection up", + "Ctrl-Down, ", + "Shift-Down, J, S Move widget selection down", + "Left, h Move left within widget", + "Down, j Move down within widget", + "Up, k Move up within widget", + "Right, l Move right within widget", + "? Open help menu", + "gg Jump to the first entry", + "G Jump to the last entry", + "e Toggle expanding the currently selected widget", + "+ Zoom in on chart (decrease time range)", + "- Zoom out on chart (increase time range)", + "= Reset zoom", + "PgUp, PgDown Scroll up/down a table by a page", + "Ctrl-u, Ctrl-d Scroll up/down a table by half a page", + "Mouse scroll Scroll through the tables or zoom in/out of charts by scrolling up/down", + "Mouse click Selects the clicked widget, table entry, dialog option, or tab", ]; const CPU_HELP_TEXT: [&str; 2] = [ "2 - CPU widget", - "Mouse scroll Scrolling over an CPU core/average shows only that entry on the chart", + "Mouse scroll Scrolling over a CPU core/average shows only that entry on the chart", ]; const PROCESS_HELP_TEXT: [&str; 20] = [ "3 - Process widget", - "dd, F9, Delete Kill the selected process", - "c Sort by CPU usage, press again to reverse", - "m Sort by memory usage, press again to reverse", - "p Sort by PID name, press again to reverse", - "n Sort by process name, press again to reverse", - "Tab Group/un-group processes with the same name", - "Ctrl-f, / Open process search widget", - "P Toggle between showing the full command or just the process name", - "s, F6 Open process sort widget", - "I Invert current sort", - "% Toggle between values and percentages for memory usage", - "t, F5 Toggle tree mode", - "Right Collapse a branch while in tree mode", - "Left Expand a branch while in tree mode", - "+, -, click Toggle whether a branch is expanded or collapsed in tree mode", - "click on header Sorts the entries by that column, click again to invert the sort", - "C Sort by GPU usage, press again to reverse", - "M Sort by GPU memory usage, press again to reverse", - "z Toggle the display of kernel threads", + "dd, F9, Delete Kill the selected process", + "c Sort by CPU usage, press again to reverse", + "m Sort by memory usage, press again to reverse", + "p Sort by PID name, press again to reverse", + "n Sort by process name, press again to reverse", + "Tab Group/un-group processes with the same name", + "Ctrl-f, / Open process search widget", + "P Toggle between showing the full command or just the process name", + "s, F6 Open process sort widget", + "I Invert current sort", + "% Toggle between values and percentages for memory usage", + "t, F5 Toggle tree mode", + "Right Collapse a branch while in tree mode", + "Left Expand a branch while in tree mode", + "+, -, click Toggle whether a branch is expanded or collapsed in tree mode", + "click on header Sorts the entries by that column, click again to invert the sort", + "C Sort by GPU usage, press again to reverse", + "M Sort by GPU memory usage, press again to reverse", + "z Toggle the display of kernel threads", ]; const SEARCH_HELP_TEXT: [&str; 51] = [ "4 - Process search widget", - "Esc Close the search widget (retains the filter)", - "Ctrl-a Skip to the start of the search query", - "Ctrl-e Skip to the end of the search query", - "Ctrl-u Clear the current search query", - "Ctrl-w Delete a word behind the cursor", - "Ctrl-h Delete the character behind the cursor", - "Backspace Delete the character behind the cursor", - "Delete Delete the character at the cursor", - "Alt-c, F1 Toggle matching case", - "Alt-w, F2 Toggle matching the entire word", - "Alt-r, F3 Toggle using regex", - "Left, Alt-h Move cursor left", - "Right, Alt-l Move cursor right", + "Esc Close the search widget (retains the filter)", + "Ctrl-a Skip to the start of the search query", + "Ctrl-e Skip to the end of the search query", + "Ctrl-u Clear the current search query", + "Ctrl-w Delete a word behind the cursor", + "Ctrl-h Delete the character behind the cursor", + "Backspace Delete the character behind the cursor", + "Delete Delete the character at the cursor", + "Alt-c, F1 Toggle matching case", + "Alt-w, F2 Toggle matching the entire word", + "Alt-r, F3 Toggle using regex", + "Left, Alt-h Move cursor left", + "Right, Alt-l Move cursor right", "", "Supported search types:", - "<by name/cmd> ex: btm", - "pid ex: pid 825", - "cpu, cpu% ex: cpu > 4.2", - "mem, mem% ex: mem < 4.2", - "memb ex: memb < 100 kb", - "read, r/s, rps ex: read >= 1 b", - "write, w/s, wps ex: write <= 1 tb", - "tread, t.read ex: tread = 1", - "twrite, t.write ex: twrite = 1", - "user ex: user = root", - "state ex: state = running", - "gpu% ex: gpu% < 4.2", - "gmem ex: gmem < 100 kb", - "gmem% ex: gmem% < 4.2", + "<by name/cmd> ex: btm", + "pid ex: pid 825", + "cpu, cpu% ex: cpu > 4.2", + "mem, mem% ex: mem < 4.2", + "memb ex: memb < 100 kb", + "read, r/s, rps ex: read >= 1 b", + "write, w/s, wps ex: write <= 1 tb", + "tread, t.read ex: tread = 1", + "twrite, t.write ex: twrite = 1", + "user ex: user = root", + "state ex: state = running", + "gpu% ex: gpu% < 4.2", + "gmem ex: gmem < 100 kb", + "gmem% ex: gmem% < 4.2", "", "Comparison operators:", - "= ex: cpu = 1", - "> ex: cpu > 1", - "< ex: cpu < 1", - ">= ex: cpu >= 1", - "<= ex: cpu <= 1", + "= ex: cpu = 1", + "> ex: cpu > 1", + "< ex: cpu < 1", + ">= ex: cpu >= 1", + "<= ex: cpu <= 1", "", "Logical operators:", - "and, &&, <Space> ex: btm and cpu > 1 and mem > 1", - "or, || ex: btm or firefox", + "and, &&, <Space> ex: btm and cpu > 1 and mem > 1", + "or, || ex: btm or firefox", "", "Supported units:", - "B ex: read > 1 b", - "KB ex: read > 1 kb", - "MB ex: read > 1 mb", - "TB ex: read > 1 tb", - "KiB ex: read > 1 kib", - "MiB ex: read > 1 mib", - "GiB ex: read > 1 gib", - "TiB ex: read > 1 tib", + "B ex: read > 1 b", + "KB ex: read > 1 kb", + "MB ex: read > 1 mb", + "TB ex: read > 1 tb", + "KiB ex: read > 1 kib", + "MiB ex: read > 1 mib", + "GiB ex: read > 1 gib", + "TiB ex: read > 1 tib", ]; const SORT_HELP_TEXT: [&str; 6] = [ "5 - Sort widget", - "Down, 'j' Scroll down in list", - "Up, 'k' Scroll up in list", - "Mouse scroll Scroll through sort widget", - "Esc Close the sort widget", - "Enter Sort by current selected column", + "Down, 'j' Scroll down in list", + "Up, 'k' Scroll up in list", + "Mouse scroll Scroll through sort widget", + "Esc Close the sort widget", + "Enter Sort by current selected column", ]; const TEMP_HELP_WIDGET: [&str; 3] = [ "6 - Temperature widget", - "'s' Sort by sensor name, press again to reverse", - "'t' Sort by temperature, press again to reverse", + "'s' Sort by sensor name, press again to reverse", + "'t' Sort by temperature, press again to reverse", ]; const DISK_HELP_WIDGET: [&str; 9] = [ "7 - Disk widget", - "'d' Sort by disk name, press again to reverse", - "'m' Sort by disk mount, press again to reverse", - "'u' Sort by disk usage, press again to reverse", - "'n' Sort by disk free space, press again to reverse", - "'t' Sort by total disk space, press again to reverse", - "'p' Sort by disk usage percentage, press again to reverse", - "'r' Sort by disk read activity, press again to reverse", - "'w' Sort by disk write activity, press again to reverse", + "'d' Sort by disk name, press again to reverse", + "'m' Sort by disk mount, press again to reverse", + "'u' Sort by disk usage, press again to reverse", + "'n' Sort by disk free space, press again to reverse", + "'t' Sort by total disk space, press again to reverse", + "'p' Sort by disk usage percentage, press again to reverse", + "'r' Sort by disk read activity, press again to reverse", + "'w' Sort by disk write activity, press again to reverse", ]; const BATTERY_HELP_TEXT: [&str; 3] = [ "8 - Battery widget", - "Left Go to previous battery", - "Right Go to next battery", + "Left Go to previous battery", + "Right Go to next battery", ]; const BASIC_MEM_HELP_TEXT: [&str; 2] = [ "9 - Basic memory widget", - "% Toggle between values and percentages for memory usage", + "% Toggle between values and percentages for memory usage", ]; pub(crate) const HELP_TEXT: [&[&str]; HELP_CONTENTS_TEXT.len()] = [ ++++++ bottom.obsinfo ++++++ --- /var/tmp/diff_new_pack.GzXzIT/_old 2025-11-18 15:39:31.534660051 +0100 +++ /var/tmp/diff_new_pack.GzXzIT/_new 2025-11-18 15:39:31.538660219 +0100 @@ -1,5 +1,5 @@ name: bottom -version: 0.11.3 -mtime: 1762442775 -commit: e2e2bc5e22acfe2762f9db3fea60a73318d027cf +version: 0.11.4 +mtime: 1763328980 +commit: 0e98e0239205f641df29d5fe0b1f439e9bd9c66c ++++++ vendor.tar.zst ++++++ /work/SRC/openSUSE:Factory/bottom/vendor.tar.zst /work/SRC/openSUSE:Factory/.bottom.new.2061/vendor.tar.zst differ: char 7, line 1
