deepin-terminal改造之路

運維筆記發表於2021-03-02

1. 背景介紹

deepin-terminal是我在使用deepin作業系統的時候主要的生產力工具。隨著新版本系統的不斷優化迭代,deepin-terminal從一開始的gtk設計變成了ddk設計,使得應用與作業系統的風格更加統一。

當然我是比較關注deepin-terminal的功能的,簡單實用即可。以前經常使用xshell,對於xshell這個重量級的工具來說,deepin-terminal的功能相對單一,但是很多xshell的功能,又想在deepin-terminal上用到,該怎麼辦?

呼籲官方多次,但是版本的釋出,功能的增加都需要很長的週期,沒有辦法,自己下載原始碼摸索一下,看看能否自己實現自己的需求了。

ddk的程式設計,需要有C++,Qt等基礎知識,同時可能還需要關注一下官方dtk的介面。對於C++和Qt,我只瞭解一點點,硬著頭皮上了。萬事開頭難,前後堅持了大概1個多月吧,頗有成效。下面就分享一下我的deepin-terminal學習和改造之路。

宣告:本篇部落格內容僅限於個人學習和應用,切勿商用,違規自究!如有侵權,請聯絡我刪除!轉載請註明出處!

2. 下載原始碼

本篇原始碼下載地址:https://github.com/linuxdeepin/deepin-terminal/tree/5.4.0.13

下載zip檔案後,解壓到指定目錄

本人解壓到:/home/liwl/,解壓後可以看到目錄/home/liwl/deepin-terminal-5.4.0.13

3. 依賴檢查及安裝

cd /home/liwl/deepin-terminal-5.4.0.13

可以先閱讀該目錄下的README.md內容,便於瞭解整個過程

首先是檢查依賴

在該目錄下執行sudo apt build-dep .,即可檢查和安裝依賴關係

編譯和安裝

在該目錄下執行mkdir build; cd build; cmake ..; make; sudo install make

就是整個編譯和安裝的過程了,簡單明瞭

特別注意:為了能夠很好的展示效果,建議先解除安裝deepin-terminal,因為系統自帶的deepin-terminal執行路徑是:/usr/bin/deepin-terminal,而手動編譯的deepin-terminal安裝路徑在/usr/local/bin/deepin-terminal,自帶的deepin-terminal可能會影響手動編譯的。另外,編譯安裝結束後,建議通過啟動器上面的終端圖示啟動,避免使用快捷鍵啟動。也可以嘗試修改CMakeFile.txt,把手動編譯的deepin-terminal安裝到/usr/bin/目錄下,覆蓋系統自帶deepin-terminal

4. 改造之路

本人基本完成了以下功能特性:

  • 新增了“終端透明度”的快捷鍵設定選項
  • 新增了“雙擊可選中的特殊符號”的設定選項
  • 新增了“啟動初始目錄”的設定選項
  • 新增了“顯示設定介面”的快捷鍵設定選項
  • 右鍵新增了“翻譯”的選項
  • 右鍵新增了“使用文字編輯器開啟”的選項
  • 加粗了游標下劃線
  • 修改了預設Dark主題配色
  • 替換了一個內建主題

未完成的需求:

  • 快捷鍵切換主題
  • 突出顯示敏感內容
  • 彈窗或者側邊欄顯示翻譯內容
  • 雙擊選中中文句子

4.1 終端透明度快捷鍵

4.1.1 設定皮膚增加選項內容

在“設定“皮膚裡面新增選項,需要通過一個json檔案配置,原始碼在編譯過程中會自動解析該json檔案,生成介面元件

該json就是:/home/liwl/deepin-terminal-5.4.0.13/src/assets/other/default-config.json

本人慾把”終端透明度“快捷鍵設定在”複製“前面,所以保持json裡面的內容也在其前面。

在default-config.json檔案中找到以下內容:

{
    "key": "copy",
    "name":	"Copy",
    "type":	"shortcut",
    "default":	"Ctrl+Shift+C"
},

