diff --git a/src/Solver/GenericSolver.py b/src/Solver/GenericSolver.py
index 8f5b0afb31885863669c5ff9cf85a5d7181fd3f7..7cf3e3323d048d2bda83216757b48a985b4dfc0a 100644
--- a/src/Solver/GenericSolver.py
+++ b/src/Solver/GenericSolver.py
@@ -15,3 +15,6 @@ class GenericSolver(AbstractSolver):
         lst = super(GenericSolver, cls).default_parameters()
 
         return lst
+
+    def log_file(self):
+        return ""
diff --git a/src/View/Configure/Window.py b/src/View/Configure/Window.py
index c0c1b104b306e500b4742b35df6bfb3c61780d2f..3e51f5c137a49a24b2a8164e3baeaf36268677e3 100644
--- a/src/View/Configure/Window.py
+++ b/src/View/Configure/Window.py
@@ -127,6 +127,9 @@ class ConfigureWindow(ASubWindow, ListedSubWindow):
         table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
         table.setAlternatingRowColors(True)
 
+        # Editor
+        self.set_line_edit_text("lineEdit_editor_cmd", str(self.conf.editor))
+
         # Language
         languages = Config.languages()
         for lang in languages:
@@ -190,6 +193,9 @@ class ConfigureWindow(ASubWindow, ListedSubWindow):
         # Stricklers
         self.conf.stricklers = deepcopy(self._stricklers)
 
+        # Editor
+        self.conf.editor = self.get_line_edit_text("lineEdit_editor_cmd")
+
         # Language
         self.conf.lang = Config.languages()[self.get_combobox_text("comboBox_language")]
 
diff --git a/src/View/RunSolver/Log/Window.py b/src/View/RunSolver/Log/Window.py
index fb77fe6f3a815a477411862e36a937dff1258cfe..fb7ba631ff98c5be4f5ac6c305403f28e58ab73e 100644
--- a/src/View/RunSolver/Log/Window.py
+++ b/src/View/RunSolver/Log/Window.py
@@ -54,7 +54,10 @@ class SolverLogFileWindow(ASubMainWindow, ListedSubWindow):
 
     def setup_action(self):
         self.find(QAction, "action_revert").setEnabled(True)
-        self.find(QAction, "action_open_in_editor").setEnabled(True)
+        if self._config.editor != "":
+            self.find(QAction, "action_open_in_editor").setEnabled(True)
+        else:
+            self.find(QAction, "action_open_in_editor").setEnabled(False)
 
     def setup_connections(self):
         self.find(QAction, "action_revert").triggered.connect(self.revert)
@@ -71,4 +74,15 @@ class SolverLogFileWindow(ASubMainWindow, ListedSubWindow):
         self.setup_text()
 
     def open_on_editor(self):
-        print("TODO: open in editor")
+        p = QProcess(self)
+
+        cmd = self._config.editor
+        cmd = cmd.replace("@file", self._file_name)
+
+        cmd = cmd.split()
+        exe = cmd[0]
+        args = cmd[1:]
+
+        p.start(
+            exe, args,
+        )
diff --git a/src/View/RunSolver/Window.py b/src/View/RunSolver/Window.py
index 427cea0165c69a772dd970bebb6aa9e5d3cee56d..1b427b10bc0fffeff0c29184e41ff3e6e86dd0cd 100644
--- a/src/View/RunSolver/Window.py
+++ b/src/View/RunSolver/Window.py
@@ -126,6 +126,7 @@ class SolverLogWindow(ASubMainWindow, ListedSubWindow):
         self.find(QAction, "action_start").setEnabled(False)
         self.find(QAction, "action_pause").setEnabled(True)
         self.find(QAction, "action_stop").setEnabled(True)
+        self.find(QAction, "action_log_file").setEnabled(False)
 
     def setup_alarm(self):
         self._alarm = QTimer()
