mirror of https://github.com/aristocratos/bpytop
				
				
				
			Merge branch 'proc-filter'
						commit
						86f1a1f18b
					
				
							
								
								
									
										27
									
								
								bpytop.py
								
								
								
								
							
							
						
						
									
										27
									
								
								bpytop.py
								
								
								
								
							| 
						 | 
					@ -2566,7 +2566,7 @@ class ProcBox(Box):
 | 
				
			||||||
				if not "delete" in Key.mouse: Key.mouse["delete"] = [[x+12 + len(proc.search_filter[-10:]) + i, y-1] for i in range(3)]
 | 
									if not "delete" in Key.mouse: Key.mouse["delete"] = [[x+12 + len(proc.search_filter[-10:]) + i, y-1] for i in range(3)]
 | 
				
			||||||
			elif "delete" in Key.mouse:
 | 
								elif "delete" in Key.mouse:
 | 
				
			||||||
				del Key.mouse["delete"]
 | 
									del Key.mouse["delete"]
 | 
				
			||||||
			out_misc += (f'{Mv.to(y-1, x + 8)}{THEME.proc_box(Symbol.title_left)}{Fx.b if cls.filtering or proc.search_filter else ""}{THEME.hi_fg("f")}{THEME.title}' +
 | 
								out_misc += (f'{Mv.to(y-1, x + 8)}{THEME.proc_box(Symbol.title_left)}{Fx.b if cls.filtering or proc.search_filter else ""}{THEME.hi_fg("F" if cls.filtering and proc.case_sensitive else "f")}{THEME.title}' +
 | 
				
			||||||
				("ilter" if not proc.search_filter and not cls.filtering else f' {proc.search_filter[-(10 if w < 83 else w - 74):]}{(Fx.bl + "█" + Fx.ubl) if cls.filtering else THEME.hi_fg(" del")}') +
 | 
									("ilter" if not proc.search_filter and not cls.filtering else f' {proc.search_filter[-(10 if w < 83 else w - 74):]}{(Fx.bl + "█" + Fx.ubl) if cls.filtering else THEME.hi_fg(" del")}') +
 | 
				
			||||||
				f'{THEME.proc_box(Symbol.title_right)}')
 | 
									f'{THEME.proc_box(Symbol.title_right)}')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3523,6 +3523,7 @@ class ProcCollector(Collector):
 | 
				
			||||||
	'''Collects process stats'''
 | 
						'''Collects process stats'''
 | 
				
			||||||
	buffer: str = ProcBox.buffer
 | 
						buffer: str = ProcBox.buffer
 | 
				
			||||||
	search_filter: str = ""
 | 
						search_filter: str = ""
 | 
				
			||||||
 | 
						case_sensitive: bool = False
 | 
				
			||||||
	processes: Dict = {}
 | 
						processes: Dict = {}
 | 
				
			||||||
	num_procs: int = 0
 | 
						num_procs: int = 0
 | 
				
			||||||
	det_cpu: float = 0.0
 | 
						det_cpu: float = 0.0
 | 
				
			||||||
| 
						 | 
					@ -3554,7 +3555,12 @@ class ProcCollector(Collector):
 | 
				
			||||||
		sorting: str = CONFIG.proc_sorting
 | 
							sorting: str = CONFIG.proc_sorting
 | 
				
			||||||
		reverse: bool = not CONFIG.proc_reversed
 | 
							reverse: bool = not CONFIG.proc_reversed
 | 
				
			||||||
		proc_per_cpu: bool = CONFIG.proc_per_core
 | 
							proc_per_cpu: bool = CONFIG.proc_per_core
 | 
				
			||||||
		search: str = cls.search_filter
 | 
							search: List[str] = []
 | 
				
			||||||
 | 
							if cls.search_filter:
 | 
				
			||||||
 | 
								if cls.case_sensitive:
 | 
				
			||||||
 | 
									search = [i.strip() for i in cls.search_filter.split(",")]
 | 
				
			||||||
 | 
								else:
 | 
				
			||||||
 | 
									search = [i.strip() for i in cls.search_filter.lower().split(",")]
 | 
				
			||||||
		err: float = 0.0
 | 
							err: float = 0.0
 | 
				
			||||||
		n: int = 0
 | 
							n: int = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3581,8 +3587,10 @@ class ProcCollector(Collector):
 | 
				
			||||||
					if cls.detailed and p.info["pid"] == cls.detailed_pid:
 | 
										if cls.detailed and p.info["pid"] == cls.detailed_pid:
 | 
				
			||||||
						cls.det_cpu = p.info["cpu_percent"]
 | 
											cls.det_cpu = p.info["cpu_percent"]
 | 
				
			||||||
					for value in [ p.info["name"], " ".join(p.info["cmdline"]), str(p.info["pid"]), p.info["username"] ]:
 | 
										for value in [ p.info["name"], " ".join(p.info["cmdline"]), str(p.info["pid"]), p.info["username"] ]:
 | 
				
			||||||
						for s in search.split(","):
 | 
											if not cls.case_sensitive:
 | 
				
			||||||
							if s.strip() in value:
 | 
												value = value.lower()
 | 
				
			||||||
 | 
											for s in search:
 | 
				
			||||||
 | 
												if s in value:
 | 
				
			||||||
								break
 | 
													break
 | 
				
			||||||
						else: continue
 | 
											else: continue
 | 
				
			||||||
						break
 | 
											break
 | 
				
			||||||