修改為:

{
    "key":	"opacity",
    "name":	"Opacity",
    "type":	"shortcut",
	"default":	"Alt+r"
},
{
    "key": "copy",
    "name":	"Copy",
    "type":	"shortcut",
    "default":	"Ctrl+Shift+C"
},

儲存並退出

4.1.2 新增配置解析內容

vim 開啟檔案:/home/liwl/deepin-terminal-5.4.0.13/src/settings/settings_translation.cpp,在最後一行大括號上面,新增內容:

auto shortcuts_terminal_opacityName = QObject::tr("Opacity");
Q_UNUSED(shortcuts_terminal_opacityName);

注意參照該檔案的其他部分內容修改,即注意shortcuts_terminal_opacityName為何如何書寫

儲存並退出

4.1.3 功能實現

這部分主要是三個步驟:

其一,在void MainWindow:initShortcuts()方法的內部,新增以下內容:

connect(createNewShotcut("shortcuts.terminal.opacity"),&QShortcut::activated,this,&MainWindow::slotShortcutOpacity); //這是增加的部分,注意分號不要丟了

//copy 
connect(createNewShotcut("shortcuts.terminal.copy"), &QShortcut::activated, this, &MainWindow::slotShortcutCopy);

其二,在void MainWindow::slotShortcutCopy()方法的上面,實現slotShortcutOpacity()

void MainWindow::slotShortcutOpacity(){
        TermWidgetPage *page = currentPage();
        if (page){
                if (Settings::instance()->settings->option("basic.interface.opacity")->value().toInt() == 100) {
                        page->setTerminalOpacity(0.85);
                        Settings::instance()->settings->option("basic.interface.opacity")->setValue(85);
                }else{
                        page->setTerminalOpacity(1.0);
                        Settings::instance()->settings->option("basic.interface.opacity")->setValue(100);
                }
                page->focusCurrentTerm();//這個必須有,否則無法聚焦
        }
}//這個方法是新增的內容

void MainWindow::slotShortcutCopy()
{
    TermWidgetPage *page = currentPage();
    if (page) {
        page->copyClipboard();
    }
}

其三,在mainwindow.h新增方法的宣告

void slotShortcutOpacity();//這是新增的內容
void slotShortcutBuiltinCopy();

儲存並退出

4.1.4 編譯安裝

cd /home/liwl/deepin-terminal-5.4.0.13/build
cmake ..
make 
sudo install make
# 預設安裝的路徑是/usr/local/bin/下

編譯安裝的過程,在本篇以下內容全部通用,下文不再贅述

4.1.5 效果展示

4.2 雙擊可選中的特殊符號

該功能在實用性很強,Konsole和xshell都有相關的設定選項,但是deepin-terminal並沒有此功能設定,導致終端在某些使用場景中效率較低。

本部分主要就是實現該功能,把功能選項新增到“高階設定-游標”部分

4.2.1 設定皮膚增加選項內容

首先修改json檔案:vim /home/liwl/deepin-terminal-5.4.0.13/src/assets/other/default-config.json,新增部分如下:

{
	"key": "auto_copy_selection",
	"type": "checkbox",
	"text": "Copy on select",
	"default": true
},
{
	"key": "word_characters",
	"name": "Word characters",
	"type": "lineedit"
}

儲存並退出

4.2.2 新增配置解析內容

vim /home/liwl/deepin-terminal-5.4.0.13/src/settings/settings_translation.cpp

在最後一行的花括號上,新增以下內容:

auto advanced_cursor_word_charactersText = QObject::tr("Word characters");
Q_UNUSED(advanced_cursor_word_charactersText);

注意advanced_cursor_word_charactersText寫法,參照該檔案其他部分內容

儲存並退出

4.2.3 功能實現

本部分主要包括以下幾個步驟:

