# HG changeset patch # User ben # Date 1178556384 0 # Node ID ae2a2d5ca64b4455a466625337fefd20dcb1a631 # Parent 2e95dcd49946bedee4a9aef93e3cc481eacadec0 new -menu-keepdir option that allows libmenu file browser to always restart browsing from the last place we were instead of current dir diff -r 2e95dcd49946 -r ae2a2d5ca64b cfg-mplayer.h --- a/cfg-mplayer.h Mon May 07 15:59:53 2007 +0000 +++ b/cfg-mplayer.h Mon May 07 16:46:24 2007 +0000 @@ -70,6 +70,7 @@ #ifdef HAVE_MENU extern int menu_startup; +extern int menu_keepdir; extern int menu_utf8; extern int menu_unicode; #ifdef USE_FRIBIDI @@ -298,6 +299,7 @@ {"menu-root", &menu_root, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL}, {"menu-cfg", &menu_cfg, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL}, {"menu-startup", &menu_startup, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL}, + {"menu-keepdir", &menu_keepdir, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL}, {"menu-utf8", &menu_utf8, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"menu-unicode", &menu_unicode, CONF_TYPE_FLAG, 0, 0, 1, NULL}, #ifdef USE_FRIBIDI diff -r 2e95dcd49946 -r ae2a2d5ca64b libmenu/menu_filesel.c --- a/libmenu/menu_filesel.c Mon May 07 15:59:53 2007 +0000 +++ b/libmenu/menu_filesel.c Mon May 07 16:46:24 2007 +0000 @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -26,6 +27,10 @@ #include "input/input.h" #include "osdep/keycodes.h" +#define MENU_KEEP_PATH "/tmp/mp_current_path" + +int menu_keepdir = 0; + struct list_entry_s { struct list_entry p; int d; @@ -179,6 +184,7 @@ struct dirent *dp; struct stat st; int n; + int path_fp; char* p = NULL; list_entry_t* e; DIR* dirp; @@ -201,6 +207,14 @@ return 0; } + if (menu_keepdir) { + path_fp = open (MENU_KEEP_PATH, O_CREAT | O_WRONLY | O_TRUNC, 0666); + if (path_fp >= 0) { + write (path_fp, mpriv->dir, strlen (mpriv->dir)); + close (path_fp); + } + } + namelist = (char **) malloc(sizeof(char *)); extensions = get_extensions(menu); @@ -370,7 +384,7 @@ } static int open_fs(menu_t* menu, char* args) { - char *path = mpriv->path; + char *path = mpriv->path, *freepath = NULL; int r = 0; char wd[PATH_MAX+1]; args = NULL; // Warning kill @@ -380,6 +394,29 @@ menu->read_key = read_key; menu->close = clos; + if (menu_keepdir) { + if (!path || path[0] == '\0') { + struct stat st; + int path_fp; + + path_fp = open (MENU_KEEP_PATH, O_RDONLY); + if (path_fp >= 0) { + if (!fstat (path_fp, &st) && (st.st_size > 0)) { + path = malloc(st.st_size+1); + if ((read(path_fp, path, st.st_size) == st.st_size) && path[0] != '\0'){ + freepath = path; + path[st.st_size] = '\0'; + } + else { + free(path); + path = NULL; + } + } + close (path_fp); + } + } + } + getcwd(wd,PATH_MAX); if(!path || path[0] == '\0') { int l = strlen(wd) + 2; @@ -398,6 +435,9 @@ } else r = open_dir(menu,path); + if (freepath) + free(freepath); + return r; }