aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/command.c4
-rw-r--r--src/command.h2
-rw-r--r--src/screen_file.c35
-rw-r--r--src/screen_help.c4
4 files changed, 36 insertions, 9 deletions
diff --git a/src/command.c b/src/command.c
index 2f0ece1d9..3210f39d9 100644
--- a/src/command.c
+++ b/src/command.c
@@ -137,6 +137,10 @@ static command_definition_t cmds[] =
{ { 'a', 0, 0 }, 0, CMD_ADD, "add",
N_("Add url/file to playlist") },
+ { { '!', 0, 0 }, 0, CMD_GO_ROOT_DIRECTORY, "go-root-directory",
+ N_("Go to root directory") },
+ { { '"', 0, 0 }, 0, CMD_GO_PARENT_DIRECTORY, "go-parent-directory",
+ N_("Go to parent directory") },
/* lists */
{ { 11, 0, 0 }, 0, CMD_LIST_MOVE_UP, "move-up",
diff --git a/src/command.h b/src/command.h
index 86db34ce9..745b5283b 100644
--- a/src/command.h
+++ b/src/command.h
@@ -55,6 +55,8 @@ typedef enum
CMD_SCREEN_LYRICS,
CMD_LYRICS_UPDATE,
CMD_INTERRUPT,
+ CMD_GO_ROOT_DIRECTORY,
+ CMD_GO_PARENT_DIRECTORY,
CMD_QUIT
} command_t;
diff --git a/src/screen_file.c b/src/screen_file.c
index b2d320f0b..4a4bdf70c 100644
--- a/src/screen_file.c
+++ b/src/screen_file.c
@@ -207,20 +207,33 @@ browse_lw_callback(int index, int *highlight, void *data)
/* chdir */
static int
-change_directory(screen_t *screen, mpdclient_t *c, filelist_entry_t *entry)
+change_directory(screen_t *screen, mpdclient_t *c, filelist_entry_t *entry, char *new_path)
{
- mpd_InfoEntity *entity = entry->entity;
+ mpd_InfoEntity *entity = NULL;
gchar *path = NULL;
+ if( entry!=NULL )
+ entity = entry->entity;
+ else if( new_path==NULL )
+ return -1;
+
if( entity==NULL )
{
- /* return to parent */
- char *parent = g_path_get_dirname(filelist->path);
- if( strcmp(parent, ".") == 0 )
+ if( entry || 0==strcmp(new_path, "..") )
+ {
+ /* return to parent */
+ char *parent = g_path_get_dirname(filelist->path);
+ if( strcmp(parent, ".") == 0 )
+ {
+ parent[0] = '\0';
+ }
+ path = g_strdup(parent);
+ }
+ else
{
- parent[0] = '\0';
+ /* entry==NULL, then new_path ("" is root) */
+ path = g_strdup(new_path);
}
- path = g_strdup(parent);
list_window_reset(lw);
/* restore previous list window state */
list_window_pop_state(lw_state,lw);
@@ -366,7 +379,7 @@ browse_handle_enter(screen_t *screen,
entity = entry->entity;
if( entity==NULL || entity->type==MPD_INFO_ENTITY_TYPE_DIRECTORY )
- return change_directory(screen, c, entry);
+ return change_directory(screen, c, entry, NULL);
else if( entity->type==MPD_INFO_ENTITY_TYPE_PLAYLISTFILE )
return load_playlist(screen, c, entry);
else if( entity->type==MPD_INFO_ENTITY_TYPE_SONG )
@@ -635,6 +648,12 @@ browse_cmd(screen_t *screen, mpdclient_t *c, command_t cmd)
case CMD_PLAY:
browse_handle_enter(screen, c, lw, filelist);
return 1;
+ case CMD_GO_ROOT_DIRECTORY:
+ return change_directory(screen, c, NULL, "");
+ break;
+ case CMD_GO_PARENT_DIRECTORY:
+ return change_directory(screen, c, NULL, "..");
+ break;
case CMD_SELECT:
if( browse_handle_select(screen, c, lw, filelist) == 0 )
{
diff --git a/src/screen_help.c b/src/screen_help.c
index 31a125a7f..6825e567b 100644
--- a/src/screen_help.c
+++ b/src/screen_help.c
@@ -98,7 +98,7 @@ static help_text_row_t help_text[] =
{ 0, CMD_PLAY, N_("Play") },
{ 0, CMD_DELETE, NULL },
{ 0, CMD_CLEAR, NULL },
- { 0, CMD_LIST_MOVE_UP, N_("Move song up") },
+ { 1, CMD_LIST_MOVE_UP, N_("Move song up") },
{ 0, CMD_LIST_MOVE_DOWN, N_("Move song down") },
{ 0, CMD_ADD, NULL },
{ 0, CMD_SAVE_PLAYLIST, NULL },
@@ -113,6 +113,8 @@ static help_text_row_t help_text[] =
{ 0, CMD_SELECT, NULL },
{ 0, CMD_SAVE_PLAYLIST, NULL },
{ 0, CMD_DELETE, N_("Delete playlist") },
+ { 0, CMD_GO_PARENT_DIRECTORY, NULL },
+ { 0, CMD_GO_ROOT_DIRECTORY, NULL },
{ 0, CMD_SCREEN_UPDATE, NULL },
#ifdef ENABLE_SEARCH_SCREEN