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: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
@@ -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)
|
|||||||
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,
|
|||||||
}
|
}
|
||||||
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,
|
|||||||
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);
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
"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);
|
||||||
|
@@ -1,6 +1,5 @@
|
|||||||
#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)
|
|||||||
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 @@
|
|||||||
#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)
|
|||||||
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)
|
||||||
|
Reference in New Issue
Block a user