def _debug_app(self, **kwargs): launcher = Launcher(self.debugger) launcher.addArg(self.exe_file) if self.debugger_is_cgdb: launcher.addArg('--') launcher = self._add_init_file_to_launcher(launcher) return launcher
def __call__(self, **kwargs): launcher = None wait = True if self.debug: if self.useEmacs: launcher = self._emacs_debugger(**kwargs) elif self.debugger: launcher = self._debug_app(**kwargs) else: wait = self.wait launcher = Launcher(self.exe_file, stdout_to_console = True, stderr_to_console = True) if kwargs is not None: for key in kwargs: launcher.addArg('--%s' % key, '%s' % kwargs[key], append=True) launcher(dry_run = self.dry_run, wait_for_command_to_complete = wait)
class EmacsGdb (Emacs): def __init__(self, server_name, **kwargs): super(EmacsGdb, self).__init__(server_name, **kwargs) self.exeToDebug = kwargs.get('exe_to_debug') self.gdb = Locator('gdb').locate() self.gdbCl = Launcher(self.gdb) self.gdbCl.addArg('-i', 'mi', append = True) self.gdbCl.addArg(self.exeToDebug) self.firstArg = True def addArg(self, key, *value, **kwargs): self.gdbCl.addArg (key, *value, **kwargs) def launch(self, **kwargs): self._emacsExpr().addStatement('gdb "%s"' % (self.gdbCl)) self._emacsExpr().addStatement('gdb-many-windows t') super(EmacsGdb, self).launch(**kwargs) def __call__(self, **kwargs): dry_run = kwargs.get('dry_run') self.launch(dry_run = dry_run)
class Emacs(object): def __init__(self, server_name, **kwargs): server_name = server_name.upper() os.environ['CURRENT_PACKAGE_NAME'] = server_name self.open_init_file = kwargs.get('open_init_file', False) self.files = None if not self.open_init_file: self.files = kwargs.get('files', None) self.emacsExpr = None if self.open_init_file: self.emacsExpr = EmacsExpression() self.emacsExpr.addStatement('skg/open-init-file') line = kwargs.get('line', None) if line: self._gotoLine(line) self.exePath = Locator('emacs') self.exeClientPath = Locator('emacsclient') self.homeEnv = os.environ['HOME'] if self._serverRunning(server_name): self._launcher = Launcher(self.exeClientPath) self._launcher += ['-n', '-f', server_name] else: self._launcher = Launcher(self.exePath) def _serverRunning(self, server_name): server_list = self._serverList() s = [item for item in server_list if os.path.basename(item) == server_name] if not s: return False f = open(s[0], 'r') lines = f.read() f.close() pid = int(lines.split('\n')[0].split()[1]) try: os.kill(pid, 0) return True except OSError: return False def _emacsExpr(self): if not self.emacsExpr: self.emacsExpr = EmacsExpression() return self.emacsExpr def _gotoLine(self, line): self._emacsExpr().addStatement('goto-line %s' % (line)) def _serverList(self): servers_dir = os.path.join(self.homeEnv, '.emacs.d', 'server') if os.path.exists(servers_dir): files = [join(servers_dir, f) for f in listdir(servers_dir) if isfile(join(servers_dir, f))] return files return [] def launch(self, **kwargs): dry_run = kwargs.get('dry_run') if self.files: self._launcher.addFiles(self.files) else: self._emacsExpr().addStatement('raise-frame') if self.emacsExpr: self._launcher.addArg('--eval', self.emacsExpr()) debug = kwargs.get('debug', False) if debug: self._launcher.addArg('--debug-init') self._launcher(dry_run = dry_run)