| 
						 | 
					@ -3694,7 +3702,7 @@ class ProcCollector(Collector):
 | 
				
			||||||
				if len(cls.details_mem) > ProcBox.width: del cls.details_mem[0]
 | 
									if len(cls.details_mem) > ProcBox.width: del cls.details_mem[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@classmethod
 | 
						@classmethod
 | 
				
			||||||
	def _tree(cls, sort_cmd, reverse: bool, proc_per_cpu: bool, search: str):
 | 
						def _tree(cls, sort_cmd, reverse: bool, proc_per_cpu: bool, search: List[str]):
 | 
				
			||||||
		'''List all processess in a tree view with pid, name, threads, username, memory percent and cpu percent'''
 | 
							'''List all processess in a tree view with pid, name, threads, username, memory percent and cpu percent'''
 | 
				
			||||||
		out: Dict = {}
 | 
							out: Dict = {}
 | 
				
			||||||
		err: float = 0.0
 | 
							err: float = 0.0
 | 
				
			||||||
| 
						 | 
					@ -3737,8 +3745,10 @@ class ProcCollector(Collector):
 | 
				
			||||||
				if "username" in getinfo and isinstance(getinfo["username"], float): getinfo["username"] = ""
 | 
									if "username" in getinfo and isinstance(getinfo["username"], float): getinfo["username"] = ""
 | 
				
			||||||
				if "cmdline" in getinfo and isinstance(getinfo["cmdline"], float): getinfo["cmdline"] = ""
 | 
									if "cmdline" in getinfo and isinstance(getinfo["cmdline"], float): getinfo["cmdline"] = ""
 | 
				
			||||||
				for value in [ name, str(pid), getinfo.get("username", ""), " ".join(getinfo.get("cmdline", "")) ]:
 | 
									for value in [ name, str(pid), getinfo.get("username", ""), " ".join(getinfo.get("cmdline", "")) ]:
 | 
				
			||||||
					for s in search.split(","):
 | 
										if not cls.case_sensitive:
 | 
				
			||||||
						if s.strip() in value:
 | 
											value = value.lower()
 | 
				
			||||||
 | 
										for s in search:
 | 
				
			||||||
 | 
											if s in value:
 | 
				
			||||||
							found = True
 | 
												found = True
 | 
				
			||||||
							break
 | 
												break
 | 
				
			||||||
					else: continue
 | 
										else: continue
 | 
				
			||||||
| 
						 | 
					@ -5178,8 +5188,9 @@ def process_keys():
 | 
				
			||||||
			elif key == "c":
 | 
								elif key == "c":
 | 
				
			||||||
				CONFIG.proc_per_core = not CONFIG.proc_per_core
 | 
									CONFIG.proc_per_core = not CONFIG.proc_per_core
 | 
				
			||||||
				Collector.collect(ProcCollector, interrupt=True, redraw=True)
 | 
									Collector.collect(ProcCollector, interrupt=True, redraw=True)
 | 
				
			||||||
			elif key == "f":
 | 
								elif key in ["f", "F"]:
 | 
				
			||||||
				ProcBox.filtering = True
 | 
									ProcBox.filtering = True
 | 
				
			||||||
 | 
									ProcCollector.case_sensitive = key == "F"
 | 
				
			||||||
				if not ProcCollector.search_filter: ProcBox.start = 0
 | 
									if not ProcCollector.search_filter: ProcBox.start = 0
 | 
				
			||||||
				Collector.collect(ProcCollector, redraw=True, only_draw=True)
 | 
									Collector.collect(ProcCollector, redraw=True, only_draw=True)
 | 
				
			||||||
			elif key in ["T", "K", "I"] and (ProcBox.selected > 0 or ProcCollector.detailed):
 | 
								elif key in ["T", "K", "I"] and (ProcBox.selected > 0 or ProcCollector.detailed):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue