Index: tmp/org.txm.rcp/plugin.xml
===================================================================
--- tmp/org.txm.rcp/plugin.xml	(revision 3202)
+++ tmp/org.txm.rcp/plugin.xml	(revision 3203)
@@ -3312,5 +3312,13 @@
          </run>
       </runtime>
    </extension>
+   <extension
+         point="org.eclipse.ui.installationPages">
+      <page
+            class="org.txm.rcp.InstallationPage.PathsInstallationPage"
+            id="org.txm.rcp.installationPages.paths"
+            name="Paths">
+      </page>
+   </extension>
 
 </plugin>
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/GLComposite.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/GLComposite.java	(revision 3202)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/GLComposite.java	(revision 3203)
@@ -11,17 +11,17 @@
  *
  */
 public class GLComposite extends Composite {
-
+	
 	private GridLayout gl;
 	private String name;
-
+	
 	public GLComposite(Composite parent, int style, String name) {
 		super(parent, style);
 		gl = createDefaultLayout(1);
 		this.name = name;
 		super.setLayout(gl);
 	}
-
+	
 	public final GridLayout getLayout() {
 		return gl;
 	}
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/InstallationPage/PathsInstallationPage.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/InstallationPage/PathsInstallationPage.java	(revision 0)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/InstallationPage/PathsInstallationPage.java	(revision 3203)
@@ -0,0 +1,150 @@
+package org.txm.rcp.InstallationPage;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.TreeViewerColumn;
+import org.eclipse.jface.viewers.ViewerComparator;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.program.Program;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.ui.about.InstallationPage;
+import org.txm.Toolbox;
+
+/**
+ * Paths TabFolder for the Installation details page
+ * 
+ * @author mdecorde
+ *
+ */
+public class PathsInstallationPage extends InstallationPage {
+	
+	private TreeViewer treeViewer;
+
+	public PathsInstallationPage() {
+		
+		this.setTitle(" TXM's paths");
+	}
+	
+	@Override
+	public void createControl(Composite parent) {
+		
+		parent.setLayout(new GridLayout(1, false));
+		
+		Label l = new Label(parent, SWT.NONE);
+		l.setText("TXM commons paths list.\nClick on the 'Open...' button or double-click a line to open the selected path.");
+		l.setLayoutData(new GridData());
+		
+		treeViewer = new TreeViewer(parent);
+		Tree tree = treeViewer.getTree();
+		tree.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true));
+		tree.setHeaderVisible(true);
+		treeViewer.setContentProvider(new  ITreeContentProvider() {
+			
+			@SuppressWarnings("rawtypes")
+			@Override
+			public boolean hasChildren(Object element) {
+				if (element instanceof List) {
+					return !((List) element).isEmpty();
+				}
+				return false;
+			}
+			
+			@Override
+			public Object getParent(Object element) {
+				
+				return null;
+			}
+			
+			@Override
+			public Object[] getElements(Object inputElement) {
+				
+				return ((List) inputElement).toArray();
+			}
+			
+			@SuppressWarnings("rawtypes")
+			@Override
+			public Object[] getChildren(Object parentElement) {
+				if (parentElement instanceof List) {
+					return ((List) parentElement).toArray();
+				}
+				return new Object[0];
+			}
+		});
+		
+		//treeViewer.setComparator(new ViewerComparator());
+		treeViewer.addDoubleClickListener(new IDoubleClickListener() {
+			
+			@Override
+			public void doubleClick(DoubleClickEvent event) {
+				openSelection();
+			}
+		});
+		
+		TreeViewerColumn nameColumn = new TreeViewerColumn(treeViewer, SWT.LEFT);
+		nameColumn.getColumn().setText("What");
+		nameColumn.getColumn().setWidth(200);
+		nameColumn.setLabelProvider(new ColumnLabelProvider() {
+			public String getText(Object element) {
+				return ((Object[]) element)[0].toString();
+			}
+		});
+		
+		TreeViewerColumn pathColumn = new TreeViewerColumn(treeViewer, SWT.LEFT);
+		pathColumn.getColumn().setText("Paths");
+		pathColumn.getColumn().setWidth(200);
+		pathColumn.setLabelProvider(new ColumnLabelProvider() {
+			public String getText(Object element) {
+				return ((Object[]) element)[1].toString();
+			}
+		});
+		
+		treeViewer.setInput(Arrays.asList(
+				
+				new Object[]{"Logs directory", new File(Toolbox.getTxmHomePath(), "logs")}, 
+				new Object[]{"Crash logs directory", new File(Toolbox.getInstallDirectory())},
+				new Object[]{"TXM user home directory", new File(Toolbox.getTxmHomePath())},
+				new Object[]{"Installation directory", new File(Toolbox.getInstallDirectory())}, 
+				new Object[]{"Instance configuration file", new File(Toolbox.getConfigurationDirectory(), "launcher.ini")}, 
+				new Object[]{"Instance configuration directory", new File(Toolbox.getConfigurationDirectory())} 
+				
+		));
+		
+		Button openButton = new Button(parent, SWT.NONE);
+		openButton.setLayoutData(new GridData());
+		openButton.setText("Open...");
+		openButton.setToolTipText("Open the selected path with the default tool set by the system.");
+		openButton.addSelectionListener(new SelectionListener() {
+			
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				
+				openSelection();
+			}
+			
+			@Override
+			public void widgetDefaultSelected(SelectionEvent e) { }
+		});
+	}
+
+	protected void openSelection() {
+		
+		Object selection = treeViewer.getStructuredSelection().getFirstElement();
+		if (selection != null && selection instanceof Object[]) {
+			Program.launch(((Object[])selection)[1].toString());
+		}
+	}
+}

