Changed execute logic

This commit is contained in:
itdominator 2022-04-02 23:23:33 -05:00
parent 0539fa41f0
commit 9442453d43
5 changed files with 23 additions and 22 deletions

View File

@ -37,7 +37,7 @@ class EventSystem(IPCServer):
return None return None
def push_gui_event(self, eventevent: list) -> None: def push_gui_event(self, event: list) -> None:
if len(event) == 3: if len(event) == 3:
self._gui_events.append(event) self._gui_events.append(event)
return None return None

View File

@ -1,5 +1,5 @@
# Python imports # Python imports
import os, gc, threading, time import os, gc, threading, time, shlex
# Lib imports # Lib imports
import gi import gi
@ -187,4 +187,4 @@ class Controller(UIMixin, KeyboardSignalsMixin, IPCSignalsMixin, ExceptionHookMi
wid, tid = self.fm_controller.get_active_wid_and_tid() wid, tid = self.fm_controller.get_active_wid_and_tid()
tab = self.get_fm_window(wid).get_tab_by_id(tid) tab = self.get_fm_window(wid).get_tab_by_id(tid)
dir = tab.get_current_directory() dir = tab.get_current_directory()
tab.execute(f"{tab.terminal_app}", dir) tab.execute([f"{tab.terminal_app}"], start_dir=shlex.quote(dir))

View File

@ -1,5 +1,5 @@
# Python imports # Python imports
import os, time, threading import os, time, threading, shlex
# Lib imports # Lib imports
import gi import gi
@ -145,21 +145,24 @@ class WidgetFileActionMixin:
current_dir = state.tab.get_current_directory() current_dir = state.tab.get_current_directory()
command = None command = None
for path in paths: for path in paths:
command = f"exec '{path}'" if not in_terminal else f"{state.tab.terminal_app} -e '{path}'" command = f"{shlex.quote(path)}" if not in_terminal else f"{state.tab.terminal_app} -e {shlex.quote(path)}"
state.tab.execute(command, start_dir=state.tab.get_current_directory(), use_os_system=False) state.tab.execute(shlex.split(command), start_dir=state.tab.get_current_directory())
def archive_files(self, archiver_dialogue): def archive_files(self, archiver_dialogue):
state = self.get_current_state() state = self.get_current_state()
paths = self.format_to_uris(state.store, state.wid, state.tid, self.selected_files, True) _paths = self.format_to_uris(state.store, state.wid, state.tid, self.selected_files, True)
paths = []
for p in _paths:
paths.append(shlex.quote(p))
save_target = archiver_dialogue.get_filename(); save_target = archiver_dialogue.get_filename();
sItr, eItr = self.arc_command_buffer.get_bounds() sItr, eItr = self.arc_command_buffer.get_bounds()
pre_command = self.arc_command_buffer.get_text(sItr, eItr, False) pre_command = self.arc_command_buffer.get_text(sItr, eItr, False)
pre_command = pre_command.replace("%o", save_target) pre_command = pre_command.replace("%o", shlex.quote(save_target))
pre_command = pre_command.replace("%N", ' '.join(paths)) pre_command = pre_command.replace("%N", ' '.join(paths))
command = f"{state.tab.terminal_app} -e '{pre_command}'" command = f"{state.tab.terminal_app} -e {shlex.quote(pre_command)}"
state.tab.execute(command, start_dir=None, use_os_system=True) state.tab.execute(shlex.split(command), start_dir=shlex.quote(state.tab.get_current_directory()))
def rename_files(self): def rename_files(self):
rename_label = self.builder.get_object("file_to_rename_label") rename_label = self.builder.get_object("file_to_rename_label")

View File

@ -1,7 +1,7 @@
# Python imports # Python imports
import copy import copy
from os.path import isdir, isfile import traceback
from os.path import isdir
# Lib imports # Lib imports
import gi import gi
@ -206,6 +206,7 @@ class WindowMixin(TabMixin):
else: else:
self.open_files() self.open_files()
except Exception as e: except Exception as e:
traceback.print_exc()
self.display_message(self.error_color, f"{repr(e)}") self.display_message(self.error_color, f"{repr(e)}")

View File

@ -1,6 +1,5 @@
# System import # System import
import os, threading, subprocess import os, threading, subprocess, shlex
# Lib imports # Lib imports
@ -41,19 +40,17 @@ class Launcher:
else: else:
command = ["xdg-open", file] command = ["xdg-open", file]
self.execute(command, use_shell=False) self.execute(command)
def execute(self, command, start_dir=os.getenv("HOME"), use_os_system=None, use_shell=True): def execute(self, command, start_dir=os.getenv("HOME"), use_shell=False):
self.logger.debug(command) self.logger.debug(command)
if use_os_system: subprocess.Popen(command, cwd=start_dir, shell=use_shell, start_new_session=True, stdout=None, stderr=None, close_fds=True)
os.system(command)
else:
subprocess.Popen(command, cwd=start_dir, shell=use_shell, start_new_session=True, stdout=None, stderr=None, close_fds=True)
def execute_and_return_thread_handler(self, command, start_dir=os.getenv("HOME"), use_shell=True): # TODO: Return stdout and in handlers along with subprocess instead of sinking to null
def execute_and_return_thread_handler(self, command, start_dir=os.getenv("HOME"), use_shell=False):
DEVNULL = open(os.devnull, 'w') DEVNULL = open(os.devnull, 'w')
return subprocess.Popen(command, cwd=start_dir, shell=use_shell, start_new_session=True, stdout=DEVNULL, stderr=DEVNULL, close_fds=True) return subprocess.Popen(command, cwd=start_dir, shell=use_shell, start_new_session=False, stdout=DEVNULL, stderr=DEVNULL, close_fds=False)
@threaded @threaded
def app_chooser_exec(self, app_info, uris): def app_chooser_exec(self, app_info, uris):