summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2006-08-04 20:54:37 +0000
committerHisham Muhammad <hisham@gobolinux.org>2006-08-04 20:54:37 +0000
commitb10821aae9ac208dce0613e6869984d4f2fa1674 (patch)
tree25562ec8b27aba9b5ab7bfe52704a9f02d6b3a4a
parentbf44e233e62c44f3ec2edd71c37a3102c788d6ee (diff)
--sort-key flag in the command-line, overriding the
saved setting in .htoprc for the session. (thanks to Rodolfo Borges)
-rw-r--r--ChangeLog6
-rw-r--r--ColumnsPanel.c20
-rw-r--r--ColumnsPanel.h2
-rw-r--r--String.c2
-rw-r--r--String.h2
-rw-r--r--htop.c18
6 files changed, 41 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index f8f3c12c..b513ad6e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,10 @@
+What's new in version 0.6.4
+
+* --sort-key flag in the command-line, overriding the
+ saved setting in .htoprc for the session.
+ (thanks to Rodolfo Borges)
+
What's new in version 0.6.3
* Performance improvements: uses much less CPU than the
diff --git a/ColumnsPanel.c b/ColumnsPanel.c
index 8d3dd458..7a5a298b 100644
--- a/ColumnsPanel.c
+++ b/ColumnsPanel.c
@@ -44,6 +44,15 @@ void ColumnsPanel_delete(Object* object) {
free(this);
}
+int ColumnsPanel_fieldNameToIndex(const char* name) {
+ for (int j = 1; j <= LAST_PROCESSFIELD; j++) {
+ if (String_eq(name, Process_fieldNames[j])) {
+ return j;
+ }
+ }
+ return 0;
+}
+
void ColumnsPanel_update(Panel* super) {
ColumnsPanel* this = (ColumnsPanel*) super;
int size = Panel_getSize(super);
@@ -53,12 +62,9 @@ void ColumnsPanel_update(Panel* super) {
this->settings->pl->fields = (ProcessField*) malloc(sizeof(ProcessField) * (size+1));
for (int i = 0; i < size; i++) {
char* text = ((ListItem*) Panel_get(super, i))->value;
- for (int j = 1; j <= LAST_PROCESSFIELD; j++) {
- if (String_eq(text, Process_fieldNames[j])) {
- this->settings->pl->fields[i] = j;
- break;
- }
- }
+ int j = ColumnsPanel_fieldNameToIndex(text);
+ if (j > 0)
+ this->settings->pl->fields[i] = j;
}
this->settings->pl->fields[size] = 0;
}
@@ -83,7 +89,7 @@ HandlerResult ColumnsPanel_eventHandler(Panel* super, int ch) {
case ']':
case '+':
{
- if (selected < size - 2)
+ if (selected < size - 2)
Panel_moveSelectedDown(super);
result = HANDLED;
break;
diff --git a/ColumnsPanel.h b/ColumnsPanel.h
index 8eb8cd6a..2c58c8e7 100644
--- a/ColumnsPanel.h
+++ b/ColumnsPanel.h
@@ -24,6 +24,8 @@ ColumnsPanel* ColumnsPanel_new(Settings* settings, ScreenManager* scr);
void ColumnsPanel_delete(Object* object);
+int ColumnsPanel_fieldNameToIndex(const char* name);
+
void ColumnsPanel_update(Panel* super);
HandlerResult ColumnsPanel_eventHandler(Panel* super, int ch);
diff --git a/String.c b/String.c
index e862bff5..e0b981c5 100644
--- a/String.c
+++ b/String.c
@@ -96,7 +96,7 @@ void String_printPointer(void* p) {
printf("%p", p);
}
-inline int String_eq(char* s1, char* s2) {
+inline int String_eq(const char* s1, const char* s2) {
if (s1 == NULL || s2 == NULL) {
if (s1 == NULL && s2 == NULL)
return 1;
diff --git a/String.h b/String.h
index 3a348c2a..8f0b50b5 100644
--- a/String.h
+++ b/String.h
@@ -39,7 +39,7 @@ void String_printInt(int i);
void String_printPointer(void* p);
-inline int String_eq(char* s1, char* s2);
+inline int String_eq(const char* s1, const char* s2);
char** String_split(char* s, char sep);
diff --git a/htop.c b/htop.c
index 8ce6a798..c5bd6f05 100644
--- a/htop.c
+++ b/htop.c
@@ -46,6 +46,7 @@ void printHelpFlag() {
printf("Released under the GNU GPL.\n\n");
printf("-d DELAY Delay between updates, in tenths of seconds\n\n");
printf("-u USERNAME Show only processes of a given user\n\n");
+ printf("--sort-key COLUMN Sort by this column (use --sort-key help for a column list)\n\n");
printf("Press F1 inside htop for online help.\n");
printf("See the man page for full information.\n\n");
exit(0);
@@ -194,12 +195,25 @@ int main(int argc, char** argv) {
int delay = -1;
bool userOnly = false;
uid_t userId = 0;
+ int sortKey = 0;
if (argc > 0) {
if (String_eq(argv[1], "--help")) {
printHelpFlag();
} else if (String_eq(argv[1], "--version")) {
printVersionFlag();
+ } else if (String_eq(argv[1], "--sort-key")) {
+ if (argc < 2) printHelpFlag();
+ if (String_eq(argv[2], "help")) {
+ for (int j = 1; j < LAST_PROCESSFIELD; j++)
+ printf ("%s\n", Process_fieldNames[j]);
+ exit(0);
+ }
+ sortKey = ColumnsPanel_fieldNameToIndex(argv[2]);
+ if (sortKey == -1) {
+ fprintf(stderr, "Error: invalid column \"%s\".\n", argv[2]);
+ exit(1);
+ }
} else if (String_eq(argv[1], "-d")) {
if (argc < 2) printHelpFlag();
sscanf(argv[2], "%d", &delay);
@@ -237,6 +251,10 @@ int main(int argc, char** argv) {
Header* header = Header_new(pl);
settings = Settings_new(pl, header);
+ if (sortKey > 0) {
+ pl->sortKey = sortKey;
+ pl->treeView = false;
+ }
int headerHeight = Header_calculateHeight(header);
// FIXME: move delay code to settings

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