Property changes on: tmp/org.txm.rcp/src/main/java/org/txm/rcp/InstallationPage/PathsInstallationPage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMBrowserEditor.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMBrowserEditor.java	(revision 3202)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMBrowserEditor.java	(revision 3203)
@@ -123,8 +123,11 @@
 	public void setWordsIds(List<String> wordids2, List<String> lineids2) {
 		this.wordids = wordids2;
 		this.lineids = lineids2;
-		if (progresslistener != null)
+		
+		if (progresslistener != null) {
 			this.getBrowser().removeProgressListener(progresslistener);
+		}
+		
 		progresslistener = new ProgressListener() {
 			
 			@Override
@@ -166,6 +169,7 @@
 			}
 		};
 		getBrowser().addProgressListener(progresslistener);
+		new CommandLink(this, getBrowser());
 	}
 	
 	/**
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/CommandLink.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/CommandLink.java	(revision 0)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/CommandLink.java	(revision 3203)
@@ -0,0 +1,128 @@
+package org.txm.rcp.editors;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import org.eclipse.core.commands.Command;
+import org.eclipse.core.commands.IParameter;
+import org.eclipse.core.commands.Parameterization;
+import org.eclipse.core.commands.ParameterizedCommand;
+import org.eclipse.core.commands.common.NotDefinedException;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.browser.BrowserFunction;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.commands.ICommandService;
+import org.eclipse.ui.handlers.IHandlerService;
+import org.txm.core.messages.TXMCoreMessages;
+
+import org.txm.utils.logger.Log;
+
+public class CommandLink extends BrowserFunction {
+	
+	String data = "";
+	
+	Browser browser;
+	
+	Object ret;
+	
+	IEditorPart editor;
+	
+	public CommandLink(IEditorPart editor, Browser browser) {
+		super(browser, "txmcommand"); //$NON-NLS-1$
+		this.browser = browser;
+		this.editor = editor;
+	}
+	
+	@Override
+	public synchronized Object function(Object[] arguments) {
+		if (editor != null) {
+			try { // TODO add option (or another browser command) to not force activated editor
+				editor.getSite().getPage().activate(editor);
+			}
+			catch (Exception e) {
+				System.out.println(e);
+			}
+		}
+		ret = null;
+		browser.getDisplay().asyncExec(new Runnable() {
+			
+			@Override
+			public void run() {
+				ret = callTXMCommand(arguments);
+			}
+		});
+		return ret;
+	}
+	/**
+	 * 
+	 * @param editor may be null, will be used by the command to display its result
+	 * @param arguments array of command id + (parameters+values).
+	 * 
+	 *            <pre>
+	 * ex: String[] arguments = {"commandid", "paramname", "value", "paramname2", "othervalue"};
+	 *            </pre>
+	 * 
+	 * @return
+	 */
+	public static Object callTXMCommand(Object[] arguments) {
+		HashMap<String, String> params = new HashMap<>();
+		for (int i = 0; i + 1 < arguments.length; i += 2) {
+			params.put(arguments[i].toString(), arguments[i + 1].toString());
+		}
+		
+		String id = params.get("id"); //$NON-NLS-1$
+		if (id != null) {
+			params.remove("id"); //$NON-NLS-1$
+			// System.out.println("CALLING CMD with id="+id+" and parameters="+params);
+			// get the command from plugin.xml
+			callTXMCommand(id, params);
+		}
+		else {
+			System.out.println(NLS.bind("Cannot call a TXM command without ID (parameters={0}).", params));
+		}
+		return arguments;
+	}
+	/**
+	 * Browser command that opens an edition
+	 * 
+	 * @author mdecorde
+	 *
+	 */
+	public static Object callTXMCommand(String id, HashMap<String, String> params) {
+		IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+		ICommandService cmdService = window.getService(ICommandService.class);
+		Command cmd = cmdService.getCommand(id);
+		
+		// get the parameter
+		ArrayList<Parameterization> parameters = new ArrayList<>();
+		ArrayList<String> failedParameters = new ArrayList<>();
+		for (String k : params.keySet()) {
+			try {
+				IParameter iparam = cmd.getParameter(k);
+				Parameterization p = new Parameterization(iparam, params.get(k));
+				parameters.add(p);
+			}
+			catch (NotDefinedException e) {
+				// Log.warning(NLS.bind(EditionUIMessages.warningColonUnknownedParameterIdEqualsP0, k));
+				failedParameters.add(k);
+			}
+		}
+		
+		// build the parameterized command
+		ParameterizedCommand pc = new ParameterizedCommand(cmd, parameters.toArray(new Parameterization[parameters.size()]));
+		
+		// execute the command
+		IHandlerService handlerService = window.getService(IHandlerService.class);
+		try {
+			return handlerService.executeCommand(pc, null);
+		}
+		catch (Exception e) {
+			Log.warning(TXMCoreMessages.bind("The ''{0}'' hyperlinked command failed with the ''{1}'' parameters and the not recognized ''{2}'' parameters.", id, parameters, failedParameters));
+			// Log.printStackTrace(e);
+		}
+		return null;
+	}
+}