其一,編輯檔案:vim /home/liwl/deepin-terminal-5.4.0.13/3rdparty/terminalwidget/lib/qtermwidget.h

新增以下內容:

QFont getTerminalFont();
void setTerminalOpacity(qreal level);

//add by liwl@2021.03.02,begin
void setTerminalWordCharacters(const QString &wc);
//add by liwl@2021.03.02,end

void setTerminalBackgroundImage(QString backgroundImage);
// environment
void setEnvironment(const QStringList &environment);

其二,編輯檔案:vim /home/liwl/deepin-terminal-5.4.0.13/3rdparty/terminalwidget/lib/qtermwidget.cpp

新增以下內容:

void QTermWidget::setTerminalOpacity(qreal level)
{
    m_impl->m_terminalDisplay->setOpacity(level);
}

//add by liwl@2021.03.02,begin
void QTermWidget::setTerminalWordCharacters(const QString &wc)
{
    m_impl->m_terminalDisplay->setWordCharacters(wc);
}
//add by liwl@2021.03.02,end

void QTermWidget::setTerminalBackgroundImage(QString backgroundImage)
{
    m_impl->m_terminalDisplay->setBackgroundImage(backgroundImage);
}

其三,編輯檔案,vim /home/liwl/deepin-terminal-5.4.0.13/src/views/termwidget.h,新增方法宣告:

// 修改游標形狀
void setCursorShape(int shape);
//add by liwl@2021.03.02,begin
void setTermWordCharacters(const QString &wc);
//add by liwl@2021.03.02,end
void setPressingScroll(bool enable);

其四,編輯檔案:vim /home/liwl/deepin-terminal-5.4.0.13/src/views/termwidget.cpp

void TermWidget::setCursorShare(int share)方法下新增以下內容:

/*******************************************************************************
 1. @函式:    setTermWordCharacters
 2. @作者:    liwl
 3. @日期:    2021-03-02
 4. @說明:    設定雙擊可選中的分隔符
*******************************************************************************/
void TermWidget::setTermWordCharacters(const QString &wc)
{
        setTerminalWordCharacters(wc);
}

void TermWidget::onSettingValueChanged(const QString &keyName)方法中的新增以下內容:

//add by liwl@2021-03-02,begin
if (keyName == "advanced.cursor.word_characters") {
	setTermWordCharacters(Settings::instance()->wordCharacters());
	return ;
}
//add by liwl@2021-03-02,en

其五,編輯檔案,/home/liwl/deepin-terminal-5.4.0.13/src/settings/settings.h,新增相關方法宣告

QString fontName();
//add by liwl@2021.03.02,begin
QString wordCharacters() const;//這裡是屬性的宣告
//add by liwl@2021.03.02,end
int fontSize();
void backgroundBlurChanged(bool enabled);
//add by liwl@2021.03.02,begin
void wordCharactersChanged(QString wordCharacters);//這裡是訊號的宣告
//add by liwl@2021.03.02,end
void pressingScrollChanged(bool enabled);

其六,編輯檔案:vim /home/liwl/Documents/liwl_dev/deepin-terminal_modify_by_liwl/src/settings/settings.cpp

void Settings::initConnection()方法中,新增以下內容:

QPointer<DSettingsOption> cursorBlink = settings->option("advanced.cursor.cursor_blink");
connect(cursorBlink, &Dtk::Core::DSettingsOption::valueChanged, this, [ = ](QVariant value) {
	emit cursorBlinkChanged(value.toBool());
});

//add by liwl@2021.03.02,begin
QPointer<DSettingsOption> wordCharacters = settings->option("advanced.cursor.word_characters");
connect(wordCharacters, &Dtk::Core::DSettingsOption::valueChanged, this, [ = ](QVariant value) {
    emit wordCharactersChanged(value.toString());
});
//add by liwl@2021.03.02,end

void Settings::colorScheme() const方法下面,新增以下內容:

