• deepin-terminal改造之路


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

    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()<<"
    ";
                    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张效果图

    修改前:

    修改后:

    【 欢迎交流探讨!邮箱:yunweinote@126.com】
  • 相关阅读:
    代码规范 for node.js with 'npm-coding-style'
    转:HL7 Tools suite
    转 HL7 2.x
    创建公共配置表,并以全国区县代码维护为例
    转 MySQL 数据备份与还原
    [转]''\=DevExpress 中 汉化包 汉化方法
    MSI Error 1603 installing AppFabric 1.1 / Win7 x64
    [转]如何修改远程桌面默认端口号
    【转】windows server 2012清除并重建SID
    oneM2M标准发展神速 实现万物联网的愿景
  • 原文地址:https://www.cnblogs.com/liwanliangblog/p/14469250.html
Copyright © 2020-2023  润新知