[Sciviews-commits] r193 - in komodo/SciViews-K: . content/js content/js/tools locale/en-GB locale/fr-FR
noreply at r-forge.r-project.org
noreply at r-forge.r-project.org
Sun Sep 20 00:04:12 CEST 2009
Author: phgrosjean
Date: 2009-09-20 00:04:11 +0200 (Sun, 20 Sep 2009)
New Revision: 193
Modified:
komodo/SciViews-K/content/js/misc.js
komodo/SciViews-K/content/js/prefs.js
komodo/SciViews-K/content/js/r.js
komodo/SciViews-K/content/js/tools/file.js
komodo/SciViews-K/locale/en-GB/main.properties
komodo/SciViews-K/locale/fr-FR/main.properties
komodo/SciViews-K/sciviewsk-0.8.1-ko.xpi
Log:
Management of R session files on disk
Modified: komodo/SciViews-K/content/js/misc.js
===================================================================
--- komodo/SciViews-K/content/js/misc.js 2009-09-19 14:28:26 UTC (rev 192)
+++ komodo/SciViews-K/content/js/misc.js 2009-09-19 22:04:11 UTC (rev 193)
@@ -3,22 +3,176 @@
// Copyright (c) 2008-2009, Ph. Grosjean (phgrosjean at sciviews.org)
// License: MPL 1.1/GPL 2.0/LGPL 2.1
////////////////////////////////////////////////////////////////////////////////
-// sv.misc.closeAllOthers(); // Close all buffer except current one
-// sv.misc.colorPicker(); // Invoke a color picker dialog box
-// sv.misc.moveLineDown(); // Move current line down
-// sv.misc.moveLineUp(); // Move current line up
-// sv.misc.searchBySel(); // Search next using current selection
-// sv.misc.showConfig(); // Show Komodo configuration page
-// sv.misc.swapQuotes(); // Swap single and double quotes in selection
-// sv.misc.pathToClipboard(); // Copy file path to clipboard
-// sv.misc.unixPathToClipboard(); // Copy file path in UNIX format to clipboard
-// sv.misc.timeStamp(); // Stamp text with current date/time
+// sv.misc.sessionData(data); // Create or open a .csv dataset from session
+// sv.misc.sessionScript(script); // Create or open a .R script from session
+// sv.misc.sessionReport(rep); // Create or open a .odt report from session
+// sv.misc.closeAllOthers(); // Close all buffer except current one
+// sv.misc.colorPicker(); // Invoke a color picker dialog box
+// sv.misc.moveLineDown(); // Move current line down
+// sv.misc.moveLineUp(); // Move current line up
+// sv.misc.searchBySel(); // Search next using current selection
+// sv.misc.showConfig(); // Show Komodo configuration page
+// sv.misc.swapQuotes(); // Swap single and double quotes in selection
+// sv.misc.pathToClipboard(); // Copy file path to clipboard
+// sv.misc.unixPathToClipboard(); // Copy UNIX file path to clipboard
+// sv.misc.timeStamp(); // Stamp text with current date/time
////////////////////////////////////////////////////////////////////////////////
// Define the 'sv.misc' namespace
if (typeof(sv.misc) == 'undefined')
sv.misc = {};
+// sv.misc.sessionData(name); // Create or open a .csv dataset from session
+sv.misc.sessionData = function (data) {
+ if (typeof(data) == "undefined") {
+ data = ko.dialogs.prompt(
+ "Open or create a dataset in .csv format in the data session directory...",
+ "Dataset name:", "Dataset", "Select a dataset", "datafile");
+ }
+ if (data != null & data != "") {
+ var dataDir = sv.prefs.getString("sciviews.data.localdir", "~");
+ var file = Components.classes["@mozilla.org/file/local;1"]
+ .createInstance(Components.interfaces.nsILocalFile);
+ file.initWithPath(dataDir);
+ file.append(data + ".csv");
+ if (file.exists() == false) {
+ file.create(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 438);
+ // Create a minimal content in this file
+ var outputStream = Components.
+ classes["@mozilla.org/network/file-output-stream;1"]
+ .createInstance( Components.interfaces.nsIFileOutputStream );
+ /* Open flags
+ #define PR_RDONLY 0x01
+ #define PR_WRONLY 0x02
+ #define PR_RDWR 0x04
+ #define PR_CREATE_FILE 0x08
+ #define PR_APPEND 0x10
+ #define PR_TRUNCATE 0x20
+ #define PR_SYNC 0x40
+ #define PR_EXCL 0x80
+ */
+ /*
+ ** File modes ....
+ **
+ ** CAVEAT: 'mode' is currently only applicable on UNIX platforms.
+ ** The 'mode' argument may be ignored by PR_Open on other platforms.
+ **
+ ** 00400 Read by owner.
+ ** 00200 Write by owner.
+ ** 00100 Execute (search if a directory) by owner.
+ ** 00040 Read by group.
+ ** 00020 Write by group.
+ ** 00010 Execute by group.
+ ** 00004 Read by others.
+ ** 00002 Write by others
+ ** 00001 Execute by others.
+ **
+ */
+ outputStream.init(file, 0x04 | 0x08 | 0x20, 438, 0);
+ var sep = sv.prefs.getString("r.csv.sep", "\t");
+ var content = '"var1"' + sep + '"var2"\n';
+ var result = outputStream.write(content, content.length);
+ outputStream.close();
+ }
+ try {
+ file.launch();
+ } catch(e) { // On Linux, this does not work...
+ // First try nautilus, and then, try konqueror
+ try {
+ ko.run.runEncodedCommand(window, 'gnome-open "' +
+ file.path + '" & ');
+ } catch(e) {
+ ko.run.runEncodedCommand(window, 'kfmclient exec "' +
+ file.path + '" & ');
+ }
+ }
+ }
+ // Make sure lists of session files are refreshed
+ sv.r.refreshSession();
+}
+
+// sv.misc.sessionScript(name); // Create or open a .R script from session
+sv.misc.sessionScript = function (script) {
+ if (typeof(script) == "undefined") {
+ script = ko.dialogs.prompt(
+ "Open or create a R script in session directory...",
+ "Script name:", "Script", "Select a script", "scriptfile");
+ }
+ if (script != null & script != "") {
+ var scriptsDir = sv.prefs.getString("sciviews.scripts.localdir",
+ "~/Scripts");
+ var file = Components.classes["@mozilla.org/file/local;1"]
+ .createInstance(Components.interfaces.nsILocalFile);
+ file.initWithPath(scriptsDir);
+ file.append(script + ".R");
+ if (file.exists() == false) {
+ file.create(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 438);
+ }
+ ko.open.URI(file.path);
+ }
+ // Make sure lists of session files are refreshed
+ sv.r.refreshSession();
+}
+
+// sv.misc.sessionReport(name); // Create or open a .odt report from session
+sv.misc.sessionReport = function (rep) {
+ if (typeof(rep) == "undefined") {
+ rep = ko.dialogs.prompt(
+ "Open or create an .odt report in session directory...",
+ "Report name:", "Report", "Select a report", "reportfile");
+ }
+ if (rep != null & rep != "") {
+ var reportsDir = sv.prefs.getString("sciviews.reports.localdir",
+ "~/Reports");
+ var file = Components.classes["@mozilla.org/file/local;1"]
+ .createInstance(Components.interfaces.nsILocalFile);
+ file.initWithPath(reportsDir);
+ file.append(rep + ".odt");
+ if (file.exists() == false) {
+ // Copy the report template from SciViews-K templates
+ var tpl = ko.interpolate.
+ interpolateStrings("%(path:hostUserDataDir)");
+ var os = Components.classes['@activestate.com/koOs;1'].
+ getService(Components.interfaces.koIOs);
+ if (os.sep == "/") {
+ tpl += "/XRE/extensions/sciviewsk at sciviews.org/templates/Report.odt";
+ } else {
+ // We should be under Windows
+ tpl += "\\XRE\\extensions\\sciviewsk at sciviews.org\\templates\\Report.odt";
+ }
+ file.initWithPath(tpl);
+ var dir = Components.classes["@mozilla.org/file/local;1"]
+ .createInstance(Components.interfaces.nsILocalFile);
+ dir.initWithPath(reportsDir);
+ try {
+ file.copyTo(dir, rep + ".odt");
+ } catch(e) {
+ sv.log.exception(e, "Error while retrieving the default Report.odt template" +
+ " (sv.misc.sessionReport)", true);
+ alert("Error while retrieving the default Report.odt template.")
+ }
+ file.initWithPath(reportsDir);
+ file.append(rep + ".odt");
+ }
+ // This would be to force using OpenOffice Writer (on Linux?)
+ // ko.run.runEncodedCommand(window, 'oowriter -o "' + file.path + '" & ');
+ try {
+ file.launch();
+ } catch(e) { // On Linux, this does not work...
+ // First try nautilus, and then, try konqueror
+ try {
+ ko.run.runEncodedCommand(window, 'gnome-open "' +
+ file.path + '" & ');
+ } catch(e) {
+ ko.run.runEncodedCommand(window, 'kfmclient exec "' +
+ file.path + '" & ');
+ }
+ }
+ }
+ // Make sure lists of session files are refreshed
+ sv.r.refreshSession();
+}
+
// Close all buffers except current one (an start page)
sv.misc.closeAllOthers = function () {
try {
Modified: komodo/SciViews-K/content/js/prefs.js
===================================================================
--- komodo/SciViews-K/content/js/prefs.js 2009-09-19 14:28:26 UTC (rev 192)
+++ komodo/SciViews-K/content/js/prefs.js 2009-09-19 22:04:11 UTC (rev 193)
@@ -58,8 +58,9 @@
if (typeof(sep) != "undefined") items = items.split(sep);
// Add each item in items in inverse order
- for (var i = items.length - 1; i >= 0; i--) {
- ko.mru.add(mruList, items[i], true);
+ for (var i = items.length - 1; i >= 0; i--) {
+ if (items[i] != "")
+ ko.mru.add(mruList, items[i], true);
}
}
Modified: komodo/SciViews-K/content/js/r.js
===================================================================
--- komodo/SciViews-K/content/js/r.js 2009-09-19 14:28:26 UTC (rev 192)
+++ komodo/SciViews-K/content/js/r.js 2009-09-19 22:04:11 UTC (rev 193)
@@ -48,6 +48,7 @@
// sv.r.obj_refresh_dataframe(data); // Refresh active data frame's MRUs
// sv.r.obj_refresh_lm(data); // Refresh active 'lm' object
// sv.r.obj_message(); // Refresh statusbar message about active df and lm
+// sv.r.refreshSession(); // Refresh MRU lists associated with current session
// sv.r.initSession(dir, datadir, scriptdir, reportdir);
// sv.r.setSession(dir, datadir, scriptdir, reportdir, saveOld, loadNew);
// Initialize R session with corresponding directories
@@ -56,6 +57,10 @@
// dir: session directory, xxxdir: xxx subdirectory,
// saveOld (default true): do we save old session data?
// loadNew (default true): do we load data from new session?
+// sv.r.switchSession(inDoc); // Switch to another R session (possibly create it)
+// sv.r.exploreSession(); // Explore the session dirs in default file browser
+// sv.r.clearSession(); // Clear session's .RData and .Rhistory files
+// sv.r.reloadSession(); // Reload .RData nd .Rhistory files from session dir
// sv.r.quit(save); // Quit R (ask to save in save in not defined)
//
// Note: sv.r.objects is implemented in robjects.js
@@ -974,7 +979,7 @@
var objname = item[0];
var objclass = item[1];
// Make sure r.active.data.frame pref is set to obj
- sv.prefs.setString("r.active." + objclass, objname, true);
+ sv.prefs.setString("r.active.data.frame", objname, true);
items.shift(); // Eliminate first item from the array
// Create three lists: vars collects all var names, nums and facts do so for
// only numeric and factor variables (separate items by "|")
@@ -983,7 +988,8 @@
item = sv.tools.strings.removeLastCRLF(items[i]).split("\t");
// Fill the various lists according to the nature of item
vars = vars + "|" + item[0];
- if (item[1] == "numeric") nums = nums + "|" + item[0];
+ if (item[1] == "numeric" | item[1] == "integer")
+ nums = nums + "|" + item[0];
if (item[1] == "factor") facts = facts + "|" + item[0];
}
// Eliminate first "|"
@@ -1025,12 +1031,46 @@
var objname = item[0];
var objclass = item[1];
// Make sure r.active.data.frame pref is set to obj
- sv.prefs.setString("r.active." + objclass, objname, true);
+ sv.prefs.setString("r.active.lm", objname, true);
// Update message in the statusbar
sv.r.obj_message();
return(true);
}
+// Refresh MRU lists associated with the current session
+sv.r.refreshSession = function () {
+ var i;
+ // Refresh lists of dataset
+ var items = sv.tools.file.list(sv.prefs.getString("sciviews.data.localdir"),
+ /\.[cC][sS][vV]$/, true);
+ sv.prefs.mru("datafile", true, items);
+ ko.mru.reset("datafile_mru");
+ for (i = items.length - 1; i >= 0; i--) {
+ if (items[i] != "")
+ ko.mru.add("datafile_mru", items[i], true);
+ }
+
+ // Refresh lists of scripts
+ items = sv.tools.file.list(sv.prefs.getString("sciviews.scripts.localdir"),
+ /\.[rR]$/, true);
+ sv.prefs.mru("scriptfile", true, items);
+ ko.mru.reset("scriptfile_mru");
+ for (i = items.length - 1; i >= 0; i--) {
+ if (items[i] != "")
+ ko.mru.add("scriptfile_mru", items[i], true);
+ }
+
+ // Refresh lists of reports
+ items = sv.tools.file.list(sv.prefs.getString("sciviews.reports.localdir"),
+ /\.[oO][dD][tT]$/, true);
+ sv.prefs.mru("reportfile", true, items);
+ ko.mru.reset("reportfile_mru");
+ for (i = items.length - 1; i >= 0; i--) {
+ if (items[i] != "")
+ ko.mru.add("reportfile_mru", items[i], true);
+ }
+}
+
// Initialize R session preferences in Komodo
// use sv.r.setSession() except at startup!
sv.r.initSession = function (dir, datadir, scriptdir, reportdir) {
@@ -1084,13 +1124,12 @@
// Look if the session directory exists, or create it
var file = sv.tools.file.getfile(localdir);
- // file = sv.tools.file.getfile(sv.tools.file.path(dir);
if (!file.exists() || !file.isDirectory()) {
sv.log.debug( "Creating session directory... " );
file.create(DIRECTORY_TYPE, 511);
}
- // ... also make sure that /Data, /Script and /Report subdirs exist
+ // ... also make sure that Data, Script and Report subdirs exist
var subdirs = [datadir, scriptdir, reportdir];
for (var i in subdirs) {
if (subdirs[i] != "") {
@@ -1101,6 +1140,9 @@
delete file;
}
}
+ // refresh lists of data, scripts and reports found in the session
+ sv.r.refreshSession();
+
return(dir);
}
@@ -1170,6 +1212,146 @@
return(true);
}
+// Switch to another R session (create it if it does not exists yet)
+sv.r.switchSession = function (inDoc) {
+ var baseDir = "";
+ var sessionDir = "";
+ // Base directory is different on Linux/Mac OS X and Windows
+ if (navigator.platform.indexOf("Win") > -1) {
+ baseDir = "~"
+ } else {
+ baseDir = "~/Documents"
+ }
+ if (inDoc) {
+ // Ask for the session subdirectory
+ var Session = "SciViews R Session"
+ Session = ko.dialogs.prompt(sv.translate("Session in my documents " +
+ "(use '/' for subdirs, like in 'dir/session')"),
+ sv.translate("Session"), Session,
+ sv.translate("Switch to R session"), "okRsession");
+ if (Session != null & Session != "") {
+ // Make sure that Session does not start with /, or ./, or ../
+ Session = Session.replace(/\^.{0,2}\//, "");
+ // Construct session dir
+ sessionDir = baseDir + "/" + Session;
+ } else sessionDir = "";
+ } else {
+ // Ask for the session path
+ sessionDir = ko.filepicker.
+ getFolder(baseDir, sv.translate("Choose session directory"));
+ }
+ if (sessionDir != null & sessionDir != "") {
+ // Subdirectories for data, scripts and reports
+ var datadir = "";
+ var scriptdir = "";
+ var reportdir = "";
+ var cfg = "";
+ var cfgfile = sv.tools.file.path(sessionDir, ".svData");
+ var filefound = false;
+ // Look if this directory already exists and contains a .svData file
+ if (sv.tools.file.exists(sessionDir) == 2 &
+ sv.tools.file.exists(cfgfile) == 1) {
+ // Try reading .svData file
+ try {
+ cfg = sv.tools.file.read(cfgfile, "utf-8");
+ filefound = true;
+ // Actualize values for datadir, scriptdir and reportdir
+ cfg = cfg.split("\n");
+ var key, value;
+ for (i in cfg) {
+ key = cfg[i].split("=");
+ if (key[0].trim() == "datadir") datadir = key[1].trim();
+ if (key[0].trim() == "scriptdir") scriptdir = key[1].trim();
+ if (key[0].trim() == "reportdir") reportdir = key[1].trim();
+ }
+ } catch (e) { }
+ }
+ // If no .svData file found, ask for respective directories
+ if (!filefound) {
+ datadir = ko.dialogs.prompt(
+ sv.translate("Subdirectory for datasets (nothing for none):"),
+ "", "data", sv.translate("R session configuration"), "okRsesData");
+ if (datadir == null) return false;
+ scriptdir = ko.dialogs.prompt(
+ sv.translate("Subdirectory for R scripts (nothing for none):"),
+ "", "R", sv.translate("R session configuration"), "okRsesScript");
+ if (scriptdir == null) return false;
+ reportdir = ko.dialogs.prompt(
+ sv.translate("Subdirectory for reports (nothing for none):"),
+ "", "doc", sv.translate("R session configuration"), "okRsesReport");
+ if (reportdir == null) return false;
+ }
+ // Now create or switch to this session directory
+ sv.r.setSession(sessionDir, datadir, scriptdir, reportdir);
+ // If there were no .svData file, create it now
+ if (!filefound) {
+ // Save these informations to the .svData file in the session dir
+ sv.tools.file.write(cfgfile,
+ "datadir=" + datadir + "\nscriptdir=" + scriptdir +
+ "\nreportdir=" + reportdir, "utf-8", false);
+ }
+ return true;
+ }
+}
+
+// Show the session directory in the file explorer, finder, nautilus, ...
+sv.r.exploreSession = function () {
+ var dataDir = sv.prefs.getString("sciviews.session.localdir", "~");
+ var file = Components.classes["@mozilla.org/file/local;1"]
+ .createInstance(Components.interfaces.nsILocalFile);
+ file.initWithPath(dataDir);
+ if (file.exists() == true) {
+ try {
+ file.reveal();
+ } catch(e) { // On Linux, this does not work...
+ // First try nautilus, and then, try konqueror
+ try {
+ ko.run.runEncodedCommand(window,
+ 'nautilus "' + file.path + '" & ');
+ } catch(e) {
+ ko.run.runEncodedCommand(window,
+ 'konqueror --profile filemanagement "' + file.path + '" & ');
+ }
+ }
+ }
+}
+
+// Reload .RData and .Rhistory files from session directory
+sv.r.reloadSession = function () {
+ // Ask for confirmation first
+ if (ko.dialogs.okCancel("Are you sure you want to delete all objects " +
+ "and reload them from disk?", "OK", "You are about to delete all " +
+ "objects currently in R memory, and reload the initial content from " +
+ "disk (.RData and .Rhistory files)...", "Reload session") == "OK") {
+ // Switch temporarily to the session directory and try loading
+ // .RData and Rhistory files
+ var dir = sv.prefs.getString("sciviews.session.dir", "");
+ var cmd = 'rm(list = ls(pattern = "\\.active.", all.names = TRUE))\n' +
+ 'rm(list = ls()); .savdir. <- setwd("' + dir + '")\n' +
+ 'if (file.exists(".RData")) load(".RData")\n' +
+ 'if (file.exists(".Rhistory")) loadhistory()\n' +
+ 'setwd(.savdir.); rm(.savdir.)\n' +
+ 'try(guiRefresh(force = TRUE), silent = TRUE)';
+ sv.r.evalHidden(cmd);
+ }
+}
+
+// Clear .RData and .Rhistory files from session directory
+sv.r.clearSession = function () {
+ // Ask for confirmation first
+ if (ko.dialogs.okCancel("Are you sure you want to delete .RData and " +
+ ".Rhistory files from disk?", "OK", "You are about to delete the data" +
+ " saved in .RData and the command history saved in .Rhistory for the " +
+ "current session...", "Clear session") == "OK") {
+ // Delete .RData and Rhistory files
+ var dir = sv.prefs.getString("sciviews.session.dir", "");
+ var cmd = '.savdir. <- setwd("' + dir + '")\n' +
+ 'unlink(".RData"); unlink(".Rhistory")\n' +
+ 'setwd(.savdir.); rm(.savdir.)';
+ sv.r.evalHidden(cmd);
+ }
+}
+
// Quit R (ask to save in save in not defined)
sv.r.quit = function (save) {
if (typeof(save) == "undefined") {
Modified: komodo/SciViews-K/content/js/tools/file.js
===================================================================
--- komodo/SciViews-K/content/js/tools/file.js 2009-09-19 14:28:26 UTC (rev 192)
+++ komodo/SciViews-K/content/js/tools/file.js 2009-09-19 22:04:11 UTC (rev 193)
@@ -17,6 +17,8 @@
// Create nsILocalFile object from array and/or
// special dir name
// sv.tools.file.readURI(uri); // Read data from an URI
+// sv.tools.file.list(dirname, pattern, noext); // List all files matching
+ // pattern in dirname (with/without extension)
////////////////////////////////////////////////////////////////////////////////
// Define the 'sv.tools' namespace
@@ -214,5 +216,34 @@
file.close();
return res;
}
+
+ // List all files matching a given pattern in directory
+ this.list = function (dirname, pattern, noext) {
+ try {
+ var dir = Components.classes["@mozilla.org/file/local;1"].
+ createInstance(Components.interfaces.nsILocalFile);
+ dir.initWithPath(dirname);
+ if (dir.exists() && dir.isDirectory()) {
+ var files = dir.directoryEntries;
+ var selfiles = new Array();
+ var files;
+ while (files.hasMoreElements()) {
+ file = files.getNext().
+ QueryInterface(Components.interfaces.nsILocalFile);
+ if (file.isFile() && file.leafName.search(pattern) > -1) {
+ if (noext) {
+ selfiles.push(file.leafName.replace(pattern, ""));
+ } else {
+ selfiles.push(file.leafName);
+ }
+ }
+ }
+ return(selfiles);
+ }
+ } catch (e) {
+ sv.log.exception(e, "Error while listing files " + dirname +
+ " (sv.tools.file.list)", true)
+ }
+ }
}).apply(sv.tools.file);
Modified: komodo/SciViews-K/locale/en-GB/main.properties
===================================================================
--- komodo/SciViews-K/locale/en-GB/main.properties 2009-09-19 14:28:26 UTC (rev 192)
+++ komodo/SciViews-K/locale/en-GB/main.properties 2009-09-19 22:04:11 UTC (rev 193)
@@ -35,3 +35,11 @@
Start R=Start R
Cannot retrieve directory from R. Make sure R is running.=Cannot retrieve directory from R. Make sure R is running.
Asking R for directory...=Asking R for directory...
+Session in my documents (use '/' for subdirs, like in 'dir/session')=Session in my documents (use '/' for subdirs, like in 'dir/session')
+Session=Session
+Switch to R session=Switch to R session
+Choose session directory=Choose session directory
+Subdirectory for datasets (nothing for none):=Subdirectory for datasets (nothing for none):
+Subdirectory for R scripts (nothing for none):=Subdirectory for R scripts (nothing for none):
+Subdirectory for reports (nothing for none):=Subdirectory for reports (nothing for none):
+R session configuration=R session configuration
\ No newline at end of file
Modified: komodo/SciViews-K/locale/fr-FR/main.properties
===================================================================
--- komodo/SciViews-K/locale/fr-FR/main.properties 2009-09-19 14:28:26 UTC (rev 192)
+++ komodo/SciViews-K/locale/fr-FR/main.properties 2009-09-19 22:04:11 UTC (rev 193)
@@ -35,3 +35,11 @@
Start R=Démarrer R
Cannot retrieve directory from R. Make sure R is running.=Impossible de localiser le répertoire de R. Assurez-vous que R est lancé.
Asking R for directory...=Interrogation de R pour le répertoire...
+Session in my documents (use '/' for subdirs, like in 'dir/session')=Session dans Mes Documents (utilisez '/' des sous-répertoires comme dans 'rep/session')
+Session=Session
+Switch to R session=Changer la session R
+Choose session directory=Choisir le répertoir de session
+Subdirectory for datasets (nothing for none):=Sous-répertoire pour les jeux de données (rien pour aucun):
+Subdirectory for R scripts (nothing for none):=Sous-répertoire pour les scripts (rien pour aucun):
+Subdirectory for reports (nothing for none):=Sous-répertoire pour les rapports (rien pour aucun):
+R session configuration=Configuration de session R
\ No newline at end of file
Modified: komodo/SciViews-K/sciviewsk-0.8.1-ko.xpi
===================================================================
(Binary files differ)
More information about the Sciviews-commits
mailing list