Property changes on: tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/CommandLink.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.rcp/rcpapplication.product
===================================================================
--- tmp/org.txm.rcp/rcpapplication.product	(revision 3202)
+++ tmp/org.txm.rcp/rcpapplication.product	(revision 3203)
@@ -6,13 +6,13 @@
    <aboutInfo>
       <image path="/org.txm.rcp/icons/logo/about TXM.png"/>
       <text>
-         &lt;TXM Software User Agreement&gt;
+         [Contrat d&apos;utilisation du logiciel TXM]
 
-TXM 0.8.1 Copyright © 2010-2020 ENS de Lyon, University of Franche-Comté, CNRS
+TXM 0.8.1 Copyright © 2010-2021 ENS de Lyon, University of Franche-Comté, CNRS
 
 &lt;English version below&gt;
 
-EN ACCEPTANT CETTE MISE À JOUR ET EN UTILISANT TXM, VOUS VOUS ENGAGEZ À CITER L&apos;ARTICLE DE RÉFÉRENCE DE LA PLATEFORME* DANS VOS PUBLICATIONS DE RÉSULTATS OBTENUS À PARTIR D&apos;ELLE. CELA EST ESSENTIEL POUR NOUS PERMETTRE DE JUSTIFIER LE BESOIN DE PÉRENNISATION DE CET INSTRUMENT DE TRAVAIL POUR LA COMMUNAUTÉ SCIENTIFIQUE.
+EN ACCEPTANT CETTE INSTALLATION OU MISE À JOUR ET EN UTILISANT TXM, VOUS VOUS ENGAGEZ À CITER L&apos;ARTICLE DE RÉFÉRENCE DE LA PLATEFORME* DANS VOS PUBLICATIONS DE RÉSULTATS OBTENUS À PARTIR D&apos;ELLE. CELA EST ESSENTIEL POUR NOUS PERMETTRE DE JUSTIFIER LE BESOIN DE PÉRENNISATION DE CET INSTRUMENT DE TRAVAIL POUR LA COMMUNAUTÉ SCIENTIFIQUE.
 
 Le logiciel TXM est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier suivant les termes de la Licence publique générale GNU telle que publiée par la Free Software Foundation, soit la version 2 de cette License, soit une version ultérieure.
 
@@ -27,6 +27,7 @@
 
 ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH ENGLISH
 
+[TXM Software User Agreement]
 
 By accepting this update and by using TXM, you agree to cite the TXM platform reference article** in your publications of results obtained from it. That is essential for us to justify the need for sustainability of this instrument for the scientific community.
 
@@ -78,6 +79,7 @@
       </win>
    </launcher>
 
+
    <vm>
       <linux include="false">org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7</linux>
       <macos include="false">org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7</macos>
