aboutsummaryrefslogtreecommitdiffstats
path: root/command.c
diff options
context:
space:
mode:
authorKalle Wallin <kaw@linux.se>2004-03-19 13:26:18 +0000
committerKalle Wallin <kaw@linux.se>2004-03-19 13:26:18 +0000
commita0592c8cc08b802f86061c88dc6862352b6c3e94 (patch)
treefeda87ba55a404023e62b8d744e2667dccebdc95 /command.c
downloadmpd-a0592c8cc08b802f86061c88dc6862352b6c3e94.tar.gz
mpd-a0592c8cc08b802f86061c88dc6862352b6c3e94.tar.xz
mpd-a0592c8cc08b802f86061c88dc6862352b6c3e94.zip
Imported ncmpc (mpc-ncures).
git-svn-id: https://svn.musicpd.org/ncmpc/trunk@292 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Diffstat (limited to 'command.c')
-rw-r--r--command.c222
1 files changed, 222 insertions, 0 deletions
diff --git a/command.c b/command.c
new file mode 100644
index 000000000..cd2fd5338
--- /dev/null
+++ b/command.c
@@ -0,0 +1,222 @@
+/*
+ * $Id: command.c,v 1.9 2004/03/17 14:59:32 kalle Exp $
+ *
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <glib.h>
+#include <ncurses.h>
+
+#include "config.h"
+#include "command.h"
+
+#undef DEBUG_KEYS
+
+#ifdef DEBUG_KEYS
+#define DK(x) x
+#else
+#define DK(x)
+#endif
+
+#define BS KEY_BACKSPACE
+#define DEL KEY_DC
+#define UP KEY_UP
+#define DWN KEY_DOWN
+#define LEFT KEY_LEFT
+#define RGHT KEY_RIGHT
+#define HOME KEY_HOME
+#define END KEY_END
+#define PGDN KEY_NPAGE
+#define PGUP KEY_PPAGE
+#define TAB 0x09
+#define STAB 0x5A
+#define ESC 0x1B
+#define F1 KEY_F(1)
+#define F2 KEY_F(2)
+#define F3 KEY_F(3)
+#define F4 KEY_F(4)
+#define F5 KEY_F(5)
+#define F6 KEY_F(6)
+
+static command_definition_t cmds[] =
+{
+ { { 13, 0, 0 }, CMD_PLAY, "Play/Enter directory" },
+ { { 'p', 0, 0 }, CMD_PAUSE, "Pause" },
+ { { BS, ESC, 0 }, CMD_STOP, "Stop" },
+ { { 'n', 0, 0 }, CMD_TRACK_NEXT, "Next song" },
+ { { 'b', 0, 0 }, CMD_TRACK_PREVIOUS, "Previous song" },
+
+ { { '+', RGHT, 0 }, CMD_VOLUME_UP, "Increase volume" },
+ { { '-', LEFT, 0 }, CMD_VOLUME_DOWN, "Decrease volume" },
+
+ { { ' ', 0, 0 }, CMD_SELECT, "Select/deselect song in playlist" },
+ { { DEL, 0, 0 }, CMD_DELETE, "Delete song from playlist" },
+ { { 's', 0, 0 }, CMD_SHUFFLE, "Shuffle playlist" },
+ { { 'c', 0, 0 }, CMD_CLEAR, "Clear playlist" },
+ { { 'r', 0, 0 }, CMD_REPEAT, "Toggle repeat mode" },
+ { { 'z', 0, 0 }, CMD_RANDOM, "Toggle random mode" },
+
+ { { UP, 0, 0 }, CMD_LIST_PREVIOUS, "Move: Up" },
+ { { DWN, 0, 0 }, CMD_LIST_NEXT, "Move: Down" },
+ { { HOME, 0, 0 }, CMD_LIST_FIRST, "Move: Home" },
+ { { END, 0, 0 }, CMD_LIST_LAST, "Move: End" },
+ { { PGUP, 0, 0 }, CMD_LIST_PREVIOUS_PAGE, "Move: Page Up" },
+ { { PGDN, 0, 0 }, CMD_LIST_NEXT_PAGE, "Move: Page Down" },
+
+ { { TAB, 0, 0 }, CMD_SCREEN_NEXT, "Next screen" },
+ { { STAB, 0, 0 }, CMD_SCREEN_PREVIOUS, "Previous screen" },
+ { { F1, '1', 'h' }, CMD_SCREEN_HELP, "Help screen" },
+ { { F2, '2', 0 }, CMD_SCREEN_PLAY, "Playlist screen" },
+ { { F3, '3', 0 }, CMD_SCREEN_FILE, "Browse screen" },
+ // { { F4, '4', 0 }, CMD_SCREEN_SEARCH, "Search screen" },
+
+ { { 'q', 0, 0 }, CMD_QUIT, "Quit " PACKAGE },
+
+ { { -1, -1, -1 }, CMD_NONE, NULL }
+};
+
+char *
+key2str(int key)
+{
+ static char buf[2];
+
+ buf[0] = 0;
+ switch(key)
+ {
+ case ' ':
+ return "Space";
+ case 13:
+ return "Enter";
+ case BS:
+ return "Backspace";
+ case DEL:
+ return "Delete";
+ case UP:
+ return "Up";
+ case DWN:
+ return "Down";
+ case LEFT:
+ return "Left";
+ case RGHT:
+ return "Right";
+ case HOME:
+ return "Home";
+ case END:
+ return "End";
+ case PGDN:
+ return "PageDown";
+ case PGUP:
+ return "PageUp";
+ case TAB:
+ return "Tab";
+ case STAB:
+ return "Shift+Tab";
+ case ESC:
+ return "Esc";
+ case F1:
+ return "F1";
+ case F2:
+ return "F2";
+ case F3:
+ return "F3";
+ case F4:
+ return "F4";
+ case F5:
+ return "F5";
+ case F6:
+ return "F6";
+ default:
+ snprintf(buf, 2, "%c", key);
+ }
+ return buf;
+}
+
+void
+command_dump_keys(void)
+{
+ int i;
+
+ i=0;
+ while( cmds[i].description )
+ {
+ if( cmds[i].command != CMD_NONE )
+ {
+ int j;
+ char keystr[80];
+
+ strcpy(keystr, key2str(cmds[i].keys[0]));
+ j=1;
+ while( j<3 && cmds[i].keys[j]>0 )
+ {
+ strcat(keystr, " ");
+ strcat(keystr, key2str(cmds[i].keys[j]));
+ j++;
+ }
+ printf(" %20s : %s\n", keystr, cmds[i].description);
+
+ }
+ i++;
+ }
+}
+
+char *
+command_get_keys(command_t command)
+{
+ int i;
+
+ i=0;
+ while( cmds[i].description )
+ {
+ if( cmds[i].command == command )
+ {
+ int j;
+ static char keystr[80];
+
+ strcpy(keystr, key2str(cmds[i].keys[0]));
+ j=1;
+ while( j<3 && cmds[i].keys[j]>0 )
+ {
+ strcat(keystr, " ");
+ strcat(keystr, key2str(cmds[i].keys[j]));
+ j++;
+ }
+ return keystr;
+ }
+ i++;
+ }
+ return NULL;
+}
+
+command_t
+get_keyboard_command(void)
+{
+ int i;
+ int key;
+
+ key = wgetch(stdscr);
+
+ if( key==ERR )
+ return CMD_NONE;
+
+ DK(fprintf(stderr, "key = 0x%02X\t", key));
+
+ if( isalpha(key) )
+ key=tolower(key);
+
+ i=0;
+ while( cmds[i].description )
+ {
+ if( cmds[i].keys[0] == key ||
+ cmds[i].keys[1] == key ||
+ cmds[i].keys[2] == key )
+ {
+ DK(fprintf(stderr, "Match - %s\n", cmds[i].description));
+ return cmds[i].command;
+ }
+ i++;
+ }
+ DK(fprintf(stderr, "NO MATCH\n"));
+ return CMD_NONE;
+}