@@ -159,7 +160,8 @@ class SolverLogWindow(ASubMainWindow, ListedSubWindow):
             self.find(QAction, "action_start").setEnabled(True)
             self.find(QAction, "action_pause").setEnabled(False)
             self.find(QAction, "action_stop").setEnabled(False)
-            # self.find(QAction, "action_log_file").setEnabled(True)
+            if self._solver.log_file() != "":
+                self.find(QAction, "action_log_file").setEnabled(True)
 
         while self._output.qsize() != 0:
             s = self._output.get()
@@ -191,7 +193,8 @@ class SolverLogWindow(ASubMainWindow, ListedSubWindow):
         self.find(QAction, "action_start").setEnabled(True)
         self.find(QAction, "action_pause").setEnabled(False)
         self.find(QAction, "action_stop").setEnabled(False)
-        self.find(QAction, "action_log_file").setEnabled(True)
+        if self._solver.log_file() != "":
+            self.find(QAction, "action_log_file").setEnabled(True)
 
     def log_file(self):
         file_name = os.path.join(self._workdir, self._solver.log_file())
diff --git a/src/View/ui/ConfigureDialog.ui b/src/View/ui/ConfigureDialog.ui
index 693971a0f18fa5bd0b0980ed014a82878461fe4b..8f9a56039cddece09d10bd78c18abd1c233b521d 100644
--- a/src/View/ui/ConfigureDialog.ui
+++ b/src/View/ui/ConfigureDialog.ui
@@ -409,6 +409,56 @@
          </item>
         </layout>
        </widget>
+       <widget class="QWidget" name="tab_editor">
+        <attribute name="title">
+         <string>Editor</string>
+        </attribute>
+        <layout class="QGridLayout" name="gridLayout_8">
+         <item row="0" column="0">
+          <widget class="QLabel" name="label_11">
+           <property name="font">
+            <font>
+             <italic>true</italic>
+            </font>
+           </property>
+           <property name="text">
+            <string>This value must be used for reading or editing files in speficic case</string>
+           </property>
+          </widget>
+         </item>
+         <item row="1" column="0">
+          <layout class="QHBoxLayout" name="horizontalLayout_8">
+           <item>
+            <widget class="QLabel" name="label">
+             <property name="text">
+              <string>Editor command</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QLineEdit" name="lineEdit_editor_cmd">
+             <property name="inputMask">
+              <string/>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item row="2" column="0">
+          <spacer name="verticalSpacer_5">
+           <property name="orientation">
+            <enum>Qt::Vertical</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>20</width>
+             <height>40</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+        </layout>
+       </widget>
        <widget class="QWidget" name="tab_language">
         <attribute name="title">
          <string>Language</string>
diff --git a/src/View/ui/SolverLogFile.ui b/src/View/ui/SolverLogFile.ui
index dae489143309f4a4de398266820689fb1c7ae143..15922be44536e2f0d60e96196c8437063059b377 100644
--- a/src/View/ui/SolverLogFile.ui
+++ b/src/View/ui/SolverLogFile.ui
@@ -13,6 +13,9 @@
   <property name="windowTitle">
    <string>MainWindow</string>
   </property>
+  <property name="locale">
+   <locale language="English" country="Europe"/>
+  </property>
   <widget class="QWidget" name="centralwidget">
    <layout class="QGridLayout" name="gridLayout">
     <item row="0" column="0">
diff --git a/src/config.py b/src/config.py
index 60550351bcc4c5f0f241f5ea69e4b6a3debb49b2..f1db3b8cf8dfc4d95c40097066896f6f37b1ffeb 100644
--- a/src/config.py
+++ b/src/config.py
@@ -16,7 +16,6 @@ class Config(object):
         self.set_default_value()
 
     def set_default_value(self):
-        print('toto')
         # Solvers
         self._solvers = []
 
@@ -33,6 +32,9 @@ class Config(object):
         self.backup_frequence = "00:05:00"
         self.backup_max = 10
 
+        # Editor
+        self.editor = "emacs @file"
+
         # Languages
         self.lang = ""