| 128 | } |
| 129 | |
| 130 | UITerminal* StatusTerminalController::createTerminal( |
| 131 | const std::string& workingDir, std::string program, std::vector<std::string> args, |
| 132 | const std::unordered_map<std::string, std::string>& env ) { |
| 133 | Sizef initialSize( 16, 16 ); |
| 134 | if ( program.empty() && !mContext->termConfig().shell.empty() ) |
| 135 | program = mContext->termConfig().shell; |
| 136 | |
| 137 | if ( args.empty() && !mContext->termConfig().shellArgs.empty() ) |
| 138 | args = Process::parseArgs( mContext->termConfig().shellArgs ); |
| 139 | |
| 140 | UITerminal* term = UITerminal::New( |
| 141 | mContext->getTerminalFont() ? mContext->getTerminalFont() : mContext->getFontMono(), |
| 142 | mContext->termConfig().fontSize.asPixels( 0, Sizef(), mContext->getDisplayDPI() ), |
| 143 | initialSize, program, args, env, |
| 144 | !workingDir.empty() ? workingDir |
| 145 | : mContext->getTerminalManager()->getSelectedWorkingDir(), |
| 146 | 10000, nullptr, false ); |
| 147 | |
| 148 | if ( term == nullptr || term->getTerm() == nullptr ) { |
| 149 | mContext->getTerminalManager()->displayError( workingDir ); |
| 150 | return nullptr; |
| 151 | } |
| 152 | |
| 153 | const auto& terminalColorSchemes = mContext->getTerminalManager()->getTerminalColorSchemes(); |
| 154 | const auto& currentTerminalColorScheme = |
| 155 | mContext->getTerminalManager()->getTerminalCurrentColorScheme(); |
| 156 | auto csIt = terminalColorSchemes.find( currentTerminalColorScheme ); |
| 157 | term->getTerm()->getTerminal()->setAllowMemoryTrimnming( true ); |
| 158 | term->getTerm()->setCursorMode( mContext->termConfig().cursorStyle ); |
| 159 | term->setExclusiveMode( mContext->termConfig().exclusiveMode ); |
| 160 | term->setScrollViewType( mContext->termConfig().scrollBarType ); |
| 161 | term->setVerticalScrollMode( mContext->termConfig().scrollBarMode ); |
| 162 | |
| 163 | term->setColorScheme( csIt != terminalColorSchemes.end() |
| 164 | ? terminalColorSchemes.at( currentTerminalColorScheme ) |
| 165 | : TerminalColorScheme::getDefault() ); |
| 166 | mContext->getTerminalManager()->setKeybindings( term ); |
| 167 | |
| 168 | mApp->registerUnlockedCommands( *term ); |
| 169 | |
| 170 | term->setCommand( "switch-to-previous-colorscheme", [this] { |
| 171 | auto it = mContext->getTerminalManager()->getTerminalColorSchemes().find( |
| 172 | mContext->getTerminalManager()->getTerminalCurrentColorScheme() ); |
| 173 | auto prev = std::prev( it, 1 ); |
| 174 | if ( prev != mContext->getTerminalManager()->getTerminalColorSchemes().end() ) { |
| 175 | mContext->getTerminalManager()->setTerminalColorScheme( prev->first ); |
| 176 | } else { |
| 177 | mContext->getTerminalManager()->setTerminalColorScheme( |
| 178 | mContext->getTerminalManager()->getTerminalColorSchemes().rbegin()->first ); |
| 179 | } |
| 180 | } ); |
| 181 | term->setCommand( "switch-to-next-colorscheme", [this] { |
| 182 | auto it = mContext->getTerminalManager()->getTerminalColorSchemes().find( |
| 183 | mContext->getTerminalManager()->getTerminalCurrentColorScheme() ); |
| 184 | mContext->getTerminalManager()->setTerminalColorScheme( |
| 185 | ++it != mContext->getTerminalManager()->getTerminalColorSchemes().end() |
| 186 | ? it->first |
| 187 | : mContext->getTerminalManager()->getTerminalColorSchemes().begin()->first ); |
no test coverage detected