/*******************************************************************************
 1. @函式:    wordCharacters
 2. @作者:    liwl
 3. @日期:    2021-03-02
 4. @說明:    設定介面獲取雙擊可選中的符號
*******************************************************************************/
QString Settings::wordCharacters() const
{
    return settings->option("advanced.cursor.word_characters")->value().toString();
}

儲存退出,編譯一次

中文翻譯

這裡有個問題,設定介面"Word characters"未翻譯,進行以下操作:

編輯檔案,vim /home/liwl/deepin-terminal-5.4.0.13/translations/deepin-terminal_zh_CN.ts,修改

<message>
	<location filename="../src/settings/settings_translation.cpp" line="161"/>
	<source>Word characters</source>
	<translation type="unfinished"></translation>
</message>

<message>
	<location filename="../src/settings/settings_translation.cpp" line="161"/>
    <source>Word characters</source>
    <translation>雙擊可選中的特殊符號</translation>
</message>

儲存退出後,再重新進行編譯安裝操作

4.2.4 效果展示

4.3 啟動初始目錄

deepin-terminal預設啟動目錄是使用者的home目錄,但是當前版本沒有提供啟動初始目錄的設定選項。如果經常在某個目錄下工作 ,通過終端進入該目錄,不斷地cd有些繁瑣,直接設定一個deepin-terminal初始目錄,顯得更加高效和人性化。

本部分主要實現該功能。

4.3.1 設定皮膚增加選項內容

本篇把“啟動初始目錄”的設定選項,放置在“基礎設定-介面”區域下

編輯檔案:vim /home/liwl/deepin-terminal-5.4.0.13/src/assets/other/default-config.json

修改內容為:

{
    "key":	"work_directory",
    "name":	"Work directory",
    "type":	"lineedit"
},
{                                                                 
	"key": "opacity",                                             
	"name": "Opacity",                                            
	"type": "slider",                                             
	"max": 100,                                                   
	"min": 20,                                                    
 	"default": 100                                                
},

儲存並退出

4.3.2 新增配置解析內容

編輯檔案:vim /home/liwl/deepin-terminal-5.4.0.13/src/settings/settings_translation.cpp

在最後一行花括號上面,新增以下內容:

auto basic_interface_work_directoryName = QObject::tr("Work directory");
Q_UNUSED(basic_interface_work_directoryName);

儲存退出

新增中文翻譯

首先編譯一下:

cd /home/liwl/deepin-terminal-5.4.0.13/build
cmake ..
make

然後修改翻譯檔案:

vim /home/liwl/deepin-terminal-5.4.0.13/translations/deepin-terminal_zh_CN.ts

<message>
    <location filename="../src/settings/settings_translation.cpp" line="163"/>
    <source>Work directory</source>
    <translation type="unfinished"></translation>
</message

上面內容修改為以下內容:

<message>
    <location filename="../src/settings/settings_translation.cpp" line="163"/>
    <source>Work directory</source>
    <translation>啟動初始目錄</translation>
</message

然後再進行一次編譯即可

4.3.3 功能程式碼實現

本部分主要包括以下幾個步驟:

其一,編輯檔案:vim /home/liwl/deepin-terminal-5.4.0.13/src/settings/settings.h

修改為以下內容:

QString fontName();
//add by liwl@2021.03.02,begin
QString wordCharacters() const;
QString workDirectory() const;
//add by liwl@2021.03.02,end
int fontSize();
void backgroundBlurChanged(bool enabled);
//add by liwl@2021.03.02,begin
void wordCharactersChanged(QString wordCharacters);
void workDirectoryChanged(QString workDirectory);
//add by liwl@2021.03.02,end
void pressingScrollChanged(bool enabled);

其二,編輯檔案:vim /home/liwl/deepin-terminal-5.4.0.13/src/settings/settings.cpp

修改為以下內容:

QPointer<DSettingsOption> cursorBlink = settings->option("advanced.cursor.cursor_blink");
connect(cursorBlink, &Dtk::Core::DSettingsOption::valueChanged, this, [ = ](QVariant value) {
    emit cursorBlinkChanged(value.toBool());
});

//add by liwl@2021.03.02,begin
QPointer<DSettingsOption> wordCharacters = settings->option("advanced.cursor.word_characters");
connect(wordCharacters, &Dtk::Core::DSettingsOption::valueChanged, this, [ = ](QVariant value) {
    emit wordCharactersChanged(value.toString());
});
QPointer<DSettingsOption> workDirectory = settings->option("basic.interface.work_directory");
connect(workDirectory, &Dtk::Core::DSettingsOption::valueChanged, this, [ = ](QVariant value) {
    emit workDirectoryChanged(value.toString());
});
//add by liwl@2021.03.02,end

QPointer<DSettingsOption> backgroundBlur = settings->option("advanced.window.blurred_background");
connect(backgroundBlur, &Dtk::Core::DSettingsOption::valueChanged, this, [ = ](QVariant value) {
    emit backgroundBlurChanged(value.toBool());
});

在 settings.cpp的QSting Settings::wordCharacters() const方法下,新增以下內容:

/*******************************************************************************
 1. @函式:    wordCharacters
 2. @作者:    liwl
 3. @日期:    2021-03-02
 4. @說明:    設定介面獲取終端啟動初始目錄
*******************************************************************************/
QString Settings::workDirectory() const
{
        return settings::option("basic.interface.work_directory")->value().toString();
}

其三,編輯檔案,vim /home/liwl/deepin-terminal-5.4.0.13/src/views/termwidget.cpp

把以下內容:

// WorkingDir
    if (m_properties.contains(WorkingDir)) {
        setWorkingDirectory(m_properties[WorkingDir].toString());
    }

修改為:

// WorkingDir
    if (m_properties.contains(WorkingDir)) {
        setWorkingDirectory(m_properties[WorkingDir].toString());
    }//else add by liwl@2021.02.20
    else{
        QString default_work_diretory = Settings::instance()->workDirectory();
        QFileInfo file(default_work_diretory);
        if (file.exists())
        	setWorkingDirectory(default_work_diretory);
    }//add by liwl end

儲存退出, 編譯安裝

4.3.4 效果展示

4.4 顯示設定介面

在Konsole獲取其他很多應用軟體,都有通過快捷鍵開啟設定的選項,deepin-terminal提供了兩種開啟“設定”的方式:右鍵,選單選項

本部分實現了通過快捷鍵開啟“設定”皮膚,把該設定選項放置在“基礎設定-其他”區域內。

4.4.1 修改設定皮膚的顯示

編輯檔案,vim /home/liwl/deepin-terminal-5.4.0.13/src/assets/other/default-config.json

修改內容如下:

{
    "key":	"display_shortcuts",
    "name":	"Display shortcuts",
    "type":	"shortcut",
    "default":	"Ctrl+Shift+?"
},
{
    "key":	"display_setting",
    "name":	"Display setting",
    "type":	"shortcut",
    "default":	"Ctrl+,"
},

儲存退出

4.4.2 新增配置解析內容

編輯檔案,vim /home/liwl/deepin-terminal-5.4.0.13/src/settings/settings_translation.cpp

在該檔案最後一行的花括號上面,新增以下內容:

auto shortcuts_advanced_display_settingName = QObject::tr("Display setting");
Q_UNUSED(shortcuts_advanced_display_settingName);

儲存退出

新增中文翻譯

首先編譯一下:

cd /home/liwl/deepin-terminal-5.4.0.13/build
cmake ..
make

然後修改翻譯檔案:

vim /home/liwl/deepin-terminal-5.4.0.13/translations/deepin-terminal_zh_CN.ts

修改以下內容:

<message>
    <location filename="../src/settings/settings_translation.cpp" line="165"/>
    <source>Display setting</source>
    <translation type="unfinished"></translation>
</message>

