mirror of
https://github.com/aristocratos/btop.git
synced 2024-05-18 11:22:46 +12:00
934a9e3cf2
commit285fb215d1
Author: aristocratos <gnmjpl@gmail.com> Date: Thu Dec 28 13:10:18 2023 +0100 Proc::draw() -> Use std::erase_if() instead of for loops commit2fba934cde
Author: aristocratos <gnmjpl@gmail.com> Date: Wed Dec 27 00:54:28 2023 +0100 Fixed leftover code in GPU init logging false errors commitad14554f32
Author: aristocratos <gnmjpl@gmail.com> Date: Tue Dec 26 19:32:43 2023 +0100 Try alternative names for GPU libraries during GPU init commita8fda16bf6
Merge:e15e0b7
2796af3
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Tue Dec 26 19:19:14 2023 +0100 Merge pull request #696 from aristocratos/map_safety commit2796af3f37
Author: aristocratos <gnmjpl@gmail.com> Date: Tue Dec 26 19:18:37 2023 +0100 Document DEBUG flag for Makefile commitf484326bf2
Merge:b4eb397
e15e0b7
Author: aristocratos <gnmjpl@gmail.com> Date: Tue Dec 26 19:11:26 2023 +0100 Merge branch 'main' into map_safety commitb4eb397fc6
Author: aristocratos <gnmjpl@gmail.com> Date: Mon Dec 25 10:52:52 2023 +0100 Fix errors commit3c04a7a380
Author: aristocratos <gnmjpl@gmail.com> Date: Mon Dec 25 10:41:15 2023 +0100 Added more checks and debug logging commit8b81c4a4ec
Author: aristocratos <gnmjpl@gmail.com> Date: Mon Dec 25 03:28:35 2023 +0100 Return const refs commitf836233b64
Author: aristocratos <gnmjpl@gmail.com> Date: Mon Dec 25 02:49:24 2023 +0100 Remove robin_hood.h commit3a8ceacaf8
Author: aristocratos <gnmjpl@gmail.com> Date: Mon Dec 25 02:37:32 2023 +0100 Fix call to compact and missing utility include commite15e0b7188
Author: aristocratos <gnmjpl@gmail.com> Date: Mon Dec 25 02:27:38 2023 +0100 Revert "Replace robin_hood map and set with STD alternative and add safeVal() function for map/vector access with fallback" This reverts commit6c87ab6196
. commitced47a960f
Author: aristocratos <gnmjpl@gmail.com> Date: Mon Dec 25 02:26:13 2023 +0100 Replace robin_hood map and set with STD alternative and add safeVal() function for map/vector access with fallback commit6c87ab6196
Author: aristocratos <gnmjpl@gmail.com> Date: Mon Dec 25 02:16:15 2023 +0100 Replace robin_hood map and set with STD alternative and add safeVal() function for map/vector access with fallback commita2325371d4
Merge:aab2e8c
b598f02
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sun Dec 17 19:56:31 2023 +0100 Merge pull request #690 from aristocratos/osx-fix commitb598f02468
Merge:b1fe377
aab2e8c
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sun Dec 17 12:06:39 2023 +0100 Merge branch 'main' into osx-fix commitaab2e8cc55
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sun Dec 17 12:03:47 2023 +0100 Fixed test-snap-can-build.yml commitb1fe3779e1
Merge:7805242
2d15c41
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sun Dec 17 11:56:14 2023 +0100 Merge branch 'main' into osx-fix commit2d15c41555
Merge:fe699b4
2d3e453
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sun Dec 17 11:54:49 2023 +0100 Merge pull request #684 from kz6fittycent/main commit2d3e453ed5
Merge:0a38864
fe699b4
Author: kz6fittycent <jimmy.tigert@gmail.com> Date: Fri Dec 15 12:02:11 2023 -0600 Merge branch 'main' into main commit0a388647cc
Author: kz6fittycent <jimmy.tigert@gmail.com> Date: Fri Dec 15 12:01:45 2023 -0600 Update test-snap-can-build.yml whoops commit49f425f356
Author: kz6fittycent <jimmy.tigert@gmail.com> Date: Fri Dec 15 12:00:48 2023 -0600 Update test-snap-can-build.yml https://github.com/aristocratos/btop/pull/684#issuecomment-1852801811 commit780524267f
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Fri Dec 15 09:02:57 2023 +0100 conditional compile on Big Sur and up commitfe699b4333
Author: aristocratos <gnmjpl@gmail.com> Date: Tue Dec 12 23:20:09 2023 +0100 Version bump to 1.3.0 in preparation for upcoming release commit2d2df23198
Merge:d7b581e
b71538e
Author: aristocratos <gnmjpl@gmail.com> Date: Tue Dec 12 23:19:31 2023 +0100 Merge branch 'main' of github.com:aristocratos/btop commitd7b581eda4
Author: aristocratos <gnmjpl@gmail.com> Date: Tue Dec 12 23:17:36 2023 +0100 Updated changes commitb71538eabe
Merge:a017056
730af5d
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Tue Dec 12 23:07:39 2023 +0100 Merge pull request #666 from muneebmahmed/macos-clang commit730af5d4e1
Merge:0246b1b
a017056
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Tue Dec 12 23:05:52 2023 +0100 Merge branch 'main' into macos-clang commita017056ea0
Author: aristocratos <gnmjpl@gmail.com> Date: Tue Dec 12 23:05:07 2023 +0100 Added swap to ignore for statvfs() since it will always fail commite770cccaf8
Author: aristocratos <gnmjpl@gmail.com> Date: Tue Dec 12 22:55:48 2023 +0100 Added try->catch for get_zfs_stat_file() to avoid fs error commit0246b1b971
Author: Muneeb Ahmed <32603485+muneebmahmed@users.noreply.github.com> Date: Mon Nov 20 12:18:40 2023 -0800 Enable macos clang Apple clang uses different versioning from LLVM, so 15.0.0 is compatible commit6282f36f8f
Merge:cfd20a3
be73160
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Tue Dec 12 22:06:02 2023 +0100 Merge pull request #675 from imwints/cmake commitbe731600f1
Merge:f4b14ce
cfd20a3
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Tue Dec 12 22:01:21 2023 +0100 Merge branch 'main' into cmake commit450b59b657
Merge:875f08b
cfd20a3
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Tue Dec 12 21:55:27 2023 +0100 Merge branch 'main' into main commitcfd20a374b
Merge:14e664e
b6a8696
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Tue Dec 12 21:48:55 2023 +0100 Merge pull request #677 from imwints/cpu-model commitb6a86962e2
Merge:8096433
14e664e
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Tue Dec 12 21:47:01 2023 +0100 Merge branch 'main' into cpu-model commit14e664e756
Merge:0d35746
5902484
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Tue Dec 12 21:41:55 2023 +0100 Merge pull request #679 from masiboss/main commit875f08ba5e
Author: kz6fittycent <jimmy.tigert@gmail.com> Date: Tue Dec 12 14:27:16 2023 -0600 Update snapcraft.yaml - opengl - Testing opengl plug commit3ee4b18e57
Author: kz6fittycent <jimmy.tigert@gmail.com> Date: Tue Dec 12 14:14:59 2023 -0600 Update bug_report.md - added snap info for bug reports to delineate commit2973a76f2b
Merge:fb782a2
0d35746
Author: kz6fittycent <jimmy.tigert@gmail.com> Date: Tue Dec 12 14:06:44 2023 -0600 Merge branch 'aristocratos:main' into main commitfb782a2ab3
Author: kz6fittycent <jimmy.tigert@gmail.com> Date: Tue Dec 12 14:02:27 2023 -0600 Create test-snap-can-build.yml commit5902484f39
Author: masiboss <32394683+masiboss@users.noreply.github.com> Date: Thu Dec 7 21:42:11 2023 +0100 simplify removal of "Apple" commit5beb9e12e5
Author: masiboss <32394683+masiboss@users.noreply.github.com> Date: Thu Dec 7 20:56:40 2023 +0100 in case apple decides to add another suffix to the cpu name commit1b2f11b412
Author: masiboss <32394683+masiboss@users.noreply.github.com> Date: Thu Dec 7 20:49:34 2023 +0100 cut less of cpu name if frequency is not shown commitbcf4ad8ab6
Author: masiboss <32394683+masiboss@users.noreply.github.com> Date: Thu Dec 7 19:50:12 2023 +0100 fix array out of bounds on regular m chip commitaeefcacbc9
Author: masiboss <32394683+masiboss@users.noreply.github.com> Date: Thu Dec 7 19:34:11 2023 +0100 fix cpu version not included commit23698940df
Author: masiboss <32394683+masiboss@users.noreply.github.com> Date: Thu Dec 7 19:23:58 2023 +0100 strip "Apple" from name of Apple silicon chips commit8096433736
Author: Steffen Winter <steffen.winter@proton.me> Date: Tue Dec 5 02:34:24 2023 +0100 Fix printed model name for older Intel CPU commitf4b14ce97e
Author: Steffen Winter <steffen.winter@proton.me> Date: Tue Dec 5 01:00:14 2023 +0100 Add CMake compile instructions for macOS commit97b35d9720
Author: Steffen Winter <steffen.winter@proton.me> Date: Sat Dec 2 00:35:13 2023 +0100 Add cmake workflow for all platforms commite35538fa29
Author: Steffen Winter <steffen.winter@proton.me> Date: Sat Dec 2 00:34:32 2023 +0100 Patch RPATH on FreeBSD, support OSX and format commit0d357468b5
Merge:ebc46ca
00f58b6
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Fri Dec 1 22:52:51 2023 +0100 Merge pull request #674 from imwints/bsd-workflow Provide FreeBSD static release binaries commit00f58b6228
Author: Steffen Winter <steffen.winter@proton.me> Date: Thu Nov 30 23:07:52 2023 +0100 Provide FreeBSD static release binaries Bumps vmaction@freesdb-vm to version 1 which runs on Linux and doesn't hang all the time. Also uses clang for full static compilation commitebc46ca12c
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Mon Nov 27 18:21:42 2023 +0100 Clean up compile instructions commitd1384c9341
Merge:2b0cc37
6f12e35
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Mon Nov 27 17:53:39 2023 +0100 Merge pull request #671 from imwints/cmake-gpu Bring GPU support to CMake and improve how Make handles the ROCm library build commit6f12e3555d
Author: Steffen Winter <steffen.winter@proton.me> Date: Mon Nov 27 00:33:11 2023 +0100 Properly invoke CMake to build ROCm * Build an optimized library by default * Only build the library target * ROCm is build with debug symbols when `make DEBUG=true` * Enable LTO * Use the more generic CMake build command instead of calling make directly, this always uses all cores by default and makes it easier to switch to another generator e.g. Ninja * Use a variable to store the ROCm source directory. The directory can be changed with `make ROCM_DIR=<dir>` * The static library is now directly linked by CMake and not created off of the object files from a shared library build * The C++ compiler used to compile btop is now used to compile ROCm to avoid name mangling when `CXX` from the environment and `make CXX=` differ * CMake is invoked from btop's root directory commit0585bc9cfb
Author: Steffen Winter <steffen.winter@proton.me> Date: Mon Nov 27 00:31:10 2023 +0100 Suppress all output from ROCm build Similar to including external include files with `-isystem`, ignore output from ROCm build since these warnings aren't a concern here commit831be262b0
Author: Steffen Winter <steffen.winter@proton.me> Date: Mon Nov 27 00:29:14 2023 +0100 Remove ROCm object files with `make clean/distclean` commit2f59e61d87
Author: Steffen Winter <steffen.winter@proton.me> Date: Sun Nov 26 22:56:58 2023 +0100 Add GPU options for cmake based builds commit7588d96dd4
Author: Steffen Winter <steffen.winter@proton.me> Date: Sun Nov 26 21:40:29 2023 +0100 Add check for <ranges> header commitebbb769a6a
Author: Steffen Winter <steffen.winter@proton.me> Date: Sun Nov 26 21:39:13 2023 +0100 Move calls to find_package to where they're required commited0fa34a9d
Author: Steffen Winter <steffen.winter@proton.me> Date: Sun Nov 26 19:39:29 2023 +0100 Bump required CMake version commit2b0cc37632
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sat Nov 25 23:11:54 2023 +0100 Update compile instructions for Gpu support commit359c67136b
Author: aristocratos <gnmjpl@gmail.com> Date: Sat Nov 25 22:49:26 2023 +0100 Update changelog commit5b01235315
Merge:0267eba
0bb8599
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sat Nov 25 21:57:32 2023 +0100 Merge pull request #529 from romner-set/main Add GPU monitoring support commit0bb8599a96
Merge:94d4502
0267eba
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sat Nov 25 21:51:09 2023 +0100 Merge branch 'main' into main commit94d4502901
Author: aristocratos <gnmjpl@gmail.com> Date: Sat Nov 25 21:48:50 2023 +0100 Readme update and Makfile fixes. commit19bcff894b
Author: aristocratos <gnmjpl@gmail.com> Date: Sat Nov 25 21:01:11 2023 +0100 Squashed commit of the following: commit0267eba2bb
Merge:50bbab0
e81cf2b
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Wed Nov 15 21:43:18 2023 +0100 Merge pull request #659 from ivanp7/patch-1 Add alternative key codes for Delete, Insert, Home, End commit50bbab0512
Merge:9edbf27
5a14c7b
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Wed Nov 15 21:35:50 2023 +0100 Merge pull request #660 from stradicat/feature/elementarish Elementarish theme: color update according to Elementary palette commit5a14c7b6fa
Merge:979506f
71eb414
Author: Dennis Mayr <dmayr.dev@gmail.com> Date: Wed Nov 15 17:27:34 2023 -0300 Merge branch 'main' of https://github.com/stradicat/btop commit979506f18e
Author: Dennis Mayr <dmayr.dev@gmail.com> Date: Wed Nov 8 11:17:47 2023 -0300 Elementarish theme: color update according to Elementary palette commit71eb4142e8
Author: Dennis Mayr <dmayr.dev@gmail.com> Date: Wed Nov 8 11:17:47 2023 -0300 Elementarish theme: color update according to Elementary palette commite81cf2b7ff
Author: vân <3432246+ivanp7@users.noreply.github.com> Date: Tue Nov 7 15:12:27 2023 +0000 Add alternative key codes for Insert, Home, End commitf9452ff6d5
Author: vân <3432246+ivanp7@users.noreply.github.com> Date: Mon Nov 6 13:31:53 2023 +0000 Add alternative Delete key code Delete key not always produces ^[[3~, on some terminals (like st) it produces ^[[P. commit9edbf27f1b
Merge:2a864f6
ff1f51c
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sat Oct 21 02:09:55 2023 +0200 Merge pull request #649 from nobounce/workflow-timeout Set FreeBSD workflow timeout commitff1f51ccbb
Author: Steffen Winter <steffen.winter@proton.me> Date: Wed Oct 18 22:26:36 2023 +0200 Set FreeBSD workflow timeout Recently the FreeBSD workflow has started to hang in a boot loop when the VM starts up. The issue is being tracked upstream but there is not response at the moment. To work around this set a timeout to not waste CI minutes. Other workflows might also want this change since they don't take 20 minutes anyway. commit2a864f6f2e
Merge:636eb25
b2bf8ef
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sat Oct 7 10:40:54 2023 +0200 Merge pull request #643 from DecklynKern/main Fix scrollbar not clearing sometimes. commitb2bf8ef504
Author: DecklynKern <DecklynKern@gmail.com> Date: Fri Oct 6 17:33:38 2023 -0600 Fix scrollbar not clearing sometimes. commit636eb25f5e
Merge:260c0f6
b5ba2fc
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sat Sep 30 19:51:03 2023 +0200 Merge pull request #623 from rahulaggarwal965/main Add keybind for toggling memory display mode in PROC box commitb5ba2fc963
Author: Rahul Aggarwal <rahulaggarwal965@gmail.com> Date: Wed Sep 20 22:55:56 2023 -0400 Add keybind for toggling memory display mode in PROC box commit260c0f6623
Merge:52bfff7
e6a06eb
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sat Sep 30 18:56:25 2023 +0200 Merge pull request #635 from lvxnull/editorconfig Add hpp files to .editorconfig commite6a06eb729
Author: lvxnull <86745229+lvxnull@users.noreply.github.com> Date: Thu Sep 28 19:44:47 2023 +0200 Add hpp files to .editorconfig commit52bfff7ceb
Merge:1f72e56
19dbbe1
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sat Sep 30 18:55:08 2023 +0200 Merge pull request #636 from nobounce/performance-iili Minor string initialization improvement commit19dbbe1a17
Author: nobounce <steffen.winter@proton.me> Date: Fri Sep 29 12:20:59 2023 +0200 Minor string initialization improvement commit1f72e56c7d
Merge:278a0e6
cdcf8bc
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Fri Sep 29 10:43:21 2023 +0200 Merge pull request #633 from crestfallnatwork/main [fix] Made disks statvfs logic asynchronous. commitcdcf8bc929
Author: crestfalln <guptahiman01@gmail.com> Date: Fri Sep 29 09:07:27 2023 +0530 fixed bug where updated disks stats overrided disk io data commit9b4e85f08d
Author: crestfalln <no-reply@crestfalln.com> Date: Thu Sep 28 04:57:05 2023 +0530 fixed bug where updated disks stats overrided disk io data commit889623874e
Author: crestfalln <no-reply@crestfalln.com> Date: Wed Sep 27 23:57:06 2023 +0530 made disks stat logic async commit278a0e6b17
Merge:d16adc9
e89519f
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Thu Sep 28 18:32:09 2023 +0200 Merge pull request #630 from lvxnull/signal-list Fix signal list on non-linux/weird linux platforms commite89519fbb2
Author: lvxnull <86745229+lvxnull@users.noreply.github.com> Date: Sun Sep 24 21:44:38 2023 +0200 Fix signal list on non-linux/weird linux platforms commitd16adc9fd0
Merge:2c3ac48
f34b408
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Thu Sep 28 18:20:42 2023 +0200 Merge pull request #618 from nobounce/aggregate-child-processes Add option to accumulate a child's resources in parent in tree-view commitf34b40892f
Author: nobounce <steffen.winter@proton.me> Date: Sun Sep 24 16:34:50 2023 +0200 Make process thread count better readable when wider than 5 digits commit6027cedd42
Author: nobounce <steffen.winter@proton.me> Date: Thu Sep 14 23:27:05 2023 +0200 Add option to accumulate a child's resources in parent in tree-view commit2c3ac4855d
Merge:f90dc37
5c6a281
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Wed Sep 13 21:14:56 2023 +0200 Merge pull request #589 from nobounce/cmake Add CMake support for Linux commitf90dc37c26
Merge:0cac861
68a49c1
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Wed Sep 13 20:27:05 2023 +0200 Merge pull request #610 from SidVeld/feature/horizon-theme Horizon theme commit5c6a281002
Author: nobounce <steffen.winter@proton.me> Date: Tue Aug 29 20:39:00 2023 +0200 Add CMake support Linux is completly supported FreeBSD is not able to create a static executable for now. See https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=273398 MacOS was not tested commit68a49c10a6
Author: SidVeld <sidveld@gmail.com> Date: Wed Sep 6 18:03:31 2023 +0300 Add horizon theme commit0cac861910
Merge:31be436
f798acd
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Tue Sep 5 19:27:38 2023 +0200 Merge pull request #609 from scorpion-26/byteconv Fix short conversion of 1000-1023 *iB commitf798acdaf7
Author: scorpion-26 <dev.scorpion26@gmail.com> Date: Tue Sep 5 18:00:47 2023 +0200 Fix short conversion of 1000-1023*iB floating_humanizer([1000-1024], true) with base 8 returns "2K", whereas it should return "1.0K" to align with other formats. The conversion is also broken for all other units(e.g. 1023M is also broken and returns "2G") commit31be4362ce
Author: aristocratos <gnmjpl@gmail.com> Date: Sun Aug 27 02:00:07 2023 +0200 FreeBSD Github action 13.1 -> 13.2 and static libgcc and libstdc++ commitfc523fd1d0
Author: aristocratos <gnmjpl@gmail.com> Date: Sun Aug 27 01:36:26 2023 +0200 Fix for FreeBSD github action not failing "correctly"... commitb87772611c
Author: aristocratos <gnmjpl@gmail.com> Date: Sat Nov 25 20:44:45 2023 +0100 Added definition GPU_SUPPORT to toggle GPU related code commit0267eba2bb
Merge:50bbab0
e81cf2b
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Wed Nov 15 21:43:18 2023 +0100 Merge pull request #659 from ivanp7/patch-1 Add alternative key codes for Delete, Insert, Home, End commit50bbab0512
Merge:9edbf27
5a14c7b
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Wed Nov 15 21:35:50 2023 +0100 Merge pull request #660 from stradicat/feature/elementarish Elementarish theme: color update according to Elementary palette commit5a14c7b6fa
Merge:979506f
71eb414
Author: Dennis Mayr <dmayr.dev@gmail.com> Date: Wed Nov 15 17:27:34 2023 -0300 Merge branch 'main' of https://github.com/stradicat/btop commit979506f18e
Author: Dennis Mayr <dmayr.dev@gmail.com> Date: Wed Nov 8 11:17:47 2023 -0300 Elementarish theme: color update according to Elementary palette commit71eb4142e8
Author: Dennis Mayr <dmayr.dev@gmail.com> Date: Wed Nov 8 11:17:47 2023 -0300 Elementarish theme: color update according to Elementary palette commite81cf2b7ff
Author: vân <3432246+ivanp7@users.noreply.github.com> Date: Tue Nov 7 15:12:27 2023 +0000 Add alternative key codes for Insert, Home, End commitf9452ff6d5
Author: vân <3432246+ivanp7@users.noreply.github.com> Date: Mon Nov 6 13:31:53 2023 +0000 Add alternative Delete key code Delete key not always produces ^[[3~, on some terminals (like st) it produces ^[[P. commit9edbf27f1b
Merge:2a864f6
ff1f51c
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sat Oct 21 02:09:55 2023 +0200 Merge pull request #649 from nobounce/workflow-timeout Set FreeBSD workflow timeout commitff1f51ccbb
Author: Steffen Winter <steffen.winter@proton.me> Date: Wed Oct 18 22:26:36 2023 +0200 Set FreeBSD workflow timeout Recently the FreeBSD workflow has started to hang in a boot loop when the VM starts up. The issue is being tracked upstream but there is not response at the moment. To work around this set a timeout to not waste CI minutes. Other workflows might also want this change since they don't take 20 minutes anyway. commit2a864f6f2e
Merge:636eb25
b2bf8ef
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sat Oct 7 10:40:54 2023 +0200 Merge pull request #643 from DecklynKern/main Fix scrollbar not clearing sometimes. commitb2bf8ef504
Author: DecklynKern <DecklynKern@gmail.com> Date: Fri Oct 6 17:33:38 2023 -0600 Fix scrollbar not clearing sometimes. commit636eb25f5e
Merge:260c0f6
b5ba2fc
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sat Sep 30 19:51:03 2023 +0200 Merge pull request #623 from rahulaggarwal965/main Add keybind for toggling memory display mode in PROC box commitb5ba2fc963
Author: Rahul Aggarwal <rahulaggarwal965@gmail.com> Date: Wed Sep 20 22:55:56 2023 -0400 Add keybind for toggling memory display mode in PROC box commit260c0f6623
Merge:52bfff7
e6a06eb
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sat Sep 30 18:56:25 2023 +0200 Merge pull request #635 from lvxnull/editorconfig Add hpp files to .editorconfig commite6a06eb729
Author: lvxnull <86745229+lvxnull@users.noreply.github.com> Date: Thu Sep 28 19:44:47 2023 +0200 Add hpp files to .editorconfig commit52bfff7ceb
Merge:1f72e56
19dbbe1
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sat Sep 30 18:55:08 2023 +0200 Merge pull request #636 from nobounce/performance-iili Minor string initialization improvement commit19dbbe1a17
Author: nobounce <steffen.winter@proton.me> Date: Fri Sep 29 12:20:59 2023 +0200 Minor string initialization improvement commit1f72e56c7d
Merge:278a0e6
cdcf8bc
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Fri Sep 29 10:43:21 2023 +0200 Merge pull request #633 from crestfallnatwork/main [fix] Made disks statvfs logic asynchronous. commitcdcf8bc929
Author: crestfalln <guptahiman01@gmail.com> Date: Fri Sep 29 09:07:27 2023 +0530 fixed bug where updated disks stats overrided disk io data commit9b4e85f08d
Author: crestfalln <no-reply@crestfalln.com> Date: Thu Sep 28 04:57:05 2023 +0530 fixed bug where updated disks stats overrided disk io data commit889623874e
Author: crestfalln <no-reply@crestfalln.com> Date: Wed Sep 27 23:57:06 2023 +0530 made disks stat logic async commit278a0e6b17
Merge:d16adc9
e89519f
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Thu Sep 28 18:32:09 2023 +0200 Merge pull request #630 from lvxnull/signal-list Fix signal list on non-linux/weird linux platforms commite89519fbb2
Author: lvxnull <86745229+lvxnull@users.noreply.github.com> Date: Sun Sep 24 21:44:38 2023 +0200 Fix signal list on non-linux/weird linux platforms commitd16adc9fd0
Merge:2c3ac48
f34b408
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Thu Sep 28 18:20:42 2023 +0200 Merge pull request #618 from nobounce/aggregate-child-processes Add option to accumulate a child's resources in parent in tree-view commitf34b40892f
Author: nobounce <steffen.winter@proton.me> Date: Sun Sep 24 16:34:50 2023 +0200 Make process thread count better readable when wider than 5 digits commit6027cedd42
Author: nobounce <steffen.winter@proton.me> Date: Thu Sep 14 23:27:05 2023 +0200 Add option to accumulate a child's resources in parent in tree-view commit2c3ac4855d
Merge:f90dc37
5c6a281
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Wed Sep 13 21:14:56 2023 +0200 Merge pull request #589 from nobounce/cmake Add CMake support for Linux commitf90dc37c26
Merge:0cac861
68a49c1
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Wed Sep 13 20:27:05 2023 +0200 Merge pull request #610 from SidVeld/feature/horizon-theme Horizon theme commit5c6a281002
Author: nobounce <steffen.winter@proton.me> Date: Tue Aug 29 20:39:00 2023 +0200 Add CMake support Linux is completly supported FreeBSD is not able to create a static executable for now. See https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=273398 MacOS was not tested commit68a49c10a6
Author: SidVeld <sidveld@gmail.com> Date: Wed Sep 6 18:03:31 2023 +0300 Add horizon theme commit0cac861910
Merge:31be436
f798acd
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Tue Sep 5 19:27:38 2023 +0200 Merge pull request #609 from scorpion-26/byteconv Fix short conversion of 1000-1023 *iB commitf798acdaf7
Author: scorpion-26 <dev.scorpion26@gmail.com> Date: Tue Sep 5 18:00:47 2023 +0200 Fix short conversion of 1000-1023*iB floating_humanizer([1000-1024], true) with base 8 returns "2K", whereas it should return "1.0K" to align with other formats. The conversion is also broken for all other units(e.g. 1023M is also broken and returns "2G") commit975525d38f
Author: aristocratos <gnmjpl@gmail.com> Date: Sun Aug 27 12:34:46 2023 +0200 Fix: Cpu gpu stats always shown when show_gpu_info is On and sizing issues commit08abf0b930
Author: aristocratos <gnmjpl@gmail.com> Date: Sun Aug 27 01:28:36 2023 +0200 Quickfixes for MacOS and FreeBSD compilation. commit7290109f80
Author: aristocratos <gnmjpl@gmail.com> Date: Sun Aug 27 00:58:30 2023 +0200 Merge fix commit283d463242
Merge:efddad4
c296ac1
Author: aristocratos <gnmjpl@gmail.com> Date: Sun Aug 27 00:56:22 2023 +0200 Merge branch 'main' into pr/romner-set/529 commitefddad42dc
Author: aristocratos <gnmjpl@gmail.com> Date: Sun Aug 27 00:39:57 2023 +0200 Changed: cpu_graph_lower Auto defaults to cpu_graph_upper when show_gpu_info is Off commita9bc0874d4
Author: aristocratos <gnmjpl@gmail.com> Date: Sun Aug 27 00:31:07 2023 +0200 Added show_gpu_info setting and Auto options for cpu graphs commitb3970ee19c
Author: aristocratos <gnmjpl@gmail.com> Date: Sat Aug 26 20:52:59 2023 +0200 Fixed: Key 5-0 gpu box toggle commitbd5d697830
Author: aristocratos <gnmjpl@gmail.com> Date: Sat Aug 26 20:29:43 2023 +0200 Squashed commit of the following: commitc296ac13cd
Merge:9a1e760
091c30a
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sat Aug 26 19:29:57 2023 +0200 Merge pull request #590 from nobounce/dangling-reference-config Convert parameters and config keys to std::string_view commit9a1e760a66
Merge:9c8af4d
22e64ca
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sat Aug 26 19:20:18 2023 +0200 Merge pull request #602 from jfouquart/main Fix getting zfs pool name with '.' char in freebsd commit9c8af4df43
Merge:8a49d8c
2217cbe
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sat Aug 26 19:18:55 2023 +0200 Merge pull request #601 from joske/cleanup [macos] don't check /sys on macos commit8a49d8cf45
Merge:1556388
008fcd8
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sat Aug 26 19:18:07 2023 +0200 Merge pull request #600 from joske/makefile [macos/freebsd] support gcc13 commit1556388c83
Merge:1b126f5
d17e1a2
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sat Aug 26 19:14:00 2023 +0200 Merge pull request #599 from joske/main [macos] fix temp sensor on system with many cores commitd17e1a2dac
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Fri Aug 25 16:18:39 2023 +0200 fix some warnings commit4d8aa6b118
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Fri Aug 25 15:52:58 2023 +0200 fix core check commit22e64caaff
Author: Jonathan Fouquart <jfouquart@hotmail.fr> Date: Fri Aug 25 09:37:49 2023 +0200 Fix getting zfs pool name with '.' char in freebsd commit2217cbe143
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Aug 23 16:01:04 2023 +0200 [macos] don't check /sys on macos commit008fcd889e
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Aug 23 16:05:00 2023 +0200 also add g++13 commit0fdca5eb03
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Aug 23 15:54:07 2023 +0200 support gcc13 commitdcbdb7360d
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Aug 23 15:46:47 2023 +0200 [macos] fix temp sensor on system with many cores commit1b126f55e3
Author: aristocratos <gnmjpl@gmail.com> Date: Fri Aug 4 01:08:27 2023 +0200 Update Makefile for partial static compilation on freebsd commitc8ec6bbb00
Author: aristocratos <gnmjpl@gmail.com> Date: Thu Aug 3 23:08:33 2023 +0200 Fix freebsd nullptr changes and makefile for gcc12 and newer commit8a33aab588
Merge:94e5c02
e4abcef
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sun Jul 30 13:21:48 2023 +0200 Merge pull request #539 from nobounce/replace-NULL-nullptr Modernize using nullptr. commit94e5c02d11
Author: aristocratos <gnmjpl@gmail.com> Date: Thu Jul 27 20:51:21 2023 +0200 Better text editing commit091c30ab2b
Author: nobounce <steffen.winter@proton.me> Date: Thu Jul 27 14:17:54 2023 +0200 Convert parameters and config keys to std::string_view Using std::string_view instead of std::string& silences a new warning from GCC 13, -Wdangling-reference Also switch return type of `getI` from int& to int, trivial types are cheaper to copy by value commite4abcefbf9
Author: nobounce <steffen.winter@proton.me> Date: Wed Jul 26 16:19:17 2023 +0200 Use nullptr instead of NULL. See https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf TLDR: NULL is of type int and relies on proper implicit pointer conversion which may lead to issues when using overloaded functions It is also considered a 'best practise' for modern C++ and conveys the programmers intention more precisly. commitd53307f14c
Author: nobounce <steffen.winter@proton.me> Date: Sun Jul 23 19:53:36 2023 +0200 Fix path to Linux CI file in itself The CI file has a list of dependent files including itself. The path was not updated when the CI was split into different files commit594f42b9eb
Merge:aca2e4b
53d6eba
Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Wed Jul 26 15:38:01 2023 +0200 Merge pull request #584 from nobounce/nb/fix-ci-path Fix path to Linux CI file in itself commitaca2e4be75
Author: aristocratos <gnmjpl@gmail.com> Date: Wed Jul 26 14:38:48 2023 +0200 Fix whitespace indent -> tab indent commit33faa01910
Author: aristocratos <gnmjpl@gmail.com> Date: Wed Jul 26 14:34:15 2023 +0200 Revert fmt submodule to static fmt folder in include commit53d6ebabc0
Author: nobounce <steffen.winter@proton.me> Date: Sun Jul 23 19:53:36 2023 +0200 Fix path to Linux CI file in itself The CI file has a list of dependent files including itself. The path was not updated when the CI was split into different files commit346c9e479b
Author: romner <roman@skotnica.com> Date: Wed Jul 19 16:53:58 2023 +0200 Fix GPU text overflow in CPU panel, again commit3a5e5fd5d3
Author: romner <roman@skotnica.com> Date: Wed Jul 19 16:22:45 2023 +0200 Improve 0-10 key input commit972b2b6a01
Author: romner <roman@skotnica.com> Date: Wed Jul 19 15:54:35 2023 +0200 Fix available boxes in menu & config description commit1f73453aec
Author: romner <roman@skotnica.com> Date: Wed Jul 19 15:34:23 2023 +0200 Fix crashes when trying to open nth GPU box with only n-1 GPUs in the system commit46c6be0a29
Author: romner <roman@skotnica.com> Date: Sun Jul 16 17:19:09 2023 +0200 Fix GPU horizontal text overflow in CPU panel commit85fb28cee6
Author: romner <roman@skotnica.com> Date: Fri Jul 14 02:39:44 2023 +0200 Fix RSMI_STATIC=true and add GPU section to README.md commit3fad8a6fde
Author: romner-set <roman@skotnica.com> Date: Mon Jun 26 13:10:31 2023 +0200 Add GPU options commit746f716a02
Author: romner-set <roman@skotnica.com> Date: Fri Jun 16 11:11:57 2023 +0200 Remove lib/rocm_smi_lib and add instructions for obtaining it to README commitd8ebbe1181
Author: romner <roman@skotnica.com> Date: Thu Jun 8 20:24:01 2023 +0200 Join NVML PCIe threads only if PCIe TX/RX is supported by GPU commitbe10989151
Author: romner <roman@skotnica.com> Date: Tue Jun 6 19:47:07 2023 +0200 Parallelize NVML PCIe TX/RX data collection commit85892a9fe3
Author: aristocratos <gnmjpl@gmail.com> Date: Mon Jun 5 21:59:26 2023 +0200 Fix type: ulong -> size_t and compare std::cmp_less commit85a10f0305
Author: romner <roman@skotnica.com> Date: Fri Jun 2 16:14:24 2023 +0200 Fix ROCm SMI makefile flags commitcd6979277d
Author: romner <roman@skotnica.com> Date: Fri Jun 2 15:44:44 2023 +0200 Fix error when ROCm SMI static compilation fails commitdaaa45324f
Author: romner <roman@skotnica.com> Date: Fri Jun 2 15:34:12 2023 +0200 Load ROCm SMI dynamically by default, optionally statically compile and link commit093edfe948
Author: aristocratos <gnmjpl@gmail.com> Date: Thu Jun 1 19:49:00 2023 +0200 Minor changes in wording... commitb9a4d31fa4
Author: aristocratos <gnmjpl@gmail.com> Date: Thu Jun 1 19:37:53 2023 +0200 Fix Makefile dependency order and layout commita0163ce220
Author: romner <roman@skotnica.com> Date: Thu Jun 1 16:42:02 2023 +0200 Statically link ROCm SMI commitb2df0696fd
Author: romner-set <roman@skotnica.com> Date: Thu Jun 1 03:41:56 2023 +0200 Dynamically load NVML commit547f17dda3
Author: romner-set <roman@skotnica.com> Date: Tue May 30 18:24:50 2023 +0200 Add more GPU graph types to the CPU panel commit842c761a73
Author: romner-set <roman@skotnica.com> Date: Mon May 22 09:46:20 2023 +0200 Fix crash when all GPU panels are open but the CPU panel is closed commit8c96bd51e9
Author: romner <roman@skotnica.com> Date: Sun May 21 20:34:47 2023 +0200 Handle GPUs which cannot report certain stats in GPU panel commit414d7eb94c
Author: romner <roman@skotnica.com> Date: Sun May 21 18:02:50 2023 +0200 Handle GPUs which cannot report certain stats in btop_collect.cpp and CPU panel commit005de97e6d
Author: aristocratos <gnmjpl@gmail.com> Date: Sun May 21 13:58:11 2023 +0200 Add missing fmt prefixes commit1fee2bc08b
Author: aristocratos <gnmjpl@gmail.com> Date: Sun May 21 13:52:19 2023 +0200 Add DebugTimer class and change some Logger::error calls to Logger::debug commit2e68c0b916
Author: aristocratos <gnmjpl@gmail.com> Date: Sat May 20 17:27:20 2023 +0200 Fixed key > gpu_names check commit04ed16a9f6
Author: aristocratos <gnmjpl@gmail.com> Date: Sat May 20 17:15:45 2023 +0200 Merged changes from main commit8c710a2b68
Author: aristocratos <gnmjpl@gmail.com> Date: Sat May 20 01:41:04 2023 +0200 Makefile auto detection and initial logic for excluding gpu code when libs are missing commit8bae1ec092
Author: aristocratos <gnmjpl@gmail.com> Date: Sat May 20 00:13:00 2023 +0200 Fixed debug timer for gpu commit01acfd603e
Author: romner-set <roman@skotnica.com> Date: Fri May 19 16:42:32 2023 +0200 Bind GPU panel to 5,6,7,8,9,0 and fully implement multi-GPU support commit22a463976d
Author: romner <roman@skotnica.com> Date: Thu May 18 16:07:05 2023 +0200 Add GPU info to CPU panel commitc352bf2613
Author: romner-set <roman@skotnica.com> Date: Mon May 15 19:42:55 2023 +0200 Add ROCm SMI backend for AMD GPU support commit917d568a77
Author: romner-set <roman@skotnica.com> Date: Mon May 15 13:58:54 2023 +0200 Add multi-GPU support for NVML data collection commit2d27f2ff61
Author: romner <roman@skotnica.com> Date: Sun May 14 17:40:50 2023 +0200 Fix crash when no nvidia GPU is detected commit0e0025a2c3
Author: romner <roman@skotnica.com> Date: Sun May 14 17:31:39 2023 +0200 Update makefile text, fix typo and adhere to contibuting guidelines commitbcffcdf19f
Author: romner <roman@skotnica.com> Date: Sun May 14 16:53:06 2023 +0200 Make GPU window's size dynamic and integrate it with the rest of btop commit95b3228308
Author: romner <roman@skotnica.com> Date: Sat May 13 19:41:51 2023 +0200 Improve GPU side panel commitadcdc583b0
Author: romner <roman@skotnica.com> Date: Sat May 13 00:27:23 2023 +0200 Add GPU side panel commitd522a91ef4
Author: romner <roman@skotnica.com> Date: Fri May 12 19:34:47 2023 +0200 Add rudimentary, fullscreen single-GPU NVML utilization graph
682 lines
18 KiB
C++
682 lines
18 KiB
C++
/* Copyright 2021 Aristocratos (jakob@qvantnet.com)
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
|
|
indent = tab
|
|
tab-size = 4
|
|
*/
|
|
|
|
#include <cmath>
|
|
#include <codecvt>
|
|
#include <iostream>
|
|
#include <fstream>
|
|
#include <ctime>
|
|
#include <sstream>
|
|
#include <iomanip>
|
|
#include <utility>
|
|
#include <ranges>
|
|
|
|
#include <unistd.h>
|
|
#include <termios.h>
|
|
#include <sys/ioctl.h>
|
|
|
|
#include "unordered_map"
|
|
#include "widechar_width.hpp"
|
|
#include "btop_shared.hpp"
|
|
#include "btop_tools.hpp"
|
|
#include "btop_config.hpp"
|
|
|
|
using std::cin;
|
|
using std::cout;
|
|
using std::floor;
|
|
using std::flush;
|
|
using std::max;
|
|
using std::string_view;
|
|
using std::to_string;
|
|
|
|
using namespace std::literals; // to use operator""s
|
|
|
|
namespace fs = std::filesystem;
|
|
namespace rng = std::ranges;
|
|
|
|
//? ------------------------------------------------- NAMESPACES ------------------------------------------------------
|
|
|
|
//* Collection of escape codes and functions for terminal manipulation
|
|
namespace Term {
|
|
|
|
atomic<bool> initialized{}; // defaults to false
|
|
atomic<int> width{}; // defaults to 0
|
|
atomic<int> height{}; // defaults to 0
|
|
string current_tty;
|
|
|
|
namespace {
|
|
struct termios initial_settings;
|
|
|
|
//* Toggle terminal input echo
|
|
bool echo(bool on=true) {
|
|
struct termios settings;
|
|
if (tcgetattr(STDIN_FILENO, &settings)) return false;
|
|
if (on) settings.c_lflag |= ECHO;
|
|
else settings.c_lflag &= ~(ECHO);
|
|
return 0 == tcsetattr(STDIN_FILENO, TCSANOW, &settings);
|
|
}
|
|
|
|
//* Toggle need for return key when reading input
|
|
bool linebuffered(bool on=true) {
|
|
struct termios settings;
|
|
if (tcgetattr(STDIN_FILENO, &settings)) return false;
|
|
if (on) settings.c_lflag |= ICANON;
|
|
else settings.c_lflag &= ~(ICANON);
|
|
if (tcsetattr(STDIN_FILENO, TCSANOW, &settings)) return false;
|
|
if (on) setlinebuf(stdin);
|
|
else setbuf(stdin, nullptr);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
bool refresh(bool only_check) {
|
|
struct winsize w;
|
|
if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) < 0) return false;
|
|
if (width != w.ws_col or height != w.ws_row) {
|
|
if (not only_check) {
|
|
width = w.ws_col;
|
|
height = w.ws_row;
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
auto get_min_size(const string& boxes) -> array<int, 2> {
|
|
bool cpu = boxes.find("cpu") != string::npos;
|
|
bool mem = boxes.find("mem") != string::npos;
|
|
bool net = boxes.find("net") != string::npos;
|
|
bool proc = boxes.find("proc") != string::npos;
|
|
#ifdef GPU_SUPPORT
|
|
int gpu = 0;
|
|
if (not Gpu::gpu_names.empty())
|
|
for (char i = '0'; i <= '5'; ++i)
|
|
gpu += (boxes.find(std::string("gpu") + i) != string::npos);
|
|
#endif
|
|
int width = 0;
|
|
if (mem) width = Mem::min_width;
|
|
else if (net) width = Mem::min_width;
|
|
width += (proc ? Proc::min_width : 0);
|
|
if (cpu and width < Cpu::min_width) width = Cpu::min_width;
|
|
#ifdef GPU_SUPPORT
|
|
if (gpu != 0 and width < Gpu::min_width) width = Gpu::min_width;
|
|
#endif
|
|
|
|
int height = (cpu ? Cpu::min_height : 0);
|
|
if (proc) height += Proc::min_height;
|
|
else height += (mem ? Mem::min_height : 0) + (net ? Net::min_height : 0);
|
|
#ifdef GPU_SUPPORT
|
|
height += Gpu::min_height*gpu;
|
|
#endif
|
|
|
|
return { width, height };
|
|
}
|
|
|
|
bool init() {
|
|
if (not initialized) {
|
|
initialized = (bool)isatty(STDIN_FILENO);
|
|
if (initialized) {
|
|
tcgetattr(STDIN_FILENO, &initial_settings);
|
|
current_tty = (ttyname(STDIN_FILENO) != nullptr ? static_cast<string>(ttyname(STDIN_FILENO)) : "unknown");
|
|
|
|
//? Disable stream sync - this does not seem to work on OpenBSD
|
|
#ifndef __OpenBSD__
|
|
cin.sync_with_stdio(false);
|
|
cout.sync_with_stdio(false);
|
|
#endif
|
|
|
|
//? Disable stream ties
|
|
cin.tie(nullptr);
|
|
cout.tie(nullptr);
|
|
echo(false);
|
|
linebuffered(false);
|
|
refresh();
|
|
|
|
cout << alt_screen << hide_cursor << mouse_on << flush;
|
|
Global::resized = false;
|
|
}
|
|
}
|
|
return initialized;
|
|
}
|
|
|
|
void restore() {
|
|
if (initialized) {
|
|
tcsetattr(STDIN_FILENO, TCSANOW, &initial_settings);
|
|
cout << mouse_off << clear << Fx::reset << normal_screen << show_cursor << flush;
|
|
initialized = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
//? --------------------------------------------------- FUNCTIONS -----------------------------------------------------
|
|
|
|
// ! Disabled due to issue when compiling with musl, reverted back to using regex
|
|
// namespace Fx {
|
|
// string uncolor(const string& s) {
|
|
// string out = s;
|
|
// for (size_t offset = 0, start_pos = 0, end_pos = 0;;) {
|
|
// start_pos = (offset == 0) ? out.find('\x1b') : offset;
|
|
// if (start_pos == string::npos)
|
|
// break;
|
|
// offset = start_pos + 1;
|
|
// end_pos = out.find('m', offset);
|
|
// if (end_pos == string::npos)
|
|
// break;
|
|
// else if (auto next_pos = out.find('\x1b', offset); not isdigit(out[end_pos - 1]) or end_pos > next_pos) {
|
|
// offset = next_pos;
|
|
// continue;
|
|
// }
|
|
|
|
// out.erase(start_pos, (end_pos - start_pos)+1);
|
|
// offset = 0;
|
|
// }
|
|
// out.shrink_to_fit();
|
|
// return out;
|
|
// }
|
|
// }
|
|
|
|
namespace Tools {
|
|
|
|
size_t wide_ulen(const string& str) {
|
|
unsigned int chars = 0;
|
|
try {
|
|
std::wstring_convert<std::codecvt_utf8<wchar_t>> conv;
|
|
auto w_str = conv.from_bytes((str.size() > 10000 ? str.substr(0, 10000).c_str() : str.c_str()));
|
|
|
|
for (auto c : w_str) {
|
|
chars += utf8::wcwidth(c);
|
|
}
|
|
}
|
|
catch (...) {
|
|
return ulen(str);
|
|
}
|
|
|
|
return chars;
|
|
}
|
|
|
|
size_t wide_ulen(const std::wstring& w_str) {
|
|
unsigned int chars = 0;
|
|
|
|
for (auto c : w_str) {
|
|
chars += utf8::wcwidth(c);
|
|
}
|
|
|
|
return chars;
|
|
}
|
|
|
|
string uresize(string str, const size_t len, bool wide) {
|
|
if (len < 1 or str.empty())
|
|
return "";
|
|
|
|
if (wide) {
|
|
try {
|
|
std::wstring_convert<std::codecvt_utf8<wchar_t>> conv;
|
|
auto w_str = conv.from_bytes((str.size() > 10000 ? str.substr(0, 10000).c_str() : str.c_str()));
|
|
while (wide_ulen(w_str) > len)
|
|
w_str.pop_back();
|
|
string n_str = conv.to_bytes(w_str);
|
|
return n_str;
|
|
}
|
|
catch (...) {
|
|
return uresize(str, len, false);
|
|
}
|
|
}
|
|
else {
|
|
for (size_t x = 0, i = 0; i < str.size(); i++) {
|
|
if ((static_cast<unsigned char>(str.at(i)) & 0xC0) != 0x80) x++;
|
|
if (x >= len + 1) {
|
|
str.resize(i);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
str.shrink_to_fit();
|
|
return str;
|
|
}
|
|
|
|
string luresize(string str, const size_t len, bool wide) {
|
|
if (len < 1 or str.empty())
|
|
return "";
|
|
|
|
for (size_t x = 0, last_pos = 0, i = str.size() - 1; i > 0 ; i--) {
|
|
if (wide and static_cast<unsigned char>(str.at(i)) > 0xef) {
|
|
x += 2;
|
|
last_pos = max((size_t)0, i - 1);
|
|
}
|
|
else if ((static_cast<unsigned char>(str.at(i)) & 0xC0) != 0x80) {
|
|
x++;
|
|
last_pos = i;
|
|
}
|
|
if (x >= len) {
|
|
str = str.substr(last_pos);
|
|
str.shrink_to_fit();
|
|
break;
|
|
}
|
|
}
|
|
return str;
|
|
}
|
|
|
|
string s_replace(const string& str, const string& from, const string& to) {
|
|
string out = str;
|
|
for (size_t start_pos = out.find(from); start_pos != std::string::npos; start_pos = out.find(from)) {
|
|
out.replace(start_pos, from.length(), to);
|
|
}
|
|
return out;
|
|
}
|
|
|
|
string ltrim(const string& str, const string& t_str) {
|
|
std::string_view str_v{str};
|
|
while (str_v.starts_with(t_str))
|
|
str_v.remove_prefix(t_str.size());
|
|
|
|
return string{str_v};
|
|
}
|
|
|
|
string rtrim(const string& str, const string& t_str) {
|
|
std::string_view str_v{str};
|
|
while (str_v.ends_with(t_str))
|
|
str_v.remove_suffix(t_str.size());
|
|
|
|
return string{str_v};
|
|
}
|
|
|
|
auto ssplit(const string& str, const char& delim) -> vector<string> {
|
|
vector<string> out;
|
|
for (const auto& s : str | rng::views::split(delim)
|
|
| rng::views::transform([](auto &&rng) {
|
|
return std::string_view(&*rng.begin(), rng::distance(rng));
|
|
})) {
|
|
if (not s.empty()) out.emplace_back(s);
|
|
}
|
|
return out;
|
|
}
|
|
|
|
string ljust(string str, const size_t x, bool utf, bool wide, bool limit) {
|
|
if (utf) {
|
|
if (limit and ulen(str, wide) > x)
|
|
return uresize(str, x, wide);
|
|
|
|
return str + string(max((int)(x - ulen(str)), 0), ' ');
|
|
}
|
|
else {
|
|
if (limit and str.size() > x) {
|
|
str.resize(x);
|
|
return str;
|
|
}
|
|
return str + string(max((int)(x - str.size()), 0), ' ');
|
|
}
|
|
}
|
|
|
|
string rjust(string str, const size_t x, bool utf, bool wide, bool limit) {
|
|
if (utf) {
|
|
if (limit and ulen(str, wide) > x)
|
|
return uresize(str, x, wide);
|
|
|
|
return string(max((int)(x - ulen(str)), 0), ' ') + str;
|
|
}
|
|
else {
|
|
if (limit and str.size() > x) {
|
|
str.resize(x);
|
|
return str;
|
|
};
|
|
return string(max((int)(x - str.size()), 0), ' ') + str;
|
|
}
|
|
}
|
|
|
|
string cjust(string str, const size_t x, bool utf, bool wide, bool limit) {
|
|
if (utf) {
|
|
if (limit and ulen(str, wide) > x)
|
|
return uresize(str, x, wide);
|
|
|
|
return string(max((int)ceil((double)(x - ulen(str)) / 2), 0), ' ') + str + string(max((int)floor((double)(x - ulen(str)) / 2), 0), ' ');
|
|
}
|
|
else {
|
|
if (limit and str.size() > x) {
|
|
str.resize(x);
|
|
return str;
|
|
}
|
|
return string(max((int)ceil((double)(x - str.size()) / 2), 0), ' ') + str + string(max((int)floor((double)(x - str.size()) / 2), 0), ' ');
|
|
}
|
|
}
|
|
|
|
string trans(const string& str) {
|
|
std::string_view oldstr{str};
|
|
string newstr;
|
|
newstr.reserve(str.size());
|
|
for (size_t pos; (pos = oldstr.find(' ')) != string::npos;) {
|
|
newstr.append(oldstr.substr(0, pos));
|
|
size_t x = 0;
|
|
while (pos + x < oldstr.size() and oldstr.at(pos + x) == ' ') x++;
|
|
newstr.append(Mv::r(x));
|
|
oldstr.remove_prefix(pos + x);
|
|
}
|
|
return (newstr.empty()) ? str : newstr + string{oldstr};
|
|
}
|
|
|
|
string sec_to_dhms(size_t seconds, bool no_days, bool no_seconds) {
|
|
size_t days = seconds / 86400; seconds %= 86400;
|
|
size_t hours = seconds / 3600; seconds %= 3600;
|
|
size_t minutes = seconds / 60; seconds %= 60;
|
|
string out = (not no_days and days > 0 ? to_string(days) + "d " : "")
|
|
+ (hours < 10 ? "0" : "") + to_string(hours) + ':'
|
|
+ (minutes < 10 ? "0" : "") + to_string(minutes)
|
|
+ (not no_seconds ? ":" + string(std::cmp_less(seconds, 10) ? "0" : "") + to_string(seconds) : "");
|
|
return out;
|
|
}
|
|
|
|
string floating_humanizer(uint64_t value, bool shorten, size_t start, bool bit, bool per_second) {
|
|
string out;
|
|
const size_t mult = (bit) ? 8 : 1;
|
|
bool mega = Config::getB("base_10_sizes");
|
|
|
|
// taking advantage of type deduction for array creation (since C++17)
|
|
// combined with string literals (operator""s)
|
|
static const array mebiUnits_bit {
|
|
"bit"s, "Kib"s, "Mib"s,
|
|
"Gib"s, "Tib"s, "Pib"s,
|
|
"Eib"s, "Zib"s, "Yib"s,
|
|
"Bib"s, "GEb"s
|
|
};
|
|
static const array mebiUnits_byte {
|
|
"Byte"s, "KiB"s, "MiB"s,
|
|
"GiB"s, "TiB"s, "PiB"s,
|
|
"EiB"s, "ZiB"s, "YiB"s,
|
|
"BiB"s, "GEB"s
|
|
};
|
|
static const array megaUnits_bit {
|
|
"bit"s, "Kb"s, "Mb"s,
|
|
"Gb"s, "Tb"s, "Pb"s,
|
|
"Eb"s, "Zb"s, "Yb"s,
|
|
"Bb"s, "Gb"s
|
|
};
|
|
static const array megaUnits_byte {
|
|
"Byte"s, "KB"s, "MB"s,
|
|
"GB"s, "TB"s, "PB"s,
|
|
"EB"s, "ZB"s, "YB"s,
|
|
"BB"s, "GB"s
|
|
};
|
|
const auto& units = (bit) ? ( mega ? megaUnits_bit : mebiUnits_bit) : ( mega ? megaUnits_byte : mebiUnits_byte);
|
|
|
|
value *= 100 * mult;
|
|
|
|
if (mega) {
|
|
while (value >= 100000) {
|
|
value /= 1000;
|
|
if (value < 100) {
|
|
out = to_string(value);
|
|
break;
|
|
}
|
|
start++;
|
|
}
|
|
}
|
|
else {
|
|
while (value >= 102400) {
|
|
value >>= 10;
|
|
if (value < 100) {
|
|
out = to_string(value);
|
|
break;
|
|
}
|
|
start++;
|
|
}
|
|
}
|
|
if (out.empty()) {
|
|
out = to_string(value);
|
|
if (not mega and out.size() == 4 and start > 0) {
|
|
out.pop_back();
|
|
out.insert(2, ".");
|
|
}
|
|
else if (out.size() == 3 and start > 0) {
|
|
out.insert(1, ".");
|
|
}
|
|
else if (out.size() >= 2) {
|
|
out.resize(out.size() - 2);
|
|
}
|
|
}
|
|
if (shorten) {
|
|
auto f_pos = out.find('.');
|
|
if (f_pos == 1 and out.size() > 3) {
|
|
out = to_string(round(stod(out) * 10) / 10).substr(0,3);
|
|
}
|
|
else if (f_pos != string::npos) {
|
|
out = to_string((int)round(stod(out)));
|
|
}
|
|
if (out.size() > 3) {
|
|
out = to_string((int)(out[0] - '0')) + ".0";
|
|
start++;
|
|
}
|
|
out.push_back(units[start][0]);
|
|
}
|
|
else out += " " + units[start];
|
|
|
|
if (per_second) out += (bit) ? "ps" : "/s";
|
|
return out;
|
|
}
|
|
|
|
std::string operator*(const string& str, int64_t n) {
|
|
if (n < 1 or str.empty()) {
|
|
return "";
|
|
}
|
|
else if (n == 1) {
|
|
return str;
|
|
}
|
|
|
|
string new_str;
|
|
new_str.reserve(str.size() * n);
|
|
|
|
for (; n > 0; n--)
|
|
new_str.append(str);
|
|
|
|
return new_str;
|
|
}
|
|
|
|
string strf_time(const string& strf) {
|
|
auto in_time_t = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
|
|
std::tm bt {};
|
|
std::stringstream ss;
|
|
ss << std::put_time(localtime_r(&in_time_t, &bt), strf.c_str());
|
|
return ss.str();
|
|
}
|
|
|
|
void atomic_wait(const atomic<bool>& atom, bool old) noexcept {
|
|
while (atom.load(std::memory_order_relaxed) == old ) busy_wait();
|
|
}
|
|
|
|
void atomic_wait_for(const atomic<bool>& atom, bool old, const uint64_t wait_ms) noexcept {
|
|
const uint64_t start_time = time_ms();
|
|
while (atom.load(std::memory_order_relaxed) == old and (time_ms() - start_time < wait_ms)) sleep_ms(1);
|
|
}
|
|
|
|
atomic_lock::atomic_lock(atomic<bool>& atom, bool wait) : atom(atom) {
|
|
if (wait) while (not this->atom.compare_exchange_strong(this->not_true, true));
|
|
else this->atom.store(true);
|
|
}
|
|
|
|
atomic_lock::~atomic_lock() {
|
|
this->atom.store(false);
|
|
}
|
|
|
|
string readfile(const std::filesystem::path& path, const string& fallback) {
|
|
if (not fs::exists(path)) return fallback;
|
|
string out;
|
|
try {
|
|
std::ifstream file(path);
|
|
for (string readstr; getline(file, readstr); out += readstr);
|
|
}
|
|
catch (const std::exception& e) {
|
|
Logger::error("readfile() : Exception when reading " + string{path} + " : " + e.what());
|
|
return fallback;
|
|
}
|
|
return (out.empty() ? fallback : out);
|
|
}
|
|
|
|
auto celsius_to(const long long& celsius, const string& scale) -> tuple<long long, string> {
|
|
if (scale == "celsius")
|
|
return {celsius, "°C"};
|
|
else if (scale == "fahrenheit")
|
|
return {(long long)round((double)celsius * 1.8 + 32), "°F"};
|
|
else if (scale == "kelvin")
|
|
return {(long long)round((double)celsius + 273.15), "K "};
|
|
else if (scale == "rankine")
|
|
return {(long long)round((double)celsius * 1.8 + 491.67), "°R"};
|
|
return {0, ""};
|
|
}
|
|
|
|
string hostname() {
|
|
char host[HOST_NAME_MAX];
|
|
gethostname(host, HOST_NAME_MAX);
|
|
return string{host};
|
|
}
|
|
|
|
string username() {
|
|
auto user = getenv("LOGNAME");
|
|
if (user == nullptr or strlen(user) == 0) user = getenv("USER");
|
|
return (user != nullptr ? user : "");
|
|
}
|
|
|
|
DebugTimer::DebugTimer(const string name, bool start, bool delayed_report) : name(name), delayed_report(delayed_report) {
|
|
if (start)
|
|
this->start();
|
|
}
|
|
|
|
DebugTimer::~DebugTimer() {
|
|
if (running)
|
|
this->stop(true);
|
|
this->force_report();
|
|
}
|
|
|
|
void DebugTimer::start() {
|
|
if (running) return;
|
|
running = true;
|
|
start_time = time_micros();
|
|
}
|
|
|
|
void DebugTimer::stop(bool report) {
|
|
if (not running) return;
|
|
running = false;
|
|
elapsed_time = time_micros() - start_time;
|
|
if (report) this->report();
|
|
}
|
|
|
|
void DebugTimer::reset(bool restart) {
|
|
running = false;
|
|
start_time = 0;
|
|
elapsed_time = 0;
|
|
if (restart) this->start();
|
|
}
|
|
|
|
void DebugTimer::stop_rename_reset(const string &new_name, bool report, bool restart) {
|
|
this->stop(report);
|
|
name = new_name;
|
|
this->reset(restart);
|
|
}
|
|
|
|
void DebugTimer::report() {
|
|
string report_line;
|
|
if (start_time == 0 and elapsed_time == 0)
|
|
report_line = fmt::format("DebugTimer::report() warning -> Timer [{}] has not been started!", name);
|
|
else if (running)
|
|
report_line = fmt::format(custom_locale, "Timer [{}] (running) currently at {:L} μs", name, time_micros() - start_time);
|
|
else
|
|
report_line = fmt::format(custom_locale, "Timer [{}] took {:L} μs", name, elapsed_time);
|
|
|
|
if (delayed_report)
|
|
report_buffer.emplace_back(report_line);
|
|
else
|
|
Logger::log_write(log_level, report_line);
|
|
}
|
|
|
|
void DebugTimer::force_report() {
|
|
if (report_buffer.empty()) return;
|
|
for (const auto& line : report_buffer)
|
|
Logger::log_write(log_level, line);
|
|
report_buffer.clear();
|
|
}
|
|
|
|
uint64_t DebugTimer::elapsed() {
|
|
if (running)
|
|
return time_micros() - start_time;
|
|
return elapsed_time;
|
|
}
|
|
|
|
bool DebugTimer::is_running() {
|
|
return running;
|
|
}
|
|
}
|
|
|
|
namespace Logger {
|
|
using namespace Tools;
|
|
std::atomic<bool> busy (false);
|
|
bool first = true;
|
|
const string tdf = "%Y/%m/%d (%T) | ";
|
|
|
|
size_t loglevel;
|
|
fs::path logfile;
|
|
|
|
//* Wrapper for lowering priviliges if using SUID bit and currently isn't using real userid
|
|
class lose_priv {
|
|
int status = -1;
|
|
public:
|
|
lose_priv() {
|
|
if (geteuid() != Global::real_uid) {
|
|
this->status = seteuid(Global::real_uid);
|
|
}
|
|
}
|
|
~lose_priv() {
|
|
if (status == 0) {
|
|
status = seteuid(Global::set_uid);
|
|
}
|
|
}
|
|
};
|
|
|
|
void set(const string& level) {
|
|
loglevel = v_index(log_levels, level);
|
|
}
|
|
|
|
void log_write(const Level level, const string& msg) {
|
|
if (loglevel < level or logfile.empty()) return;
|
|
atomic_lock lck(busy, true);
|
|
lose_priv neutered{};
|
|
std::error_code ec;
|
|
try {
|
|
if (fs::exists(logfile) and fs::file_size(logfile, ec) > 1024 << 10 and not ec) {
|
|
auto old_log = logfile;
|
|
old_log += ".1";
|
|
|
|
if (fs::exists(old_log))
|
|
fs::remove(old_log, ec);
|
|
|
|
if (not ec)
|
|
fs::rename(logfile, old_log, ec);
|
|
}
|
|
if (not ec) {
|
|
std::ofstream lwrite(logfile, std::ios::app);
|
|
if (first) {
|
|
first = false;
|
|
lwrite << "\n" << strf_time(tdf) << "===> btop++ v." << Global::Version << "\n";
|
|
}
|
|
lwrite << strf_time(tdf) << log_levels.at(level) << ": " << msg << "\n";
|
|
}
|
|
else logfile.clear();
|
|
}
|
|
catch (const std::exception& e) {
|
|
logfile.clear();
|
|
throw std::runtime_error("Exception in Logger::log_write() : " + string{e.what()});
|
|
}
|
|
}
|
|
}
|