def __init__(self, **kwargs): super(TerminalDock, self).__init__(**kwargs) self.setWindowTitle(_("Terminal")) self.setObjectName(_("TerminalDock")) self.tabTerminals = TabbedTerminal(self) self.setWidget(self.tabTerminals) # Manager self.backendManager = BackendManager(parent = self) self.application().aboutToQuit.connect(self.backendManager.stopAll) # Local Backend self.backend = self.backendManager.localBackend() self.backend.started.connect(self.tabTerminals.newTerminal) self.backend.start()
class TerminalDock(PrymatexDock, QtWidgets.QDockWidget): ICON = "dock-terminal" PREFERED_AREA = QtCore.Qt.BottomDockWidgetArea # ------------------ Settings @ConfigurableItem(default="default") def default_scheme(self, name): if not self.editor_theme: self.tabTerminals.setColorScheme(name) @ConfigurableItem(default=("Monospace", 9)) def default_font(self, font): self.tabTerminals.setFont(QtGui.QFont(*font)) @ConfigurableItem(default=False) def editor_theme(self, value): if value: # Trigger on register self.application().registerSettingCallback("code_editor.defaultTheme", self.on_defaultTheme_changed) else: self.application().unregisterSettingCallback("code_editor.defaultTheme", self.on_defaultTheme_changed) self.tabTerminals.setColorScheme(self.settings().get("defaultScheme")) synchronize_editor = ConfigurableItem(default=False) buffer_size = ConfigurableItem(default=300) def __init__(self, **kwargs): super(TerminalDock, self).__init__(**kwargs) self.setWindowTitle(_("Terminal")) self.setObjectName(_("TerminalDock")) self.tabTerminals = TabbedTerminal(self) self.setWidget(self.tabTerminals) # Manager self.backendManager = BackendManager(parent = self) self.application().aboutToQuit.connect(self.backendManager.stopAll) # Local Backend self.backend = self.backendManager.localBackend() self.backend.started.connect(self.tabTerminals.newTerminal) self.backend.start() def initialize(self, **kwargs): super(TerminalDock, self).initialize(**kwargs) self.window().editorChanged.connect(self.on_window_editorChanged) # ---------------- Settings hooks def on_defaultTheme_changed(self, themeUUID): theme = self.application().supportManager.getBundleItem(themeUUID) scheme = ColorScheme(theme.name) styles = theme.style() # Foreground and background scheme.setBackground(styles["background"]) scheme.setBackground(styles["selection"], intense = True) scheme.setForeground(styles["foreground"]) scheme.setForeground(styles["lineHighlight"], intense = True) # Mapping scopes :) scopes = SHEME_SCOPES[:] random.shuffle(scopes) scopes = scopes[:16] for index, scope in enumerate(scopes[:8]): scheme.setColor(index, theme.style(scope)["foreground"]) for index, scope in enumerate(scopes[8:]): scheme.setColor(index, theme.style(scope)["foreground"], intense = True) self.tabTerminals.setColorScheme(scheme) # ---------------- Signals def on_window_editorChanged(self, editor): if self.synchronize_editor: if editor is not None and not editor.isNew(): dirname = self.application().fileManager.dirname(editor.filePath()) self.runCommand('cd "%s"' % dirname) # ---------------- Commands def runCommand(self, command): self.sendCommand(command) def sendCommand(self, command): currentTerminal = self.tabTerminals.currentTerminal() if currentTerminal: if not self.isVisible(): self.show() self.raise_() currentTerminal.send("%s\n" % command) @classmethod def contributeToSettings(cls): from prymatex.gui.settings.terminal import TerminalSettingsWidget return [ TerminalSettingsWidget ]