為:

<message>
    <location filename="../src/settings/settings_translation.cpp" line="165"/>
    <source>Display setting</source>
    <translation>顯示設定介面</translation>
</message>

儲存退出後,再次編譯

4.4.3 功能程式碼實現

編輯檔案,vim /home/liwl/deepin-terminal-5.4.0.13/src/main/mainwindow.cpp

修改內容如下:

    // close_other_workspaces
    connect(createNewShotcut("shortcuts.tab.close_other_workspaces"), &QShortcut::activated, this, &MainWindow::slotShortcutCloseOtherWorkspaces);

    //opacity.add by liwl@2021.03.01,begin
    connect(createNewShotcut("shortcuts.terminal.opacity"), &QShortcut::activated, this, &MainWindow::slotShortcutOpacity);
        connect(createNewShotcut("shortcuts.advanced.display_setting"),&QShortcut::activated,Service::instance(),&Service::slotShowSettingsDialog);
    //opacity.add by liwl@2021.03.01,end

    // copy
    connect(createNewShotcut("shortcuts.terminal.copy"), &QShortcut::activated, this, &MainWindow::slotShortcutCopy);

儲存退出後,編譯安裝

4.4.4 效果展示

4.5 右鍵翻譯

本部分主要實現了選中內容後,右鍵-翻譯,通過瀏覽器開啟翻譯介面,顯示翻譯結果

4.5.1 功能實現

編輯檔案,vim /home/liwl/Documents/liwl_dev/deepin-terminal_modify_by_liwl/src/views/termwidget.cpp

void TermWidget::addMenuActions(const QPoint &pos)方法內,修改內容如下:

if (!m_menu->isEmpty()) {                                                             
    m_menu->addSeparator();                                                           
}                                                                                     
                                                                                          
//add by liwl@2021.03.02,begin                                                    
if (!selectedText().isEmpty()){                                                   
    m_menu->addAction(tr("Transfer"),this,[this]){                            
            QString strurl = "https://fanyi.baidu.com/#en/zh/" + selectedText();
            QDesktopServices::openUrl(strurl);
            }
 }
//add by liwl@2021.03.02,end 

儲存退出,執行一次編譯

中文翻譯

編輯檔案,vim /home/liwl/deepin-terminal-5.4.0.13/translations/termwidget.cpp

修改以下內容:

<message>
    <location filename="../src/views/termwidget.cpp" line="416"/>
    <source>Transfer</source>
    <translation type="unfinished"></translation>
</message>

為:

<message>
    <location filename="../src/views/termwidget.cpp" line="416"/>
    <source>Transfer</source>
    <translation>翻譯</translation>
</message>

儲存退出後,編譯安裝

4.5.2 效果展示

4.6 右鍵文字編輯器開啟

本部分主要實現把複製的內容,使用文字編輯器開啟

4.6.1 功能實現

功能實現已經很簡單,在4.5.1的基礎上修改程式碼,如下:

vim /home/liwl/Documents/liwl_dev/deepin-terminal_modify_by_liwl/src/views/termwidget.cpp

if (!selectedText().isEmpty()) {
    m_menu->addAction(tr("Transfer"), this, [this] { 
        QString strurl = "https://fanyi.baidu.com/#en/zh/" + selectedText();
        QDesktopServices::openUrl(QUrl(strurl));
     });

     //add by liwl@2021.03.02,begin
     m_menu->addAction(tr("Open by deepin-editor"),this,[this] {
           QFile tmpFile;
           QString tmpFileName("/tmp/tmp.txt");
           tmpFile.setFileName(tmpFileName);
           if (tmpFile.open(QIODevice::WriteOnly|QIODevice::Text)){
            	QTextStream stream(&tmpFile);
                stream << selectedText()<<"\n";
                tmpFile.close();
            };
            QString cmd = QString("xdg-open /tmp/tmp.txt");
            system(cmd.toStdString().c_str());
    });  // add by liwl@2021.03.02,end
}

因為程式碼中用到了QTextStream,所以必須新增標頭檔案:

#include <QTextStream>

儲存退出,編譯一次

這段程式碼寫的比較渣,本意是想把剪下板的內容使用文字編輯器直接開啟,而非使用文字編輯器開啟檔案

中文翻譯

編輯檔案,vim /home/liwl/deepin-terminal-5.4.0.13/translations/deepin-terminal_zh_CN.ts

修改以下內容:

<message>
    <location filename="../src/views/termwidget.cpp" line="426"/>
    <source>Open by deepin-editor</source>
    <translation type="unfinished"></translation>
</message>

為:

<message>
    <location filename="../src/views/termwidget.cpp" line="426"/>
    <source>Open by deepin-editor</source>
    <translation>使用文字編輯器開啟</translation>
</message>

儲存退出後,編譯安裝

4.6.2 效果展示

4.7 游標下劃線加粗

deepin-terminal的游標下劃線很細,在終端和vim模式下存在感很低,很多時候因為看不到游標在哪裡而不得不尋找半天,拉低效率。

4.7.1 修改設定皮膚的顯示

編輯檔案,vim /home/liwl/deepin-terminal-5.4.0.13/src/assets/other/default-config.json,

修改為以下內容:

{
    "key":	"cursor_share",
    "name":	"Cursor style",
    "type":	"buttongroup",
    "items": ["▐","▂","|"],
    "default":0,
    "i18n_skip_keys": ["items"]
},

4.7.2 程式碼修改

編輯檔案,vim /home/liwl/deepin-terminal-5.4.0.13/3rdparty/terminalwidget/lib/TerminalDisplay.cpp,

修改原始碼:

else if ( _cursorShape == Emulation::KeyboardCursorShape::UnderlineCursor )
	painter.drawLine(QLineF(
                    QPointF(cursorRect.left(),
                            cursorRect.bottom()),
        			QPointF(cursorRect.right(),
                            cursorRect.bottom())));

為:

else if ( _cursorShape == Emulation::KeyboardCursorShape::UnderlineCursor )
       {
			for (int i = 0; i <= 3; ++i)
      				painter.drawLine(QLineF( QPointF(cursorRect.left(), cursorRect.bottom()+i), QPointF(cursorRect.right(), cursorRect.bottom()+i)));
        }

即用一個for迴圈,多畫3條線實現加粗,儲存退出,編譯安裝

4.7.3 效果展示

4.8 修改主題配色

本部分主要介紹如何修改主題配色,主要操作目錄為:

cd /home/liwl/deepin-terminal-5.4.0.13/3rdparty/terminalwidget/lib/color-schemes

該目錄定義了deepin-terminal的Dark主題,Light主題,還有內建的其他10個主題

如果修改某個主題的配色,比如修改Dark的主題配色,只需要編輯Dark.colorscheme檔案

那麼如何替換掉內建主題呢?

比如我想把內建的第二個主題Empathy換成Breeze主題,操作如下:

把BreezeModified.colorscheme檔案內部的

[Background]
[BackgroundIntense]
[Color0]
[Color0Intense]
[Color1]
[Color1Intense]
[Color2]
[Color2Intense]
[Color3]
[Color3Intense]
[Color4]
[Color4Intense]
[Color5]
[Color5Intense]
[Color6]
[Color6Intense]
[Color7]
[Color7Intense]
[Foreground]
[ForegroundIntense]
[General]

配置欄位下面的Color引數值,替換掉Theme2.colorscheme中相應配置欄位下面的Color引數即可。

然後修改檔案:vim /home/liwl/deepin-terminal-5.4.0.13/src/main/mainwindow.h

static constexpr const char *THEME_TWO_NAME                 = "Breeze";

儲存退出,編譯安裝即可

這裡不在贅述詳細的操作過程,僅貼2張效果圖

修改前:

修改後:

相關文章