ajwillia-ms pushed a commit to branch master.

http://git.enlightenment.org/tools/edi.git/commit/?id=14498afdaa0c4f4d7fa5b697357b39ce75f39fb6

commit 14498afdaa0c4f4d7fa5b697357b39ce75f39fb6
Author: Andy Williams <[email protected]>
Date:   Mon Jan 2 21:19:55 2017 +0000

    config: Store relative paths for open files
    
    Avoid problems with moving project
    or having multiple copies of the same codebase!
---
 src/bin/edi_config.c              | 11 ++++++++++-
 src/bin/edi_main.c                | 11 +++++++++--
 src/lib/edi_build_provider_make.c |  4 ++--
 src/lib/edi_path.c                |  2 +-
 src/lib/edi_path.h                |  2 +-
 5 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/src/bin/edi_config.c b/src/bin/edi_config.c
index b183f72..3ba0342 100644
--- a/src/bin/edi_config.c
+++ b/src/bin/edi_config.c
@@ -508,7 +508,13 @@ _edi_project_config_tab_add(const char *path, Eina_Bool 
windowed)
      }
 
    tab = malloc(sizeof(*tab));
-   tab->path = eina_stringshare_add(path);
+
+   // let's keep paths relative
+   if (!strncmp(path, edi_project_get(), strlen(edi_project_get())))
+     tab->path = eina_stringshare_add(path + strlen(edi_project_get()) + 1);
+   else
+     tab->path = eina_stringshare_add(path);
+
    tab->windowed = windowed;
    _edi_project_config->tabs = eina_list_append(_edi_project_config->tabs, 
tab);
    _edi_project_config_save_no_notify();
@@ -524,6 +530,9 @@ _edi_project_config_tab_remove(const char *path)
      {
         if (!strncmp(tab->path, path, strlen(tab->path)))
           break;
+        if (!strncmp(path, edi_project_get(), strlen(edi_project_get())) &&
+            !strncmp(path + strlen(edi_project_get()) + 1, tab->path, 
strlen(tab->path)))
+          break;
      }
 
    _edi_project_config->tabs = eina_list_remove(_edi_project_config->tabs, 
tab);
diff --git a/src/bin/edi_main.c b/src/bin/edi_main.c
index 23f2fd3..ca44e8b 100644
--- a/src/bin/edi_main.c
+++ b/src/bin/edi_main.c
@@ -1004,15 +1004,22 @@ _edi_open_tabs()
 {
    Edi_Project_Config_Tab *tab;
    Eina_List *tabs, *list;
+   char *path;
 
    tabs = _edi_project_config->tabs;
    _edi_project_config->tabs = NULL;
    EINA_LIST_FOREACH(tabs, list, tab)
      {
+        if (!strncmp(tab->path, edi_project_get(), strlen(edi_project_get())))
+          path = strdup(tab->path);
+        else
+          path = edi_path_append(edi_project_get(), tab->path);
+
         if (tab->windowed)
-          edi_mainview_open_window_path(tab->path);
+          edi_mainview_open_window_path(eina_stringshare_add(path));
         else
-          edi_mainview_open_path(tab->path);
+          edi_mainview_open_path(eina_stringshare_add(path));
+        free(path);
      }
 
    EINA_LIST_FREE(tabs, tab)
diff --git a/src/lib/edi_build_provider_make.c 
b/src/lib/edi_build_provider_make.c
index 2c2e83a..9812bab 100644
--- a/src/lib/edi_build_provider_make.c
+++ b/src/lib/edi_build_provider_make.c
@@ -13,13 +13,13 @@
 static Eina_Bool
 _relative_path_exists(const char *base, const char *relative)
 {
-   const char *path;
+   char *path;
    Eina_Bool ret;
 
    path = edi_path_append(base, relative);
    ret = ecore_file_exists(path);
 
-   free((void *)path);
+   free(path);
    return ret;
 }
 
diff --git a/src/lib/edi_path.c b/src/lib/edi_path.c
index 6e661f1..e0a3033 100644
--- a/src/lib/edi_path.c
+++ b/src/lib/edi_path.c
@@ -43,7 +43,7 @@ edi_path_options_create(const char *input)
    return ret;
 }
 
-EAPI const char *
+EAPI char *
 edi_path_append(const char *path, const char *file)
 {
    char *concat;
diff --git a/src/lib/edi_path.h b/src/lib/edi_path.h
index 21f1329..d82e416 100644
--- a/src/lib/edi_path.h
+++ b/src/lib/edi_path.h
@@ -49,7 +49,7 @@ EAPI Edi_Path_Options *edi_path_options_create(const char 
*input);
  * @return a newly allocated string that merges the items to a path using the
  *   correct separator for the current platform.
  */
-EAPI const char *edi_path_append(const char *path, const char *file);
+EAPI char *edi_path_append(const char *path, const char *file);
 
 /**
  * @}

-- 


Reply via email to