天天看點

deepin-terminal改造之路

目錄

  • 1. 背景介紹
  • 2. 下載下傳源碼
  • 3. 依賴檢查及安裝
  • 4. 改造之路
    • 4.1 終端透明度快捷鍵
      • 4.1.1 設定面闆增加選項内容
      • 4.1.2 添加配置解析内容
      • 4.1.3 功能實作
      • 4.1.4 編譯安裝
      • 4.1.5 效果展示
    • 4.2 輕按兩下可選中的特殊符号
      • 4.2.1 設定面闆增加選項内容
      • 4.2.2 添加配置解析内容
      • 4.2.3 功能實作
      • 4.2.4 效果展示
    • 4.3 啟動初始目錄
      • 4.3.1 設定面闆增加選項内容
      • 4.3.2 添加配置解析内容
      • 4.3.3 功能代碼實作
      • 4.3.4 效果展示
    • 4.4 顯示設定界面
      • 4.4.1 修改設定面闆的顯示
      • 4.4.2 添加配置解析内容
      • 4.4.3 功能代碼實作
      • 4.4.4 效果展示
    • 4.5 右鍵翻譯
      • 4.5.1 功能實作
      • 4.5.2 效果展示
    • 4.6 右鍵文本編輯器打開
      • 4.6.1 功能實作
      • 4.6.2 效果展示
    • 4.7 光标下劃線加粗
      • 4.7.1 修改設定面闆的顯示
      • 4.7.2 代碼修改
      • 4.7.3 效果展示
    • 4.8 修改主題配色

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學習和改造之路。

[2020年4月1号更新]

deepin20.1版本更新到20.2之後,deepin-terminal無法正常打開,需要重新編譯。

編譯過程發現報錯,解決方式如下:

在報錯的源碼檔案中,添加頭檔案:#include<QPainterPath>,然後重新編譯

如果安裝之後依然無法使用,需要删除系統中deepin-terminal全部檔案,重新編譯安裝即可

注:使用root使用者執行

find / -name deepin-terminal 2>/dev/null|egrep usr|xargs rm -rf

聲明:本篇部落格内容僅限于個人學習和應用,切勿商用,違規自究!如有侵權,請聯系我删除!轉載請注明出處!

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 效果展示

deepin-terminal改造之路

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 [email protected],begin
void setTerminalWordCharacters(const QString &wc);
//add by [email protected],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 [email protected],begin
void QTermWidget::setTerminalWordCharacters(const QString &wc)
{
    m_impl->m_terminalDisplay->setWordCharacters(wc);
}
//add by [email protected],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 [email protected],begin
void setTermWordCharacters(const QString &wc);
//add by [email protected],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 [email protected],begin
QString wordCharacters() const;//這裡是屬性的聲明
//add by [email protected],end
int fontSize();
           
void backgroundBlurChanged(bool enabled);
//add by [email protected],begin
void wordCharactersChanged(QString wordCharacters);//這裡是信号的聲明
//add by [email protected],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 [email protected],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 [email protected],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 效果展示

deepin-terminal改造之路

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 [email protected],begin
QString wordCharacters() const;
QString workDirectory() const;
//add by [email protected],end
int fontSize();
           
void backgroundBlurChanged(bool enabled);
//add by [email protected],begin
void wordCharactersChanged(QString wordCharacters);
void workDirectoryChanged(QString workDirectory);
//add by [email protected],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 [email protected],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 [email protected],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 [email protected]
    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 效果展示

deepin-terminal改造之路

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 [email protected],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 [email protected],end

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

儲存退出後,編譯安裝

4.4.4 效果展示

deepin-terminal改造之路

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 [email protected],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 [email protected],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 效果展示

deepin-terminal改造之路

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 [email protected],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 [email protected],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 效果展示

deepin-terminal改造之路

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 效果展示

deepin-terminal改造之路

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張效果圖

修改前:

deepin-terminal改造之路

修改後:

deepin-terminal改造之路