perf ui browser: Add routines to compactly specify exit keys

This makes the usual idiom for specifying a series of key codes to exit
ui_browser__run() for specialized processing (search, annotate, etc) or
plain exiting the browser more compact.

It also abstracts away some more libnewt operations. At some point we'll
also replace NEWT_KEY_foo with something that can be mapped to NEWT or,
say, gtk.

Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
LKML-Reference: <new-submission>
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent b50e003d
...@@ -11,8 +11,6 @@ ...@@ -11,8 +11,6 @@
#include "../util.h" #include "../util.h"
#include <stdio.h> #include <stdio.h>
newtComponent newt_form__new(void);
static int ui_browser__percent_color(double percent, bool current) static int ui_browser__percent_color(double percent, bool current)
{ {
if (current) if (current)
...@@ -147,10 +145,28 @@ void ui_browser__reset_index(struct ui_browser *self) ...@@ -147,10 +145,28 @@ void ui_browser__reset_index(struct ui_browser *self)
self->seek(self, 0, SEEK_SET); self->seek(self, 0, SEEK_SET);
} }
void ui_browser__add_exit_key(struct ui_browser *self, int key)
{
newtFormAddHotKey(self->form, key);
}
void ui_browser__add_exit_keys(struct ui_browser *self, int keys[])
{
int i = 0;
while (keys[i] && i < 64) {
ui_browser__add_exit_key(self, keys[i]);
++i;
}
}
int ui_browser__show(struct ui_browser *self, const char *title, int ui_browser__show(struct ui_browser *self, const char *title,
const char *helpline, ...) const char *helpline, ...)
{ {
va_list ap; va_list ap;
int keys[] = { NEWT_KEY_UP, NEWT_KEY_DOWN, NEWT_KEY_PGUP,
NEWT_KEY_PGDN, NEWT_KEY_HOME, NEWT_KEY_END, ' ',
NEWT_KEY_LEFT, NEWT_KEY_ESCAPE, 'q', CTRL('c'), 0 };
if (self->form != NULL) { if (self->form != NULL) {
newtFormDestroy(self->form); newtFormDestroy(self->form);
...@@ -158,7 +174,7 @@ int ui_browser__show(struct ui_browser *self, const char *title, ...@@ -158,7 +174,7 @@ int ui_browser__show(struct ui_browser *self, const char *title,
} }
ui_browser__refresh_dimensions(self); ui_browser__refresh_dimensions(self);
newtCenteredWindow(self->width, self->height, title); newtCenteredWindow(self->width, self->height, title);
self->form = newt_form__new(); self->form = newtForm(NULL, NULL, 0);
if (self->form == NULL) if (self->form == NULL)
return -1; return -1;
...@@ -168,13 +184,7 @@ int ui_browser__show(struct ui_browser *self, const char *title, ...@@ -168,13 +184,7 @@ int ui_browser__show(struct ui_browser *self, const char *title,
if (self->sb == NULL) if (self->sb == NULL)
return -1; return -1;
newtFormAddHotKey(self->form, NEWT_KEY_UP); ui_browser__add_exit_keys(self, keys);
newtFormAddHotKey(self->form, NEWT_KEY_DOWN);
newtFormAddHotKey(self->form, NEWT_KEY_PGUP);
newtFormAddHotKey(self->form, NEWT_KEY_PGDN);
newtFormAddHotKey(self->form, NEWT_KEY_HOME);
newtFormAddHotKey(self->form, NEWT_KEY_END);
newtFormAddHotKey(self->form, ' ');
newtFormAddComponent(self->form, self->sb); newtFormAddComponent(self->form, self->sb);
va_start(ap, helpline); va_start(ap, helpline);
......
...@@ -33,6 +33,8 @@ void ui_browser__refresh_dimensions(struct ui_browser *self); ...@@ -33,6 +33,8 @@ void ui_browser__refresh_dimensions(struct ui_browser *self);
void ui_browser__reset_index(struct ui_browser *self); void ui_browser__reset_index(struct ui_browser *self);
void ui_browser__gotorc(struct ui_browser *self, int y, int x); void ui_browser__gotorc(struct ui_browser *self, int y, int x);
void ui_browser__add_exit_key(struct ui_browser *self, int key);
void ui_browser__add_exit_keys(struct ui_browser *self, int keys[]);
int ui_browser__show(struct ui_browser *self, const char *title, int ui_browser__show(struct ui_browser *self, const char *title,
const char *helpline, ...); const char *helpline, ...);
void ui_browser__hide(struct ui_browser *self); void ui_browser__hide(struct ui_browser *self);
......
...@@ -142,14 +142,16 @@ static int annotate_browser__run(struct annotate_browser *self) ...@@ -142,14 +142,16 @@ static int annotate_browser__run(struct annotate_browser *self)
if (ui_browser__show(&self->b, he->ms.sym->name, if (ui_browser__show(&self->b, he->ms.sym->name,
"<-, -> or ESC: exit, TAB/shift+TAB: cycle thru samples") < 0) "<-, -> or ESC: exit, TAB/shift+TAB: cycle thru samples") < 0)
return -1; return -1;
/*
newtFormAddHotKey(self->b.form, NEWT_KEY_LEFT); * To allow builtin-annotate to cycle thru multiple symbols by
newtFormAddHotKey(self->b.form, NEWT_KEY_RIGHT); * examining the exit key for this function.
*/
ui_browser__add_exit_key(&self->b, NEWT_KEY_RIGHT);
nd = self->curr_hot; nd = self->curr_hot;
if (nd) { if (nd) {
newtFormAddHotKey(self->b.form, NEWT_KEY_TAB); int tabs[] = { NEWT_KEY_TAB, NEWT_KEY_UNTAB, 0 };
newtFormAddHotKey(self->b.form, NEWT_KEY_UNTAB); ui_browser__add_exit_keys(&self->b, tabs);
} }
while (1) { while (1) {
......
...@@ -198,6 +198,8 @@ static bool hist_browser__toggle_fold(struct hist_browser *self) ...@@ -198,6 +198,8 @@ static bool hist_browser__toggle_fold(struct hist_browser *self)
static int hist_browser__run(struct hist_browser *self, const char *title) static int hist_browser__run(struct hist_browser *self, const char *title)
{ {
int key; int key;
int exit_keys[] = { 'a', '?', 'h', 'd', 'D', 't', NEWT_KEY_ENTER,
NEWT_KEY_RIGHT, NEWT_KEY_LEFT, 0, };
char str[256], unit; char str[256], unit;
unsigned long nr_events = self->hists->stats.nr_events[PERF_RECORD_SAMPLE]; unsigned long nr_events = self->hists->stats.nr_events[PERF_RECORD_SAMPLE];
...@@ -215,16 +217,7 @@ static int hist_browser__run(struct hist_browser *self, const char *title) ...@@ -215,16 +217,7 @@ static int hist_browser__run(struct hist_browser *self, const char *title)
"Press '?' for help on key bindings") < 0) "Press '?' for help on key bindings") < 0)
return -1; return -1;
newtFormAddHotKey(self->b.form, 'a'); ui_browser__add_exit_keys(&self->b, exit_keys);
newtFormAddHotKey(self->b.form, '?');
newtFormAddHotKey(self->b.form, 'h');
newtFormAddHotKey(self->b.form, 'd');
newtFormAddHotKey(self->b.form, 'D');
newtFormAddHotKey(self->b.form, 't');
newtFormAddHotKey(self->b.form, NEWT_KEY_LEFT);
newtFormAddHotKey(self->b.form, NEWT_KEY_RIGHT);
newtFormAddHotKey(self->b.form, NEWT_KEY_ENTER);
while (1) { while (1) {
key = ui_browser__run(&self->b); key = ui_browser__run(&self->b);
......
#include "../libslang.h" #include "../libslang.h"
#include <elf.h> #include <elf.h>
#include <newt.h>
#include <sys/ttydefaults.h> #include <sys/ttydefaults.h>
#include <ctype.h> #include <ctype.h>
#include <string.h> #include <string.h>
...@@ -106,13 +105,8 @@ static int map_browser__run(struct map_browser *self) ...@@ -106,13 +105,8 @@ static int map_browser__run(struct map_browser *self)
verbose ? "" : "restart with -v to use") < 0) verbose ? "" : "restart with -v to use") < 0)
return -1; return -1;
newtFormAddHotKey(self->b.form, NEWT_KEY_LEFT);
newtFormAddHotKey(self->b.form, NEWT_KEY_ESCAPE);
newtFormAddHotKey(self->b.form, 'Q');
newtFormAddHotKey(self->b.form, 'q');
newtFormAddHotKey(self->b.form, CTRL('c'));
if (verbose) if (verbose)
newtFormAddHotKey(self->b.form, '/'); ui_browser__add_exit_key(&self->b, '/');
while (1) { while (1) {
key = ui_browser__run(&self->b); key = ui_browser__run(&self->b);
......
...@@ -11,8 +11,6 @@ ...@@ -11,8 +11,6 @@
#include "helpline.h" #include "helpline.h"
#include "util.h" #include "util.h"
newtComponent newt_form__new(void);
static void newt_form__set_exit_keys(newtComponent self) static void newt_form__set_exit_keys(newtComponent self)
{ {
newtFormAddHotKey(self, NEWT_KEY_LEFT); newtFormAddHotKey(self, NEWT_KEY_LEFT);
...@@ -22,7 +20,7 @@ static void newt_form__set_exit_keys(newtComponent self) ...@@ -22,7 +20,7 @@ static void newt_form__set_exit_keys(newtComponent self)
newtFormAddHotKey(self, CTRL('c')); newtFormAddHotKey(self, CTRL('c'));
} }
newtComponent newt_form__new(void) static newtComponent newt_form__new(void)
{ {
newtComponent self = newtForm(NULL, NULL, 0); newtComponent self = newtForm(NULL, NULL, 0);
if (self) if (self)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment