Warning, /maui/station/src/widgets/Terminal.qml is written in an unsupported language. File is not indexed.

0001 import QtQuick 2.14
0002 import QtQuick.Controls 2.14
0003 
0004 import org.mauikit.controls 1.3 as Maui
0005 import org.mauikit.terminal 1.0 as Term
0006 
0007 Maui.SplitViewItem
0008 {
0009     id: control
0010 
0011     property string path : "$HOME"
0012 
0013     function forceActiveFocus()
0014     {
0015         control.kterminal.forceActiveFocus()
0016     }
0017 
0018     enum TabTitle
0019     {
0020         ProcessName,
0021         WorkingDirectory,
0022         Auto
0023     }
0024 
0025     readonly property alias terminal : _terminal
0026     readonly property alias session : _terminal.session
0027     readonly property string title : switch(settings.tabTitleStyle)
0028                                      {
0029                                      case Terminal.TabTitle.ProcessName : return _terminal.session.foregroundProcessName
0030                                      case Terminal.TabTitle.WorkingDirectory : return _terminal.session.currentDir
0031                                      case Terminal.TabTitle.Auto : return terminal.title
0032                                      }
0033     readonly property alias kterminal : _terminal.kterminal
0034 
0035     property color tabColor : session.foregroundProcessName.startsWith("sudo") ? "red" : "transparent"
0036 
0037     property bool watchForSlience : false
0038 
0039     signal silenceWarning()
0040 
0041     background: Rectangle
0042     {
0043         color: Maui.Theme.backgroundColor
0044         opacity: settings.windowTranslucency ? settings.windowOpacity : 1
0045     }
0046 
0047     Term.Terminal
0048     {
0049         id: _terminal
0050         background: null
0051 
0052         anchors.fill: parent
0053 
0054         session.initialWorkingDirectory : control.path
0055         session.historySize: settings.historySize
0056         session.monitorSilence: control.watchForSlience
0057 
0058         onUrlsDropped: (urls) =>
0059         {
0060             for(var i in urls)
0061                 control.session.sendText(urls[i].replace("file://", "")+ " ")
0062         }
0063 
0064         kterminal.font: settings.font
0065         kterminal.colorScheme: settings.adaptiveColorScheme ? "Adaptive" : settings.colorScheme
0066         kterminal.lineSpacing: settings.lineSpacing
0067         kterminal.backgroundOpacity: settings.windowTranslucency ? 0 : 1
0068 
0069         kterminal.enableBold : settings.enableBold
0070         kterminal.blinkingCursor : settings.blinkingCursor
0071         kterminal.fullCursorHeight : settings.fullCursorHeight
0072         kterminal.antialiasText : settings.antialiasText
0073 
0074         menu: MenuItem
0075         {
0076             enabled: !settings.watchForSilence
0077             text: i18n("Watch for Silence")
0078             checkable: true
0079             checked: control.watchForSlience
0080             onTriggered:
0081             {
0082                 control.watchForSlience = !control.watchForSlience
0083             }
0084         }
0085 
0086         onKeyPressed: (event) =>
0087         {
0088             if ((event.key == Qt.Key_Tab) && (event.modifiers & Qt.ControlModifier)  && (event.modifiers & Qt.ShiftModifier))
0089             {
0090                 control.SplitView.view.incrementCurrentIndex();
0091                 currentTerminal.forceActiveFocus()
0092                 event.accepted = true
0093                 return
0094             }
0095 
0096             if ((event.key == Qt.Key_Right) && (event.modifiers & Qt.ControlModifier) && (event.modifiers & Qt.ShiftModifier))
0097             {
0098                 split()
0099                 event.accepted = true
0100                 return
0101             }
0102 
0103             if ((event.key == Qt.Key_T) && (event.modifiers & Qt.ControlModifier) && (event.modifiers & Qt.ShiftModifier))
0104             {
0105                 root.openTab(control.session.intialWorkingDirectory)
0106                 event.accepted = true
0107                 return
0108             }
0109         }
0110 
0111         Connections
0112         {
0113             target: _terminal.session
0114 
0115             function onBellRequest(message)
0116             {
0117                 console.log("Bell REQUESTED!!!", message);
0118             }
0119 
0120             function onProcessHasSilent(value)
0121             {
0122                 if(control.watchForSlience && value && control.session.hasActiveProcess )
0123                     control.silenceWarning()
0124             }
0125 
0126             function onForegroundProcessNameChanged()
0127             {
0128                 var process = control.session.foregroundProcessName
0129 
0130                 switch (process)
0131                 {
0132                 case "nano" : settings.keysModelCurrentIndex = 1; break;
0133                 case "htop" : settings.keysModelCurrentIndex = 0; break;
0134                 }
0135             }
0136 
0137             function onFinished()
0138             {
0139                 console.log("ASKED TO CLOSE SESSION")
0140                 if(currentTab.count === 1)
0141                 {
0142                     closeTab(currentTabIndex)
0143                 }else
0144                 {
0145                 closeSplit()
0146                 }
0147             }
0148         }
0149     }
0150 }