zoukankan      html  css  js  c++  java
  • 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】
  • 相关阅读:
    BZOJ 2034 【2009国家集训队】 最大收益
    vijos P1780 【NOIP2012】 开车旅行
    BZOJ 2115 【WC2011】 Xor
    BZOJ 3631 【JLOI2014】 松鼠的新家
    BZOJ 4717 改装
    BZOJ 2957 楼房重建
    BZOJ 4034 【HAOI2015】 T2
    BZOJ 1834 【ZJOI2010】 network 网络扩容
    BZOJ 2440 【中山市选2011】 完全平方数
    BZOJ 2733 【HNOI2012】 永无乡
  • 原文地址:https://www.cnblogs.com/liwanliangblog/p/14469250.html
Copyright © 2011-2022 走看看