Example #1
0
 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()
Example #2
0
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 ]