mirror of
https://github.com/aristocratos/btop.git
synced 2024-06-14 16:34:39 +12:00
commitc2c4fe47db
Author: aristocratos <admin@qvantnet.com> Date: Sat Nov 13 23:15:53 2021 +0100 Changes from main + fixes commitbd5d867089
Author: aristocratos <admin@qvantnet.com> Date: Sat Nov 13 21:24:01 2021 +0100 Fixes commitdc5f0606cb
Author: aristocratos <admin@qvantnet.com> Date: Sat Nov 13 20:51:06 2021 +0100 Fixed leak in Proc::collect() commit8b59ab6e11
Author: aristocratos <admin@qvantnet.com> Date: Sat Nov 13 19:59:56 2021 +0100 Fixed process cpu usage calculation commit53c8a0325b
Author: aristocratos <admin@qvantnet.com> Date: Mon Oct 25 13:01:53 2021 +0200 Cpu temp set to average of pACC and eACC for mac m1 commit940cd0a513
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 24 21:12:16 2021 +0200 limit cpu temp to 20 commit254ceb9c2d
Author: aristocratos <admin@qvantnet.com> Date: Sun Oct 24 11:24:04 2021 +0200 Fixed up Makefile commit6fa3bf41d7
Author: aristocratos <admin@qvantnet.com> Date: Thu Oct 21 13:12:45 2021 +0200 Makefile fixed WARNFLAGS commit2c98e2ca29
Author: aristocratos <admin@qvantnet.com> Date: Thu Oct 21 13:08:12 2021 +0200 Updated Makefile commite69780e9bc
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 20 23:26:09 2021 +0200 fix build commitde62167921
Merge:a590dd3
a0ee404
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 20 23:10:36 2021 +0200 Merge branch 'main' into OSX commita590dd3f67
Author: aristocratos <admin@qvantnet.com> Date: Mon Oct 18 11:20:12 2021 +0200 Ignore format-truncation commit4c30742d41
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 18 10:08:01 2021 +0200 comments about temp sensors commit46030de77c
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 18 08:10:37 2021 +0200 available = total - used commit4c228de0ef
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 17 22:19:41 2021 +0200 use sysconf to get arg_max - seems simpler commitc60fc29f0f
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 17 22:10:50 2021 +0200 arg_max should be int on macos commit0b5a931a6d
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 17 22:01:42 2021 +0200 only fetch max_args once commit71d5cd5fd9
Author: aristocratos <admin@qvantnet.com> Date: Sat Oct 16 23:24:07 2021 +0200 Reverted mutexes back to custom atomic bool based locks commit3f34a67df6
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 16 21:47:55 2021 +0200 these helpers can be static commitfc19c46c8a
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 16 21:44:49 2021 +0200 code cleanup: put the code in .cpp to enable incremental build commitc252c618c0
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 16 21:09:21 2021 +0200 don't crash on intel commit9f88187c29
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 16 21:06:18 2021 +0200 small improvement commit808f09c974
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 16 20:59:48 2021 +0200 don't iterate 3 times commitd8408336e3
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 16 20:59:27 2021 +0200 remove debug commit4f078c3beb
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 13 23:38:27 2021 +0200 more temperature (M1 + intel) commit289880aaa6
Merge:88a2528
3ffb212
Author: aristocratos <admin@qvantnet.com> Date: Sat Oct 16 19:37:09 2021 +0200 Merge branch 'OSX' of github.com:aristocratos/btop into OSX commit88a2528ca3
Author: aristocratos <admin@qvantnet.com> Date: Sat Oct 16 19:34:10 2021 +0200 Merge changes from main commit3ffb21203a
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 16 19:20:45 2021 +0200 release a bit more - still has negative temps for 2 cores on my system commit70b4871062
Author: aristocratos <admin@qvantnet.com> Date: Sat Oct 16 01:59:44 2021 +0200 Fixed leaks in Mem and attempt at fixing leaks in sensors.cpp commitfbae907720
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Fri Oct 15 23:41:37 2021 +0200 temperature sensors via IOKit commitcef0f0a68d
Author: aristocratos <admin@qvantnet.com> Date: Fri Oct 15 18:39:17 2021 +0200 Process command line arguments commit921cfa01ff
Author: aristocratos <admin@qvantnet.com> Date: Wed Oct 13 23:20:15 2021 +0200 Re-enable setuid and set default SU_GROUP to wheel for OSX commita416c888c7
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 13 21:16:41 2021 +0200 temperature commite7afe00ce7
Author: aristocratos <admin@qvantnet.com> Date: Wed Oct 13 12:54:43 2021 +0200 Cpu usage working again commit4193ef8921
Author: aristocratos <admin@qvantnet.com> Date: Wed Oct 13 10:36:51 2021 +0200 Fixed cpu lazy sorting commit93fcb6ff04
Author: aristocratos <admin@qvantnet.com> Date: Tue Oct 12 22:22:45 2021 +0200 Update README.md commit683354cd2e
Merge:8a399c4
6d724d6
Author: aristocratos <admin@qvantnet.com> Date: Tue Oct 12 22:19:30 2021 +0200 Merge pull request #80 from ShrirajHegde/OSX Add github workflow for MacOS commit8a399c499a
Author: aristocratos <admin@qvantnet.com> Date: Tue Oct 12 21:50:46 2021 +0200 pointer to smart pointer, first pass commit772605003a
Author: aristocratos <admin@qvantnet.com> Date: Tue Oct 12 18:54:38 2021 +0200 Fixed detailed memory not updating commit28cb677533
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 11 22:19:25 2021 +0200 more memory free-up - still leaks like crazy commit304457863f
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 11 21:48:07 2021 +0200 more RAII cleanup commit82e2e3c55c
Author: aristocratos <admin@qvantnet.com> Date: Mon Oct 11 12:40:25 2021 +0200 Removed non present cpu fields and fixed calculation for selectable cpu field graphs commit68603f2b37
Author: aristocratos <admin@qvantnet.com> Date: Mon Oct 11 10:57:04 2021 +0200 RAII Wrappers for Cpu::get_battery() commitd5cb24fbeb
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 10 20:23:11 2021 +0200 RAII commit8fad5a61be
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 9 21:44:16 2021 +0200 get more disk IO stats commit7fa903cf16
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 9 21:43:48 2021 +0200 fix build commit98036db660
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 9 21:18:25 2021 +0200 remove unnecessary uptime param commitaae7ae35ca
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 9 21:07:23 2021 +0200 remove debug logging commit5187420b04
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 9 21:06:43 2021 +0200 fix process elapsed time commit89582c0ea6
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 9 21:06:29 2021 +0200 don't double free commit6d724d6155
Author: Shriraj Hegde <shriraj.hegde@gmail.com> Date: Sat Oct 9 21:46:33 2021 +0530 Change Upload filename commit4f94ecc8ad
Author: Shriraj Hegde <shriraj.hegde@gmail.com> Date: Sat Oct 9 21:40:11 2021 +0530 Fix upload path commite1d6d0a1f2
Author: Shriraj Hegde <shriraj.hegde@gmail.com> Date: Sat Oct 9 21:36:13 2021 +0530 Skip installing gcc via Homebrew Change job name commit02cdd9d759
Author: Shriraj Hegde <shriraj.hegde@gmail.com> Date: Sat Oct 9 21:30:40 2021 +0530 Fix uploading Remove distclean commit39eb6c396f
Author: Shriraj Hegde <shriraj.hegde@gmail.com> Date: Sat Oct 9 21:26:57 2021 +0530 Disable static compilation commit099592bccd
Author: aristocratos <admin@qvantnet.com> Date: Sat Oct 9 17:52:10 2021 +0200 Ignore empty pid 0 to fix tree mode commita28e17556e
Author: Shriraj Hegde <shriraj.hegde@gmail.com> Date: Sat Oct 9 21:17:11 2021 +0530 Add workflow for MacOS commitaee9179c0a
Author: aristocratos <admin@qvantnet.com> Date: Sat Oct 9 17:36:46 2021 +0200 Disable failed tty mode detection for OSX commit4b7b98058d
Author: aristocratos <admin@qvantnet.com> Date: Sat Oct 9 11:28:32 2021 +0200 Fixed disk io and added io activity based on read/write commitbfa0629e7d
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Fri Oct 8 22:28:10 2021 +0200 fill in 0 for ioticks commita016ff8a03
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Fri Oct 8 22:16:01 2021 +0200 disk io from IOreg. Does not show any io though commitf98606c6db
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Fri Oct 8 09:32:06 2021 +0200 per process IO stats commitc8b50ed488
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Fri Oct 8 00:11:08 2021 +0200 don't show autofs, it's useless commitc4df64d440
Author: aristocratos <admin@qvantnet.com> Date: Thu Oct 7 18:41:49 2021 +0200 Fixed compile time display for gmake and command timings commitb3e6f495f7
Author: aristocratos <admin@qvantnet.com> Date: Thu Oct 7 18:26:15 2021 +0200 Fixed clk_tck -> clkTck commite53799188f
Author: aristocratos <admin@qvantnet.com> Date: Thu Oct 7 18:25:14 2021 +0200 Fixed better detection for OSX commitb864edf984
Author: aristocratos <admin@qvantnet.com> Date: Thu Oct 7 18:24:37 2021 +0200 Fixed cumulative cpu usage commit6a3c5d9b97
Author: aristocratos <admin@qvantnet.com> Date: Thu Oct 7 13:20:30 2021 +0200 Proc::collect() better cpu percent accurazy commit84d0596294
Merge:3564f8e
98e1e87
Author: aristocratos <admin@qvantnet.com> Date: Thu Oct 7 12:56:55 2021 +0200 Merge branch 'OSX' of github.com:aristocratos/btop into OSX commit3564f8e4c2
Author: aristocratos <admin@qvantnet.com> Date: Thu Oct 7 12:56:27 2021 +0200 Proc::collect() fixed cputimes and cpu percentage calc commit98e1e87405
Merge:60c5636
d96fdd7
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Thu Oct 7 11:32:41 2021 +0200 Merge branch 'main' into OSX commit60c5636cd7
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 22:45:54 2021 +0200 fix warning commit489e446152
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 22:38:40 2021 +0200 details + process states commit7e5a808c73
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 22:38:19 2021 +0200 avoid details crash commit9c9da4606b
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 21:03:21 2021 +0200 fix quit on macos commitec7415384d
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 00:41:37 2021 +0200 fix mistake in makefile commit5ac8fa4c8a
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 18:56:13 2021 +0200 don't show /dev commitd901bbebd9
Author: aristocratos <gnmjpl@gmail.com> Date: Wed Oct 6 17:27:51 2021 +0200 Ignore tags and other branches commitc7f1e71e29
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 16:00:41 2021 +0200 comment commitb9d58e3faf
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 15:55:58 2021 +0200 impossible to get CPU freq on M1 apparently commit66072711c2
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 15:33:43 2021 +0200 detect full commit6bb0e930a2
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 00:38:46 2021 +0200 CPU freq in GHz commita5f10f1a0f
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 15:13:18 2021 +0200 check array length commit155c848b97
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 15:05:20 2021 +0200 switch to other way to get CPU freq (still does not work) commitcf51ba2ebe
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 14:45:44 2021 +0200 remove some warnings commit775dff5f72
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 14:16:45 2021 +0200 fix link commit8c67967775
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 14:16:38 2021 +0200 reduce diff more commit70b47d2ca8
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 14:10:23 2021 +0200 reduce diff with main branch commitca9cb48054
Merge:d0c6c0a
c66b46f
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 13:49:20 2021 +0200 Merge remote-tracking branch 'origin/main' into OSX commitc66b46f850
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 13:41:57 2021 +0200 battery state via CoreFoundation commitd0c6c0a362
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 10:51:36 2021 +0200 all disks + load averages commitca67526dc1
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 10:33:55 2021 +0200 show all disks commit56119f99a9
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 00:17:41 2021 +0200 procs sorting/filtering commit8d86011d72
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 23:42:17 2021 +0200 battery states commita9b64d62e4
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 23:24:59 2021 +0200 battery hack works on M1 commitce51031142
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 23:18:22 2021 +0200 ugly hack to get battery commitd5e6725c6c
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 22:42:42 2021 +0200 CPU stuff commit5c02bd8c83
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 21:25:42 2021 +0200 network commitd5da9d4983
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 15:43:05 2021 +0200 correct cached size commit5f11aba504
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 12:03:48 2021 +0200 vm stats from syscall + swap commit776fc96852
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 10:48:07 2021 +0200 seems to work indeed commit7b40e2835a
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 10:46:14 2021 +0200 allow override optimization flag commit005ea24e4c
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 10:09:24 2021 +0200 update Makefile commitaf8cec9deb
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 4 15:32:55 2021 +0200 some more params commit7ebe4f7594
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 4 15:15:55 2021 +0200 show more disks commite50a56394a
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 4 14:52:56 2021 +0200 disks show something commit6497a8c202
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 4 09:15:35 2021 +0200 reformat commit28e152b80c
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 23:21:13 2021 +0200 decrease diff with upstream commit40da88e9ca
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 22:56:14 2021 +0200 try to get disks to show commiteaf2bb56a5
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 22:42:01 2021 +0200 don't crash on deque::back() commitf66b6f712c
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 22:08:21 2021 +0200 cpu freq, name & process uid/name commit34a8a61f4d
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 21:46:11 2021 +0200 basic process info commit29bb2dcc5f
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 21:45:39 2021 +0200 initialize mutex (needed on macos apparently and not on linux) commitfb5970b000
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 2 23:53:41 2021 +0200 comment commit49d16cdddd
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 2 23:51:29 2021 +0200 extract delimiters commit3db9d66476
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 2 23:48:28 2021 +0200 first infos on macos: memory used & free commitf8acb2f854
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Sep 28 23:37:03 2021 +0200 make it compile on macos (M1 - arm64). Does not run though commitbbba17cd35
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 10:51:36 2021 +0200 all disks + load averages commit548203e93d
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 10:33:55 2021 +0200 show all disks commit0ab2be3985
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Oct 6 00:17:41 2021 +0200 procs sorting/filtering commit096104c90b
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 23:42:17 2021 +0200 battery states commit0ad93684c2
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 23:24:59 2021 +0200 battery hack works on M1 commitc75b0f1cea
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 23:18:22 2021 +0200 ugly hack to get battery commit600b4f72b3
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 22:42:42 2021 +0200 CPU stuff commit4eb812d52c
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 21:25:42 2021 +0200 network commit899be68a78
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 15:43:05 2021 +0200 correct cached size commita1c7f935e3
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 12:03:48 2021 +0200 vm stats from syscall + swap commitbd1050a740
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 10:48:07 2021 +0200 seems to work indeed commit5094b73758
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 10:46:14 2021 +0200 allow override optimization flag commit8811270332
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Oct 5 10:09:24 2021 +0200 update Makefile commit42f966f448
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 4 15:32:55 2021 +0200 some more params commitc1e6d6a62e
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 4 15:15:55 2021 +0200 show more disks commit50fcdaa854
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 4 14:52:56 2021 +0200 disks show something commit264bf2d7da
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Mon Oct 4 09:15:35 2021 +0200 reformat commit1fd625086b
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 23:21:13 2021 +0200 decrease diff with upstream commit17f9f3703c
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 22:56:14 2021 +0200 try to get disks to show commit8462ae6431
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 22:42:01 2021 +0200 don't crash on deque::back() commit78bce5b5a6
Merge:53e379d
f9505a4
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 22:08:34 2021 +0200 Merge branch 'aristocratos:main' into main commit53e379d74d
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 22:08:21 2021 +0200 cpu freq, name & process uid/name commit2a44b307ef
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 21:46:11 2021 +0200 basic process info commit66534eb5b5
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sun Oct 3 21:45:39 2021 +0200 initialize mutex (needed on macos apparently and not on linux) commit0983917f26
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 2 23:53:41 2021 +0200 comment commit9732507248
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 2 23:51:29 2021 +0200 extract delimiters commit6e704ce838
Merge:fe4db7c
7bfbd83
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 2 23:48:43 2021 +0200 Merge branch 'main' of github.com:joske/btop commitfe4db7c16c
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Sat Oct 2 23:48:28 2021 +0200 first infos on macos: memory used & free commit7bfbd83a47
Merge:8c8139b
a15f961
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Fri Oct 1 17:05:26 2021 +0200 Merge branch 'aristocratos:main' into main commit8c8139bd1d
Merge:679d21c
a246c09
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Sep 29 21:50:00 2021 +0200 Merge branch 'aristocratos:main' into main commit679d21cd22
Merge:4c70c5b
a49b8f9
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Sep 29 20:23:34 2021 +0200 Merge branch 'aristocratos:main' into main commit4c70c5bdd9
Merge:84a9746
c70667e
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Wed Sep 29 08:30:05 2021 +0200 Merge branch 'aristocratos:main' into main commit84a974695a
Author: Jos Dehaes <jos.dehaes@gmail.com> Date: Tue Sep 28 23:37:03 2021 +0200 make it compile on macos (M1 - arm64). Does not run though Co-authored-by: Jos Dehaes <jos.dehaes@gmail.com>
606 lines
21 KiB
C++
606 lines
21 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 <array>
|
|
#include <ranges>
|
|
#include <atomic>
|
|
#include <fstream>
|
|
#include <string_view>
|
|
|
|
#include <btop_config.hpp>
|
|
#include <btop_shared.hpp>
|
|
#include <btop_tools.hpp>
|
|
|
|
using std::array, std::atomic, std::string_view, std::string_literals::operator""s;
|
|
namespace fs = std::filesystem;
|
|
namespace rng = std::ranges;
|
|
using namespace Tools;
|
|
|
|
//* Functions and variables for reading and writing the btop config file
|
|
namespace Config {
|
|
|
|
atomic<bool> locked (false);
|
|
atomic<bool> writelock (false);
|
|
bool write_new;
|
|
|
|
const vector<array<string, 2>> descriptions = {
|
|
{"color_theme", "#* Name of a btop++/bpytop/bashtop formatted \".theme\" file, \"Default\" and \"TTY\" for builtin themes.\n"
|
|
"#* Themes should be placed in \"../share/btop/themes\" relative to binary or \"$HOME/.config/btop/themes\""},
|
|
|
|
{"theme_background", "#* If the theme set background should be shown, set to False if you want terminal background transparency."},
|
|
|
|
{"truecolor", "#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false."},
|
|
|
|
{"force_tty", "#* Set to true to force tty mode regardless if a real tty has been detected or not.\n"
|
|
"#* Will force 16-color mode and TTY theme, set all graph symbols to \"tty\" and swap out other non tty friendly symbols."},
|
|
|
|
{"presets", "#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.\n"
|
|
"#* Format: \"box_name:P:G,box_name:P:G\" P=(0 or 1) for alternate positons, G=graph symbol to use for box.\n"
|
|
"#* Use withespace \" \" as seprator between different presets.\n"
|
|
"#* Example: \"cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty\""},
|
|
|
|
{"vim_keys", "#* Set to True to enable \"h,j,k,l\" keys for directional control in lists.\n"
|
|
"#* Conflicting keys for h:\"help\" and k:\"kill\" is accessible while holding shift."},
|
|
|
|
{"rounded_corners", "#* Rounded corners on boxes, is ignored if TTY mode is ON."},
|
|
|
|
{"graph_symbol", "#* Default symbols to use for graph creation, \"braille\", \"block\" or \"tty\".\n"
|
|
"#* \"braille\" offers the highest resolution but might not be included in all fonts.\n"
|
|
"#* \"block\" has half the resolution of braille but uses more common characters.\n"
|
|
"#* \"tty\" uses only 3 different symbols but will work with most fonts and should work in a real TTY.\n"
|
|
"#* Note that \"tty\" only has half the horizontal resolution of the other two, so will show a shorter historical view."},
|
|
|
|
{"graph_symbol_cpu", "# Graph symbol to use for graphs in cpu box, \"default\", \"braille\", \"block\" or \"tty\"."},
|
|
|
|
{"graph_symbol_mem", "# Graph symbol to use for graphs in cpu box, \"default\", \"braille\", \"block\" or \"tty\"."},
|
|
|
|
{"graph_symbol_net", "# Graph symbol to use for graphs in cpu box, \"default\", \"braille\", \"block\" or \"tty\"."},
|
|
|
|
{"graph_symbol_proc", "# Graph symbol to use for graphs in cpu box, \"default\", \"braille\", \"block\" or \"tty\"."},
|
|
|
|
{"shown_boxes", "#* Manually set which boxes to show. Available values are \"cpu mem net proc\", separate values with whitespace."},
|
|
|
|
{"update_ms", "#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs."},
|
|
|
|
{"proc_sorting", "#* Processes sorting, \"pid\" \"program\" \"arguments\" \"threads\" \"user\" \"memory\" \"cpu lazy\" \"cpu responsive\",\n"
|
|
"#* \"cpu lazy\" sorts top process over time (easier to follow), \"cpu responsive\" updates top process directly."},
|
|
|
|
{"proc_reversed", "#* Reverse sorting order, True or False."},
|
|
|
|
{"proc_tree", "#* Show processes as a tree."},
|
|
|
|
{"proc_colors", "#* Use the cpu graph colors in the process list."},
|
|
|
|
{"proc_gradient", "#* Use a darkening gradient in the process list."},
|
|
|
|
{"proc_per_core", "#* If process cpu usage should be of the core it's running on or usage of the total available cpu power."},
|
|
|
|
{"proc_mem_bytes", "#* Show process memory as bytes instead of percent."},
|
|
|
|
{"proc_info_smaps", "#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)"},
|
|
|
|
{"proc_left", "#* Show proc box on left side of screen instead of right."},
|
|
|
|
{"cpu_graph_upper", "#* Sets the CPU stat shown in upper half of the CPU graph, \"total\" is always available.\n"
|
|
"#* Select from a list of detected attributes from the options menu."},
|
|
|
|
{"cpu_graph_lower", "#* Sets the CPU stat shown in lower half of the CPU graph, \"total\" is always available.\n"
|
|
"#* Select from a list of detected attributes from the options menu."},
|
|
|
|
{"cpu_invert_lower", "#* Toggles if the lower CPU graph should be inverted."},
|
|
|
|
{"cpu_single_graph", "#* Set to True to completely disable the lower CPU graph."},
|
|
|
|
{"cpu_bottom", "#* Show cpu box at bottom of screen instead of top."},
|
|
|
|
{"show_uptime", "#* Shows the system uptime in the CPU box."},
|
|
|
|
{"check_temp", "#* Show cpu temperature."},
|
|
|
|
{"cpu_sensor", "#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors."},
|
|
|
|
{"show_coretemp", "#* Show temperatures for cpu cores also if check_temp is True and sensors has been found."},
|
|
|
|
{"cpu_core_map", "#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.\n"
|
|
"#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.\n"
|
|
"#* Format \"x:y\" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries.\n"
|
|
"#* Example: \"4:0 5:1 6:3\""},
|
|
|
|
{"temp_scale", "#* Which temperature scale to use, available values: \"celsius\", \"fahrenheit\", \"kelvin\" and \"rankine\"."},
|
|
|
|
{"show_cpu_freq", "#* Show CPU frequency."},
|
|
|
|
{"clock_format", "#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.\n"
|
|
"#* Special formatting: /host = hostname | /user = username | /uptime = system uptime"},
|
|
|
|
{"background_update", "#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort."},
|
|
|
|
{"custom_cpu_name", "#* Custom cpu model name, empty string to disable."},
|
|
|
|
{"disks_filter", "#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace \" \".\n"
|
|
"#* Begin line with \"exclude=\" to change to exclude filter, otherwise defaults to \"most include\" filter. Example: disks_filter=\"exclude=/boot /home/user\"."},
|
|
|
|
{"mem_graphs", "#* Show graphs instead of meters for memory values."},
|
|
|
|
{"mem_below_net", "#* Show mem box below net box instead of above."},
|
|
|
|
{"show_swap", "#* If swap memory should be shown in memory box."},
|
|
|
|
{"swap_disk", "#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk."},
|
|
|
|
{"show_disks", "#* If mem box should be split to also show disks info."},
|
|
|
|
{"only_physical", "#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar."},
|
|
|
|
{"use_fstab", "#* Read disks list from /etc/fstab. This also disables only_physical."},
|
|
|
|
{"show_io_stat", "#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view."},
|
|
|
|
{"io_mode", "#* Toggles io mode for disks, showing big graphs for disk read/write speeds."},
|
|
|
|
{"io_graph_combined", "#* Set to True to show combined read/write io graphs in io mode."},
|
|
|
|
{"io_graph_speeds", "#* Set the top speed for the io graphs in MiB/s (100 by default), use format \"mountpoint:speed\" separate disks with whitespace \" \".\n"
|
|
"#* Example: \"/mnt/media:100 /:20 /boot:1\"."},
|
|
|
|
{"net_download", "#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False."},
|
|
|
|
{"net_upload", ""},
|
|
|
|
{"net_auto", "#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest."},
|
|
|
|
{"net_sync", "#* Sync the auto scaling for download and upload to whichever currently has the highest scale."},
|
|
|
|
{"net_iface", "#* Starts with the Network Interface specified here."},
|
|
|
|
{"show_battery", "#* Show battery stats in top right if battery is present."},
|
|
|
|
{"selected_battery", "#* Which battery to use if multiple are present. \"Auto\" for auto detection."},
|
|
|
|
{"log_level", "#* Set loglevel for \"~/.config/btop/btop.log\" levels are: \"ERROR\" \"WARNING\" \"INFO\" \"DEBUG\".\n"
|
|
"#* The level set includes all lower levels, i.e. \"DEBUG\" will show all logging info."}
|
|
};
|
|
|
|
unordered_flat_map<string, string> strings = {
|
|
{"color_theme", "Default"},
|
|
{"shown_boxes", "cpu mem net proc"},
|
|
{"graph_symbol", "braille"},
|
|
{"presets", "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"},
|
|
{"graph_symbol_cpu", "default"},
|
|
{"graph_symbol_mem", "default"},
|
|
{"graph_symbol_net", "default"},
|
|
{"graph_symbol_proc", "default"},
|
|
{"proc_sorting", "cpu lazy"},
|
|
{"cpu_graph_upper", "total"},
|
|
{"cpu_graph_lower", "total"},
|
|
{"cpu_sensor", "Auto"},
|
|
{"selected_battery", "Auto"},
|
|
{"cpu_core_map", ""},
|
|
{"temp_scale", "celsius"},
|
|
{"clock_format", "%X"},
|
|
{"custom_cpu_name", ""},
|
|
{"disks_filter", ""},
|
|
{"io_graph_speeds", ""},
|
|
{"net_iface", ""},
|
|
{"log_level", "WARNING"},
|
|
{"proc_filter", ""},
|
|
{"proc_command", ""},
|
|
{"selected_name", ""},
|
|
};
|
|
unordered_flat_map<string, string> stringsTmp;
|
|
|
|
unordered_flat_map<string, bool> bools = {
|
|
{"theme_background", true},
|
|
{"truecolor", true},
|
|
{"rounded_corners", true},
|
|
{"proc_reversed", false},
|
|
{"proc_tree", false},
|
|
{"proc_colors", true},
|
|
{"proc_gradient", true},
|
|
{"proc_per_core", true},
|
|
{"proc_mem_bytes", true},
|
|
{"proc_info_smaps", false},
|
|
{"proc_left", false},
|
|
{"cpu_invert_lower", true},
|
|
{"cpu_single_graph", false},
|
|
{"cpu_bottom", false},
|
|
{"show_uptime", true},
|
|
{"check_temp", true},
|
|
{"show_coretemp", true},
|
|
{"show_cpu_freq", true},
|
|
{"background_update", true},
|
|
{"mem_graphs", true},
|
|
{"mem_below_net", false},
|
|
{"show_swap", true},
|
|
{"swap_disk", true},
|
|
{"show_disks", true},
|
|
{"only_physical", true},
|
|
{"use_fstab", true},
|
|
{"show_io_stat", true},
|
|
{"io_mode", false},
|
|
{"io_graph_combined", false},
|
|
{"net_auto", true},
|
|
{"net_sync", false},
|
|
{"show_battery", true},
|
|
{"vim_keys", false},
|
|
{"tty_mode", false},
|
|
{"force_tty", false},
|
|
{"lowcolor", false},
|
|
{"show_detailed", false},
|
|
{"proc_filtering", false},
|
|
};
|
|
unordered_flat_map<string, bool> boolsTmp;
|
|
|
|
unordered_flat_map<string, int> ints = {
|
|
{"update_ms", 2000},
|
|
{"net_download", 100},
|
|
{"net_upload", 100},
|
|
{"detailed_pid", 0},
|
|
{"selected_pid", 0},
|
|
{"proc_start", 0},
|
|
{"proc_selected", 0},
|
|
{"proc_last_selected", 0},
|
|
};
|
|
unordered_flat_map<string, int> intsTmp;
|
|
|
|
bool _locked(const string& name) {
|
|
atomic_wait(writelock, true);
|
|
if (not write_new and rng::find_if(descriptions, [&name](const auto& a) { return a.at(0) == name; }) != descriptions.end())
|
|
write_new = true;
|
|
return locked.load();
|
|
}
|
|
|
|
fs::path conf_dir;
|
|
fs::path conf_file;
|
|
|
|
vector<string> available_batteries = {"Auto"};
|
|
|
|
vector<string> current_boxes;
|
|
vector<string> preset_list = {"cpu:0:default,mem:0:default,net:0:default,proc:0:default"};
|
|
int current_preset = -1;
|
|
|
|
bool presetsValid(const string& presets) {
|
|
vector<string> new_presets = {preset_list.at(0)};
|
|
|
|
for (int x = 0; const auto& preset : ssplit(presets)) {
|
|
if (++x > 9) {
|
|
validError = "Too many presets entered!";
|
|
return false;
|
|
}
|
|
for (int y = 0; const auto& box : ssplit(preset, ',')) {
|
|
if (++y > 4) {
|
|
validError = "Too many boxes entered for preset!";
|
|
return false;
|
|
}
|
|
const auto& vals = ssplit(box, ':');
|
|
if (vals.size() != 3) {
|
|
validError = "Malformatted preset in config value presets!";
|
|
return false;
|
|
}
|
|
if (not is_in(vals.at(0), "cpu", "mem", "net", "proc")) {
|
|
validError = "Invalid box name in config value presets!";
|
|
return false;
|
|
}
|
|
if (not is_in(vals.at(1), "0", "1")) {
|
|
validError = "Invalid position value in config value presets!";
|
|
return false;
|
|
}
|
|
if (not v_contains(valid_graph_symbols_def, vals.at(2))) {
|
|
validError = "Invalid graph name in config value presets!";
|
|
return false;
|
|
}
|
|
}
|
|
new_presets.push_back(preset);
|
|
}
|
|
|
|
preset_list = move(new_presets);
|
|
return true;
|
|
}
|
|
|
|
//* Apply selected preset
|
|
void apply_preset(const string& preset) {
|
|
string boxes;
|
|
|
|
for (const auto& box : ssplit(preset, ',')) {
|
|
const auto& vals = ssplit(box, ':');
|
|
boxes += vals.at(0) + ' ';
|
|
}
|
|
if (not boxes.empty()) boxes.pop_back();
|
|
|
|
auto min_size = Term::get_min_size(boxes);
|
|
if (Term::width < min_size.at(0) or Term::height < min_size.at(1)) {
|
|
return;
|
|
}
|
|
|
|
for (const auto& box : ssplit(preset, ',')) {
|
|
const auto& vals = ssplit(box, ':');
|
|
if (vals.at(0) == "cpu") set("cpu_bottom", (vals.at(1) == "0" ? false : true));
|
|
else if (vals.at(0) == "mem") set("mem_below_net", (vals.at(1) == "0" ? false : true));
|
|
else if (vals.at(0) == "proc") set("proc_left", (vals.at(1) == "0" ? false : true));
|
|
set("graph_symbol_" + vals.at(0), vals.at(2));
|
|
}
|
|
|
|
if (check_boxes(boxes)) set("shown_boxes", boxes);
|
|
}
|
|
|
|
void lock() {
|
|
atomic_wait(writelock);
|
|
locked = true;
|
|
}
|
|
|
|
string validError;
|
|
|
|
bool intValid(const string& name, const string& value) {
|
|
int i_value;
|
|
try {
|
|
i_value = stoi(value);
|
|
}
|
|
catch (const std::invalid_argument&) {
|
|
validError = "Invalid numerical value!";
|
|
return false;
|
|
}
|
|
catch (const std::out_of_range&) {
|
|
validError = "Value out of range!";
|
|
return false;
|
|
}
|
|
catch (const std::exception& e) {
|
|
validError = (string)e.what();
|
|
return false;
|
|
}
|
|
|
|
if (name == "update_ms" and i_value < 100)
|
|
validError = "Config value update_ms set too low (<100).";
|
|
|
|
else if (name == "update_ms" and i_value > 86400000)
|
|
validError = "Config value update_ms set too high (>86400000).";
|
|
|
|
else
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
bool stringValid(const string& name, const string& value) {
|
|
if (name == "log_level" and not v_contains(Logger::log_levels, value))
|
|
validError = "Invalid log_level: " + value;
|
|
|
|
else if (name == "graph_symbol" and not v_contains(valid_graph_symbols, value))
|
|
validError = "Invalid graph symbol identifier: " + value;
|
|
|
|
else if (name.starts_with("graph_symbol_") and (value != "default" and not v_contains(valid_graph_symbols, value)))
|
|
validError = "Invalid graph symbol identifier for" + name + ": " + value;
|
|
|
|
else if (name == "shown_boxes" and not value.empty() and not check_boxes(value))
|
|
validError = "Invalid box name(s) in shown_boxes!";
|
|
|
|
else if (name == "presets" and not presetsValid(value))
|
|
return false;
|
|
|
|
else if (name == "cpu_core_map") {
|
|
const auto maps = ssplit(value);
|
|
bool all_good = true;
|
|
for (const auto& map : maps) {
|
|
const auto map_split = ssplit(map, ':');
|
|
if (map_split.size() != 2)
|
|
all_good = false;
|
|
else if (not isint(map_split.at(0)) or not isint(map_split.at(1)))
|
|
all_good = false;
|
|
|
|
if (not all_good) {
|
|
validError = "Invalid formatting of cpu_core_map!";
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
else if (name == "io_graph_speeds") {
|
|
const auto maps = ssplit(value);
|
|
bool all_good = true;
|
|
for (const auto& map : maps) {
|
|
const auto map_split = ssplit(map, ':');
|
|
if (map_split.size() != 2)
|
|
all_good = false;
|
|
else if (map_split.at(0).empty() or not isint(map_split.at(1)))
|
|
all_good = false;
|
|
|
|
if (not all_good) {
|
|
validError = "Invalid formatting of io_graph_speeds!";
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
else
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
string getAsString(const string& name) {
|
|
if (bools.contains(name))
|
|
return (bools.at(name) ? "True" : "False");
|
|
else if (ints.contains(name))
|
|
return to_string(ints.at(name));
|
|
else if (strings.contains(name))
|
|
return strings.at(name);
|
|
return "";
|
|
}
|
|
|
|
void flip(const string& name) {
|
|
if (_locked(name)) {
|
|
if (boolsTmp.contains(name)) boolsTmp.at(name) = not boolsTmp.at(name);
|
|
else boolsTmp.insert_or_assign(name, (not bools.at(name)));
|
|
}
|
|
else bools.at(name) = not bools.at(name);
|
|
}
|
|
|
|
void unlock() {
|
|
if (not locked) return;
|
|
atomic_wait(Runner::active);
|
|
atomic_lock lck(writelock, true);
|
|
try {
|
|
if (Proc::shown) {
|
|
ints.at("selected_pid") = Proc::selected_pid;
|
|
strings.at("selected_name") = Proc::selected_name;
|
|
ints.at("proc_start") = Proc::start;
|
|
ints.at("proc_selected") = Proc::selected;
|
|
}
|
|
|
|
for (auto& item : stringsTmp) {
|
|
strings.at(item.first) = item.second;
|
|
}
|
|
stringsTmp.clear();
|
|
|
|
for (auto& item : intsTmp) {
|
|
ints.at(item.first) = item.second;
|
|
}
|
|
intsTmp.clear();
|
|
|
|
for (auto& item : boolsTmp) {
|
|
bools.at(item.first) = item.second;
|
|
}
|
|
boolsTmp.clear();
|
|
}
|
|
catch (const std::exception& e) {
|
|
Global::exit_error_msg = "Exception during Config::unlock() : " + (string)e.what();
|
|
clean_quit(1);
|
|
}
|
|
|
|
locked = false;
|
|
}
|
|
|
|
bool check_boxes(const string& boxes) {
|
|
auto new_boxes = ssplit(boxes);
|
|
for (auto& box : new_boxes) {
|
|
if (not v_contains(valid_boxes, box)) return false;
|
|
}
|
|
current_boxes = move(new_boxes);
|
|
return true;
|
|
}
|
|
|
|
void toggle_box(const string& box) {
|
|
auto old_boxes = current_boxes;
|
|
auto box_pos = rng::find(current_boxes, box);
|
|
if (box_pos == current_boxes.end())
|
|
current_boxes.push_back(box);
|
|
else
|
|
current_boxes.erase(box_pos);
|
|
|
|
string new_boxes;
|
|
if (not current_boxes.empty()) {
|
|
for (const auto& b : current_boxes) new_boxes += b + ' ';
|
|
new_boxes.pop_back();
|
|
}
|
|
|
|
auto min_size = Term::get_min_size(new_boxes);
|
|
|
|
if (Term::width < min_size.at(0) or Term::height < min_size.at(1)) {
|
|
current_boxes = old_boxes;
|
|
return;
|
|
}
|
|
|
|
Config::set("shown_boxes", new_boxes);
|
|
}
|
|
|
|
void load(const fs::path& conf_file, vector<string>& load_warnings) {
|
|
if (conf_file.empty())
|
|
return;
|
|
else if (not fs::exists(conf_file)) {
|
|
write_new = true;
|
|
return;
|
|
}
|
|
std::ifstream cread(conf_file);
|
|
if (cread.good()) {
|
|
vector<string> valid_names;
|
|
for (auto &n : descriptions)
|
|
valid_names.push_back(n[0]);
|
|
if (string v_string; cread.peek() != '#' or (getline(cread, v_string, '\n') and not s_contains(v_string, Global::Version)))
|
|
write_new = true;
|
|
while (not cread.eof()) {
|
|
cread >> std::ws;
|
|
if (cread.peek() == '#') {
|
|
cread.ignore(SSmax, '\n');
|
|
continue;
|
|
}
|
|
string name, value;
|
|
getline(cread, name, '=');
|
|
if (name.ends_with(' ')) name = trim(name);
|
|
if (not v_contains(valid_names, name)) {
|
|
cread.ignore(SSmax, '\n');
|
|
continue;
|
|
}
|
|
cread >> std::ws;
|
|
|
|
if (bools.contains(name)) {
|
|
cread >> value;
|
|
if (not isbool(value))
|
|
load_warnings.push_back("Got an invalid bool value for config name: " + name);
|
|
else
|
|
bools.at(name) = stobool(value);
|
|
}
|
|
else if (ints.contains(name)) {
|
|
cread >> value;
|
|
if (not isint(value))
|
|
load_warnings.push_back("Got an invalid integer value for config name: " + name);
|
|
else if (not intValid(name, value)) {
|
|
load_warnings.push_back(validError);
|
|
}
|
|
else
|
|
ints.at(name) = stoi(value);
|
|
}
|
|
else if (strings.contains(name)) {
|
|
if (cread.peek() == '"') {
|
|
cread.ignore(1);
|
|
getline(cread, value, '"');
|
|
}
|
|
else cread >> value;
|
|
|
|
if (not stringValid(name, value))
|
|
load_warnings.push_back(validError);
|
|
else
|
|
strings.at(name) = value;
|
|
}
|
|
|
|
cread.ignore(SSmax, '\n');
|
|
}
|
|
|
|
if (not load_warnings.empty()) write_new = true;
|
|
}
|
|
}
|
|
|
|
void write() {
|
|
if (conf_file.empty() or not write_new) return;
|
|
Logger::debug("Writing new config file");
|
|
if (geteuid() != Global::real_uid and seteuid(Global::real_uid) != 0) return;
|
|
std::ofstream cwrite(conf_file, std::ios::trunc);
|
|
if (cwrite.good()) {
|
|
cwrite << "#? Config file for btop v. " << Global::Version;
|
|
for (auto [name, description] : descriptions) {
|
|
cwrite << "\n\n" << (description.empty() ? "" : description + "\n")
|
|
<< name << " = ";
|
|
if (strings.contains(name))
|
|
cwrite << "\"" << strings.at(name) << "\"";
|
|
else if (ints.contains(name))
|
|
cwrite << ints.at(name);
|
|
else if (bools.contains(name))
|
|
cwrite << (bools.at(name) ? "True" : "False");
|
|
}
|
|
}
|
|
}
|
|
} |