aboutsummaryrefslogtreecommitdiffhomepage
path: root/ide
diff options
context:
space:
mode:
authorGravatar Pierre-Marie Pédrot <pierre-marie.pedrot@inria.fr>2015-02-15 21:02:33 +0100
committerGravatar Pierre-Marie Pédrot <pierre-marie.pedrot@inria.fr>2015-02-15 21:15:26 +0100
commit6b5bc2ceb986913bf28a08dadb1e4ef01a595a3b (patch)
treee28dd5aaf812b28f0043577e0ce3cbaf00bfc53a /ide
parent1d39965a694698c3df238fc424203c6b77b067e7 (diff)
CoqIDE now remembers the path of the last opened project.
Fixes bug #2762.
Diffstat (limited to 'ide')
-rw-r--r--ide/ideutils.ml14
-rw-r--r--ide/preferences.ml4
-rw-r--r--ide/preferences.mli1
3 files changed, 13 insertions, 6 deletions
diff --git a/ide/ideutils.ml b/ide/ideutils.ml
index 84ef8f40d..473b8dc82 100644
--- a/ide/ideutils.ml
+++ b/ide/ideutils.ml
@@ -132,8 +132,6 @@ let mktimer () =
with Glib.GError _ -> ());
timer := None) }
-let last_dir = ref ""
-
let filter_all_files () = GFile.filter
~name:"All"
~patterns:["*"] ()
@@ -142,6 +140,10 @@ let filter_coq_files () = GFile.filter
~name:"Coq source code"
~patterns:[ "*.v"] ()
+let current_dir () = match current.project_path with
+| None -> ""
+| Some dir -> dir
+
let select_file_for_open ~title () =
let file = ref None in
let file_chooser =
@@ -152,14 +154,14 @@ let select_file_for_open ~title () =
file_chooser#add_filter (filter_coq_files ());
file_chooser#add_filter (filter_all_files ());
file_chooser#set_default_response `OPEN;
- ignore (file_chooser#set_current_folder !last_dir);
+ ignore (file_chooser#set_current_folder (current_dir ()));
begin match file_chooser#run () with
| `OPEN ->
begin
file := file_chooser#filename;
match !file with
| None -> ()
- | Some s -> last_dir := Filename.dirname s;
+ | Some s -> current.project_path <- file_chooser#current_folder
end
| `DELETE_EVENT | `CANCEL -> ()
end ;
@@ -178,7 +180,7 @@ let select_file_for_save ~title ?filename () =
file_chooser#set_do_overwrite_confirmation true;
file_chooser#set_default_response `SAVE;
let dir,filename = match filename with
- |None -> !last_dir, ""
+ |None -> current_dir (), ""
|Some f -> Filename.dirname f, Filename.basename f
in
ignore (file_chooser#set_current_folder dir);
@@ -189,7 +191,7 @@ let select_file_for_save ~title ?filename () =
file := file_chooser#filename;
match !file with
None -> ()
- | Some s -> last_dir := Filename.dirname s;
+ | Some s -> current.project_path <- file_chooser#current_folder
end
| `DELETE_EVENT | `CANCEL -> ()
end ;
diff --git a/ide/preferences.ml b/ide/preferences.ml
index 9a4fde2f6..d32920ed3 100644
--- a/ide/preferences.ml
+++ b/ide/preferences.ml
@@ -105,6 +105,7 @@ type pref =
mutable read_project : project_behavior;
mutable project_file_name : string;
+ mutable project_path : string option;
mutable encoding : inputenc;
@@ -182,6 +183,7 @@ let current = {
read_project = Ignore_args;
project_file_name = "_CoqProject";
+ project_path = None;
encoding = if Sys.os_type = "Win32" then Eutf8 else Elocale;
@@ -265,6 +267,7 @@ let save_pref () =
add "project_options" [string_of_project_behavior p.read_project] ++
add "project_file_name" [p.project_file_name] ++
+ add "project_path" (match p.project_path with None -> [] | Some s -> [s]) ++
add "encoding" [string_of_inputenc p.encoding] ++
@@ -342,6 +345,7 @@ let load_pref () =
set_hd "project_options"
(fun v -> np.read_project <- (project_behavior_of_string v));
set_hd "project_file_name" (fun v -> np.project_file_name <- v);
+ set_option "project_path" (fun v -> np.project_path <- v);
set "automatic_tactics"
(fun v -> np.automatic_tactics <- v);
set_hd "cmd_print" (fun v -> np.cmd_print <- v);
diff --git a/ide/preferences.mli b/ide/preferences.mli
index ab12e4c7b..1e4f152c2 100644
--- a/ide/preferences.mli
+++ b/ide/preferences.mli
@@ -32,6 +32,7 @@ type pref =
mutable read_project : project_behavior;
mutable project_file_name : string;
+ mutable project_path : string option;
mutable encoding : inputenc;