mirror of https://github.com/aristocratos/bpytop
Merge branch 'refactoring'
commit
4c8f02fbec
99
bpytop.py
99
bpytop.py
|
@ -47,9 +47,8 @@ elif "darwin" in sys.platform: SYSTEM = "MacOS"
|
|||
else: SYSTEM = "Other"
|
||||
|
||||
if errors:
|
||||
print ("ERROR!")
|
||||
for error in errors:
|
||||
print(error)
|
||||
print("ERROR!")
|
||||
print("\n".join(errors))
|
||||
if SYSTEM == "Other":
|
||||
print("\nUnsupported platform!\n")
|
||||
else:
|
||||
|
@ -81,10 +80,7 @@ elif stdargs.proc:
|
|||
elif stdargs.stat:
|
||||
ARG_MODE = "stat"
|
||||
|
||||
if stdargs.debug:
|
||||
DEBUG = True
|
||||
else:
|
||||
DEBUG = False
|
||||
DEBUG = stdargs.debug
|
||||
|
||||
#? Variables ------------------------------------------------------------------------------------->
|
||||
|
||||
|
@ -516,7 +512,7 @@ try:
|
|||
errlog.setLevel(logging.DEBUG)
|
||||
else:
|
||||
errlog.setLevel(getattr(logging, CONFIG.log_level))
|
||||
if CONFIG.log_level == "DEBUG": DEBUG = True
|
||||
DEBUG = CONFIG.log_level == "DEBUG"
|
||||
errlog.info(f'New instance of bpytop version {VERSION} started with pid {os.getpid()}')
|
||||
errlog.info(f'Loglevel set to {"DEBUG" if DEBUG else CONFIG.log_level}')
|
||||
errlog.debug(f'Using psutil version {".".join(str(x) for x in psutil.version_info)}')
|
||||
|
@ -781,8 +777,7 @@ class Key:
|
|||
|
||||
@classmethod
|
||||
def has_key(cls) -> bool:
|
||||
if cls.list: return True
|
||||
else: return False
|
||||
return bool(cls.list)
|
||||
|
||||
@classmethod
|
||||
def clear(cls):
|
||||
|
@ -1154,8 +1149,8 @@ class Theme:
|
|||
|
||||
#* Get key names from DEFAULT_THEME dict to not leave any color unset if missing from theme dict
|
||||
for item, value in DEFAULT_THEME.items():
|
||||
default = False if item not in ["main_fg", "main_bg"] else True
|
||||
depth = "fg" if item not in ["main_bg", "selected_bg"] else "bg"
|
||||
default = item in ["main_fg", "main_bg"]
|
||||
depth = "bg" if item in ["main_bg", "selected_bg"] else "fg"
|
||||
if item in tdict:
|
||||
setattr(self, item, Color(tdict[item], depth=depth, default=default))
|
||||
else:
|
||||
|
@ -1181,8 +1176,7 @@ class Theme:
|
|||
|
||||
else:
|
||||
c = Color.fg(*rgb["start"])
|
||||
for _ in range(101):
|
||||
self.gradient[name] += [c]
|
||||
self.gradient[name] += [c] * 101
|
||||
#* Set terminal colors
|
||||
Term.fg = self.main_fg
|
||||
Term.bg = self.main_bg if CONFIG.theme_background else "\033[49m"
|
||||
|
@ -1232,7 +1226,7 @@ class Banner:
|
|||
line_dark = Color.fg(f'#{80 - num * 6}')
|
||||
for n, letter in enumerate(line):
|
||||
if letter == "█" and c_color != line_color:
|
||||
if n > 5 and n < 25: c_color = line_color2
|
||||
if 5 < n < 25: c_color = line_color2
|
||||
else: c_color = line_color
|
||||
out_var += c_color
|
||||
elif letter == " ":
|
||||
|
@ -1501,8 +1495,8 @@ class Box:
|
|||
y: int
|
||||
width: int
|
||||
height: int
|
||||
proc_mode: bool = True if (CONFIG.view_mode == "proc" and not ARG_MODE) or ARG_MODE == "proc" else False
|
||||
stat_mode: bool = True if (CONFIG.view_mode == "stat" and not ARG_MODE) or ARG_MODE == "stat" else False
|
||||
proc_mode: bool = (CONFIG.view_mode == "proc" and not ARG_MODE) or ARG_MODE == "proc"
|
||||
stat_mode: bool = (CONFIG.view_mode == "stat" and not ARG_MODE) or ARG_MODE == "stat"
|
||||
out: str
|
||||
bg: str
|
||||
_b_cpu_h: int
|
||||
|
@ -1675,10 +1669,7 @@ class CpuBox(Box, SubBox):
|
|||
cls.battery_status = status
|
||||
return_true = True
|
||||
|
||||
if return_true or cls.resized or cls.redraw or Menu.active:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
return return_true or cls.resized or cls.redraw or Menu.active
|
||||
|
||||
@classmethod
|
||||
def _draw_fg(cls):
|
||||
|
@ -1716,14 +1707,11 @@ class CpuBox(Box, SubBox):
|
|||
battery_time = ""
|
||||
if not hasattr(Meters, "battery") or cls.resized:
|
||||
Meters.battery = Meter(cls.battery_percent, 10, "cpu", invert=True)
|
||||
if cls.battery_status == "Charging":
|
||||
battery_symbol: str = "▲"
|
||||
elif cls.battery_status == "Discharging":
|
||||
battery_symbol = "▼"
|
||||
elif cls.battery_status in ["Full", "Not charging"]:
|
||||
battery_symbol = "■"
|
||||
else:
|
||||
battery_symbol = "○"
|
||||
batery_symbols = {"Charging": "▲",
|
||||
"Discharging": "▼",
|
||||
"Full": "■",
|
||||
"Not charging": "■"}
|
||||
battery_symbol: str = battery_symbols.get(cls.battery_status, "○")
|
||||
battery_len: int = len(f'{CONFIG.update_ms}') + (11 if cls.width >= 100 else 0) + len(battery_time) + len(f'{cls.battery_percent}')
|
||||
battery_pos = cls.width - battery_len - 17
|
||||
if (battery_pos != cls.old_battery_pos or battery_len != cls.old_battery_len) and cls.old_battery_pos > 0 and not cls.resized:
|
||||
|
@ -1933,7 +1921,7 @@ class MemBox(Box):
|
|||
gbg = f'{Mv.l(1)}'
|
||||
gmv = f'{Mv.l(cls.mem_width - 2)}{Mv.u(cls.graph_height - 1)}'
|
||||
|
||||
big_mem: bool = True if cls.mem_width > 21 else False
|
||||
big_mem: bool = cls.mem_width > 21
|
||||
for name in cls.mem_names:
|
||||
if Collector.collect_interrupt: return
|
||||
if cls.mem_size > 2:
|
||||
|
@ -1965,7 +1953,7 @@ class MemBox(Box):
|
|||
#* Disks
|
||||
if CONFIG.show_disks and mem.disks:
|
||||
cx = x + cls.mem_width - 1; cy = 0
|
||||
big_disk: bool = True if cls.disks_width >= 25 else False
|
||||
big_disk: bool = cls.disks_width >= 25
|
||||
gli = f'{Mv.l(2)}{THEME.div_line}{Symbol.title_right}{Symbol.h_line * cls.disks_width}{THEME.mem_box}{Symbol.title_left}{Mv.l(cls.disks_width - 1)}'
|
||||
for name, item in mem.disks.items():
|
||||
if Collector.collect_interrupt: return
|
||||
|
@ -2068,7 +2056,7 @@ class NetBox(Box, SubBox):
|
|||
if cls.redraw: stats["redraw"] = True
|
||||
if stats["redraw"] or cls.resized:
|
||||
Graphs.net[direction] = Graph(w - bw - 3, cls.graph_height[direction], THEME.gradient[direction], stats["speed"], max_value=net.sync_top if CONFIG.net_sync else stats["graph_top"],
|
||||
invert=False if direction == "download" else True, color_max_value=net.net_min.get(direction) if CONFIG.net_color_fixed else None)
|
||||
invert=direction != "download", color_max_value=net.net_min.get(direction) if CONFIG.net_color_fixed else None)
|
||||
out += f'{Mv.to(y if direction == "download" else y + cls.graph_height["download"], x)}{Graphs.net[direction](None if stats["redraw"] else stats["speed"][-1])}'
|
||||
|
||||
out += (f'{Mv.to(by+cy, bx)}{THEME.main_fg}{cls.symbols[direction]} {strings["byte_ps"]:<10.10}' +
|
||||
|
@ -2174,7 +2162,7 @@ class ProcBox(Box):
|
|||
if cls.start < ProcCollector.num_procs - cls.select_max + 1: cls.start = ProcCollector.num_procs - cls.select_max + 1
|
||||
elif cls.selected < cls.select_max: cls.selected = cls.select_max
|
||||
elif key == "mouse_click":
|
||||
if mouse_pos[0] > cls.x + cls.width - 4 and mouse_pos[1] > cls.current_y + 1 and mouse_pos[1] < cls.current_y + 1 + cls.select_max + 1:
|
||||
if mouse_pos[0] > cls.x + cls.width - 4 and cls.current_y + 1 < mouse_pos[1] < cls.current_y + 1 + cls.select_max + 1:
|
||||
if mouse_pos[1] == cls.current_y + 2:
|
||||
cls.start = 1
|
||||
elif mouse_pos[1] == cls.current_y + 1 + cls.select_max:
|
||||
|
@ -2469,7 +2457,7 @@ class ProcBox(Box):
|
|||
|
||||
end = f'{THEME.main_fg}{Fx.ub}' if CONFIG.proc_colors else Fx.ub
|
||||
if cls.selected > cy: calc = cls.selected - cy
|
||||
elif cls.selected > 0 and cls.selected <= cy: calc = cy - cls.selected
|
||||
elif 0 < cls.selected <= cy: calc = cy - cls.selected
|
||||
else: calc = cy
|
||||
if CONFIG.proc_colors and not is_selected:
|
||||
vals = []
|
||||
|
@ -2685,7 +2673,7 @@ class CpuCollector(Collector):
|
|||
if which("vcgencmd") and subprocess.check_output(["vcgencmd", "measure_temp"], text=True).strip().endswith("'C"):
|
||||
cls.sensor_method = "vcgencmd"
|
||||
except: pass
|
||||
cls.got_sensors = True if cls.sensor_method else False
|
||||
cls.got_sensors = bool(cls.sensor_method)
|
||||
|
||||
@classmethod
|
||||
def _collect(cls):
|
||||
|
@ -2931,7 +2919,7 @@ class MemCollector(Collector):
|
|||
filtering = tuple(v.strip() for v in CONFIG.disks_filter.strip().split(","))
|
||||
|
||||
try:
|
||||
io_counters = psutil.disk_io_counters(perdisk=True if SYSTEM == "Linux" else False, nowrap=True)
|
||||
io_counters = psutil.disk_io_counters(perdisk=SYSTEM == "Linux", nowrap=True)
|
||||
except ValueError as e:
|
||||
if not cls.io_error:
|
||||
cls.io_error = True
|
||||
|
@ -3421,7 +3409,7 @@ class ProcCollector(Collector):
|
|||
if pid in cls.collapsed:
|
||||
collapse = cls.collapsed[pid]
|
||||
else:
|
||||
collapse = True if depth > CONFIG.tree_depth else False
|
||||
collapse = depth > CONFIG.tree_depth
|
||||
cls.collapsed[pid] = collapse
|
||||
|
||||
if collapse_to and not search:
|
||||
|
@ -3548,7 +3536,7 @@ class Menu:
|
|||
if Key.mouse_moved():
|
||||
mx, my = Key.get_mouse()
|
||||
for name, pos in mouse_items.items():
|
||||
if mx >= pos["x1"] and mx <= pos["x2"] and my >= pos["y1"] and my <= pos["y2"]:
|
||||
if pos["x1"] <= mx <= pos["x2"] and pos["y1"] <= my <= pos["y2"]:
|
||||
mouse_over = True
|
||||
if name != menu_current:
|
||||
menu_current = name
|
||||
|
@ -3609,7 +3597,7 @@ class Menu:
|
|||
redraw: bool = True
|
||||
key: str = ""
|
||||
skip: bool = False
|
||||
main_active: bool = True if cls.active else False
|
||||
main_active: bool = cls.active
|
||||
cls.active = True
|
||||
cls.resized = True
|
||||
if not cls.background:
|
||||
|
@ -3693,10 +3681,10 @@ class Menu:
|
|||
|
||||
if key == "mouse_click":
|
||||
mx, my = Key.get_mouse()
|
||||
if mx >= x and mx < x + w and my >= y and my < y + h + 3:
|
||||
if pages and my == y and mx > x + 56 and mx < x + 61:
|
||||
if x <= mx < x + w and y <= my < y + h + 3:
|
||||
if pages and my == y and x + 56 < mx < x + 61:
|
||||
key = "up"
|
||||
elif pages and my == y and mx > x + 63 and mx < x + 68:
|
||||
elif pages and my == y and x + 63 < mx < x + 68:
|
||||
key = "down"
|
||||
else:
|
||||
key = "escape"
|
||||
|
@ -3738,7 +3726,7 @@ class Menu:
|
|||
redraw: bool = True
|
||||
key: str = ""
|
||||
skip: bool = False
|
||||
main_active: bool = True if cls.active else False
|
||||
main_active: bool = cls.active
|
||||
cls.active = True
|
||||
cls.resized = True
|
||||
d_quote: str
|
||||
|
@ -4051,11 +4039,11 @@ class Menu:
|
|||
has_sel = False
|
||||
if key == "mouse_click" and not inputting:
|
||||
mx, my = Key.get_mouse()
|
||||
if mx > x and mx < x + w and my > y and my < y + h + 2:
|
||||
if x < mx < x + w and y < my < y + h + 2:
|
||||
mouse_sel = ceil((my - y) / 2) - 1 + ceil((page-1) * (h / 2))
|
||||
if pages and my == y+h+1 and mx > x+11 and mx < x+16:
|
||||
if pages and my == y+h+1 and x+11 < mx < x+16:
|
||||
key = "page_up"
|
||||
elif pages and my == y+h+1 and mx > x+19 and mx < x+24:
|
||||
elif pages and my == y+h+1 and x+19 < mx < x+24:
|
||||
key = "page_down"
|
||||
elif my == y+h+1:
|
||||
pass
|
||||
|
@ -4095,11 +4083,11 @@ class Menu:
|
|||
if selected.startswith("net_"):
|
||||
NetCollector.net_min = {"download" : -1, "upload" : -1}
|
||||
elif selected == "draw_clock":
|
||||
Box.clock_on = True if len(CONFIG.draw_clock) > 0 else False
|
||||
Box.clock_on = len(CONFIG.draw_clock) > 0
|
||||
if not Box.clock_on: Draw.clear("clock", saved=True)
|
||||
Term.refresh(force=True)
|
||||
cls.resized = False
|
||||
elif key == "backspace" and len(input_val) > 0:
|
||||
elif key == "backspace" and len(input_val):
|
||||
input_val = input_val[:-1]
|
||||
elif key == "delete":
|
||||
input_val = ""
|
||||
|
@ -4190,8 +4178,8 @@ class Menu:
|
|||
view_mode_i += 1
|
||||
if view_mode_i > len(CONFIG.view_modes) - 1: view_mode_i = 0
|
||||
CONFIG.view_mode = CONFIG.view_modes[view_mode_i]
|
||||
Box.proc_mode = True if CONFIG.view_mode == "proc" else False
|
||||
Box.stat_mode = True if CONFIG.view_mode == "stat" else False
|
||||
Box.proc_mode = CONFIG.view_mode == "proc"
|
||||
Box.stat_mode = CONFIG.view_mode == "stat"
|
||||
if ARG_MODE:
|
||||
ARG_MODE = ""
|
||||
Draw.clear(saved=True)
|
||||
|
@ -4247,10 +4235,7 @@ class Timer:
|
|||
if cls.return_zero:
|
||||
cls.return_zero = False
|
||||
return False
|
||||
if cls.timestamp + (CONFIG.update_ms / 1000) > time():
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
return cls.timestamp + (CONFIG.update_ms / 1000) > time()
|
||||
|
||||
@classmethod
|
||||
def left(cls) -> float:
|
||||
|
@ -4582,7 +4567,7 @@ def process_keys():
|
|||
key = Key.get()
|
||||
if key in ["mouse_scroll_up", "mouse_scroll_down", "mouse_click"]:
|
||||
mouse_pos = Key.get_mouse()
|
||||
if mouse_pos[0] >= ProcBox.x and mouse_pos[1] >= ProcBox.current_y + 1 and mouse_pos[1] < ProcBox.current_y + ProcBox.current_h - 1:
|
||||
if mouse_pos[0] >= ProcBox.x and ProcBox.current_y + 1 <= mouse_pos[1] < ProcBox.current_y + ProcBox.current_h - 1:
|
||||
pass
|
||||
elif key == "mouse_click":
|
||||
key = "mouse_unselect"
|
||||
|
@ -4670,8 +4655,8 @@ def process_keys():
|
|||
CONFIG.view_mode = CONFIG.view_modes[0]
|
||||
else:
|
||||
CONFIG.view_mode = CONFIG.view_modes[(CONFIG.view_modes.index(CONFIG.view_mode) + 1)]
|
||||
Box.proc_mode = True if CONFIG.view_mode == "proc" else False
|
||||
Box.stat_mode = True if CONFIG.view_mode == "stat" else False
|
||||
Box.proc_mode = CONFIG.view_mode == "proc"
|
||||
Box.stat_mode = CONFIG.view_mode == "stat"
|
||||
Draw.clear(saved=True)
|
||||
Term.refresh(force=True)
|
||||
elif key.lower() in ["t", "k", "i"] and (ProcBox.selected > 0 or ProcCollector.detailed):
|
||||
|
|
Loading…
Reference in New Issue