mirror of https://github.com/aristocratos/btop.git
Compare commits
2 Commits
cb1c65f825
...
1c3e4a2425
Author | SHA1 | Date |
---|---|---|
Steffen | 1c3e4a2425 | |
Steffen | dd0e8a3f8b |
|
@ -17,6 +17,8 @@ tab-size = 4
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <ranges>
|
#include <ranges>
|
||||||
|
#include <regex>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#include "btop_config.hpp"
|
#include "btop_config.hpp"
|
||||||
#include "btop_shared.hpp"
|
#include "btop_shared.hpp"
|
||||||
|
@ -111,6 +113,22 @@ namespace Proc {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool matches_filter(const proc_info& proc, const std::string& filter) {
|
||||||
|
if (filter.starts_with("!")) {
|
||||||
|
if (filter.size() == 1) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
std::regex regex{filter.substr(1), std::regex::extended};
|
||||||
|
return std::regex_search(std::to_string(proc.pid), regex) ||
|
||||||
|
std::regex_search(proc.name, regex) || std::regex_match(proc.cmd, regex) ||
|
||||||
|
std::regex_search(proc.user, regex);
|
||||||
|
} else {
|
||||||
|
return s_contains(std::to_string(proc.pid), filter) ||
|
||||||
|
s_contains_ic(proc.name, filter) || s_contains_ic(proc.cmd, filter) ||
|
||||||
|
s_contains_ic(proc.user, filter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void _tree_gen(proc_info& cur_proc, vector<proc_info>& in_procs, vector<tree_proc>& out_procs,
|
void _tree_gen(proc_info& cur_proc, vector<proc_info>& in_procs, vector<tree_proc>& out_procs,
|
||||||
int cur_depth, bool collapsed, const string& filter, bool found, bool no_update, bool should_filter) {
|
int cur_depth, bool collapsed, const string& filter, bool found, bool no_update, bool should_filter) {
|
||||||
auto cur_pos = out_procs.size();
|
auto cur_pos = out_procs.size();
|
||||||
|
@ -118,10 +136,7 @@ namespace Proc {
|
||||||
|
|
||||||
//? If filtering, include children of matching processes
|
//? If filtering, include children of matching processes
|
||||||
if (not found and (should_filter or not filter.empty())) {
|
if (not found and (should_filter or not filter.empty())) {
|
||||||
if (not s_contains(std::to_string(cur_proc.pid), filter)
|
if (!matches_filter(cur_proc, filter)) {
|
||||||
and not s_contains_ic(cur_proc.name, filter)
|
|
||||||
and not s_contains_ic(cur_proc.cmd, filter)
|
|
||||||
and not s_contains_ic(cur_proc.user, filter)) {
|
|
||||||
filtering = true;
|
filtering = true;
|
||||||
cur_proc.filtered = true;
|
cur_proc.filtered = true;
|
||||||
filter_found++;
|
filter_found++;
|
||||||
|
|
|
@ -424,6 +424,8 @@ namespace Proc {
|
||||||
void tree_sort(vector<tree_proc>& proc_vec, const string& sorting,
|
void tree_sort(vector<tree_proc>& proc_vec, const string& sorting,
|
||||||
bool reverse, int& c_index, const int index_max, bool collapsed = false);
|
bool reverse, int& c_index, const int index_max, bool collapsed = false);
|
||||||
|
|
||||||
|
bool matches_filter(const proc_info& proc, const std::string& filter);
|
||||||
|
|
||||||
//* Generate process tree list
|
//* Generate process tree list
|
||||||
void _tree_gen(proc_info& cur_proc, vector<proc_info>& in_procs, vector<tree_proc>& out_procs,
|
void _tree_gen(proc_info& cur_proc, vector<proc_info>& in_procs, vector<tree_proc>& out_procs,
|
||||||
int cur_depth, bool collapsed, const string& filter,
|
int cur_depth, bool collapsed, const string& filter,
|
||||||
|
|
|
@ -1239,18 +1239,13 @@ namespace Proc {
|
||||||
filter_found = 0;
|
filter_found = 0;
|
||||||
for (auto& p : current_procs) {
|
for (auto& p : current_procs) {
|
||||||
if (not tree and not filter.empty()) {
|
if (not tree and not filter.empty()) {
|
||||||
if (not s_contains_ic(to_string(p.pid), filter)
|
if (!matches_filter(p, filter)) {
|
||||||
and not s_contains_ic(p.name, filter)
|
p.filtered = true;
|
||||||
and not s_contains_ic(p.cmd, filter)
|
filter_found++;
|
||||||
and not s_contains_ic(p.user, filter)) {
|
} else {
|
||||||
p.filtered = true;
|
p.filtered = false;
|
||||||
filter_found++;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
p.filtered = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
} else {
|
||||||
p.filtered = false;
|
p.filtered = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2794,18 +2794,13 @@ namespace Proc {
|
||||||
filter_found = 0;
|
filter_found = 0;
|
||||||
for (auto& p : current_procs) {
|
for (auto& p : current_procs) {
|
||||||
if (not tree and not filter.empty()) {
|
if (not tree and not filter.empty()) {
|
||||||
if (not s_contains_ic(to_string(p.pid), filter)
|
if (!matches_filter(p, filter)) {
|
||||||
and not s_contains_ic(p.name, filter)
|
p.filtered = true;
|
||||||
and not s_contains_ic(p.cmd, filter)
|
filter_found++;
|
||||||
and not s_contains_ic(p.user, filter)) {
|
} else {
|
||||||
p.filtered = true;
|
p.filtered = false;
|
||||||
filter_found++;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
p.filtered = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
} else {
|
||||||
p.filtered = false;
|
p.filtered = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1171,18 +1171,13 @@ namespace Proc {
|
||||||
filter_found = 0;
|
filter_found = 0;
|
||||||
for (auto& p : current_procs) {
|
for (auto& p : current_procs) {
|
||||||
if (not tree and not filter.empty()) {
|
if (not tree and not filter.empty()) {
|
||||||
if (not s_contains_ic(to_string(p.pid), filter)
|
if (!matches_filter(p, filter)) {
|
||||||
and not s_contains_ic(p.name, filter)
|
p.filtered = true;
|
||||||
and not s_contains_ic(p.cmd, filter)
|
filter_found++;
|
||||||
and not s_contains_ic(p.user, filter)) {
|
} else {
|
||||||
p.filtered = true;
|
p.filtered = false;
|
||||||
filter_found++;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
p.filtered = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
} else {
|
||||||
p.filtered = false;
|
p.filtered = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1301,7 +1301,7 @@ namespace Proc {
|
||||||
filter_found = 0;
|
filter_found = 0;
|
||||||
for (auto &p : current_procs) {
|
for (auto &p : current_procs) {
|
||||||
if (not tree and not filter.empty()) {
|
if (not tree and not filter.empty()) {
|
||||||
if (not s_contains_ic(to_string(p.pid), filter) and not s_contains_ic(p.name, filter) and not s_contains_ic(p.cmd, filter) and not s_contains_ic(p.user, filter)) {
|
if (!matches_filter(p, filter)) {
|
||||||
p.filtered = true;
|
p.filtered = true;
|
||||||
filter_found++;
|
filter_found++;
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue