summaryrefslogtreecommitdiffstats
path: root/htop.c
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2011-11-18 06:08:56 +0000
committerHisham Muhammad <hisham@gobolinux.org>2011-11-18 06:08:56 +0000
commit7ca10817122d3b7b30fabb1cadb75e5ee14b364e (patch)
tree14fa282dcad8eac9401fa463484b0b1693f43e1f /htop.c
parent38856488815711138aa9d0ba32cca66694717171 (diff)
Mega-commit with features and tweaks for 1.0:
* Performance improvements * Support for splitting CPU meters into two or four columns (thanks to Wim Heirman) * Switch from PLPA, which is now deprecated, to HWLOC. * Bring back support for native Linux sched_setaffinity, so we don't have to use HWLOC where we don't need to. * Support for typing in user names and column fields in selection panels.
Diffstat (limited to 'htop.c')
-rw-r--r--htop.c43
1 files changed, 4 insertions, 39 deletions
diff --git a/htop.c b/htop.c
index 6ceabb25..3fedd126 100644
--- a/htop.c
+++ b/htop.c
@@ -193,44 +193,11 @@ static bool changePriority(Panel* panel, int delta) {
return anyTagged;
}
-static HandlerResult pickWithEnter(Panel* panel, int ch) {
- int size = Panel_size(panel);
-
- if (isalnum(ch)) {
- int len = strlen(panel->eventHandlerBuffer);
- if (len < 99) {
- panel->eventHandlerBuffer[len] = ch;
- panel->eventHandlerBuffer[len+1] = '\0';
- }
- for (int try = 0; try < 2; try++) {
- len = strlen(panel->eventHandlerBuffer);
- for (int i = 0; i < size; i++) {
- char* cur = ((ListItem*) Panel_get(panel, i))->value;
- while (*cur == ' ') cur++;
- if (strncasecmp(cur, panel->eventHandlerBuffer, len) == 0) {
- Panel_setSelected(panel, i);
- return HANDLED;
- }
- }
- panel->eventHandlerBuffer[0] = ch;
- panel->eventHandlerBuffer[1] = '\0';
- }
- return HANDLED;
- } else if (ch != ERR) {
- panel->eventHandlerBuffer[0] = '\0';
- }
- if (ch == 13) {
- return BREAK_LOOP;
- }
- return IGNORED;
-}
-
static Object* pickFromVector(Panel* panel, Panel* list, int x, int y, const char** keyLabels, FunctionBar* prevBar, Header* header) {
const char* fuKeys[] = {"Enter", "Esc", NULL};
int fuEvents[] = {13, 27};
- list->eventHandlerBuffer = calloc(100, 1);
if (!list->eventHandler)
- Panel_setEventHandler(list, pickWithEnter);
+ Panel_setEventHandler(list, Panel_selectByTyping);
ScreenManager* scr = ScreenManager_new(0, y, 0, -1, HORIZONTAL, header, false);
ScreenManager_add(scr, list, FunctionBar_new(keyLabels, fuKeys, fuEvents), x - 1);
ScreenManager_add(scr, panel, NULL, -1);
@@ -238,8 +205,6 @@ static Object* pickFromVector(Panel* panel, Panel* list, int x, int y, const cha
int ch;
ScreenManager_run(scr, &panelFocus, &ch);
ScreenManager_delete(scr);
- free(list->eventHandlerBuffer);
- list->eventHandlerBuffer = NULL;
Panel_move(panel, 0, y);
Panel_resize(panel, COLS, LINES-y-1);
FunctionBar_draw(prevBar, NULL);
@@ -383,7 +348,7 @@ int main(int argc, char** argv) {
Process_getMaxPid();
Header* header = Header_new(pl);
- settings = Settings_new(pl, header);
+ settings = Settings_new(pl, header, pl->cpuCount);
int headerHeight = Header_calculateHeight(header);
// FIXME: move delay code to settings
@@ -750,7 +715,7 @@ int main(int argc, char** argv) {
Panel* usersPanel = Panel_new(0, 0, 0, 0, LISTITEM_CLASS, true, ListItem_compare);
Panel_setHeader(usersPanel, "Show processes of:");
UsersTable_foreach(ut, addUserToVector, usersPanel);
- Vector_sort(usersPanel->items);
+ Vector_insertionSort(usersPanel->items);
ListItem* allUsers = ListItem_new("All users", -1);
Panel_insert(usersPanel, 0, (Object*) allUsers);
const char* fuFunctions[] = {"Show ", "Cancel ", NULL};
@@ -808,7 +773,7 @@ int main(int argc, char** argv) {
refreshTimeout = 0;
break;
}
-#ifdef HAVE_HWLOC
+#if (HAVE_HWLOC || HAVE_NATIVE_AFFINITY)
case 'a':
{
if (pl->cpuCount == 1)

© 2014-2024 Faster IT GmbH | imprint | privacy policy