Linux環境下Notepad–插件開發指南
在開始開發前,需安裝以下工具和庫:
build-essential
(包含gcc/g++、make等);qt5-default
(Qt5核心庫)、qttools5-dev-tools
(Qt Creator及uic、moc等工具);通過以下命令安裝(Ubuntu/Debian為例):
sudo apt-get install build-essential qt5-default qttools5-dev-tools
若使用Fedora/RHEL,替換為:
sudo dnf install gcc-c++ qt5-devel qt5-linguist
此外,需從Notepad–官方倉庫克隆源碼,以便后續參考插件結構和API:
git clone https://gitcode.com/GitHub_Trending/no/notepad--
遵循Notepad–的插件組織規范,推薦的項目目錄結構如下(以“文本大小寫轉換”插件為例):
src/plugin/helloworld/
├── helloworld.pro # Qt項目配置文件(定義構建規則、依賴項)
├── CMakeLists.txt # CMake構建腳本(可選,替代qmake)
├── helloworldexport.cpp # 插件入口實現(導出核心函數)
├── qttestclass.h # 主窗口類頭文件(定義UI和邏輯接口)
├── qttestclass.cpp # 主窗口類實現(處理用戶交互)
└── qttestclass.ui # UI界面設計文件(通過Qt Designer創建)
該結構便于主程序自動發現和加載插件,同時分離了界面、邏輯和入口代碼。
Notepad–插件必須實現兩個導出函數,用于主程序識別和調用插件:
NDD_PROC_IDENTIFY
:插件身份標識該函數返回插件的基本信息(名稱、版本、作者、菜單類型等),主程序通過此信息在“插件”菜單下創建對應項。
#include <pluginGl.h> // Notepad--插件API頭文件
NDD_EXPORT bool NDD_PROC_IDENTIFY(NDD_PROC_DATA* pData) {
pData->m_strPlugName = "文本大小寫轉換"; // 插件名稱(顯示在菜單)
pData->m_strComment = "支持選中文本的大小寫轉換"; // 插件描述
pData->m_version = "v1.0"; // 版本號(格式:v主版本.次版本)
pData->m_auther = "開發者名稱"; // 作者信息
pData->m_menuType = 1; // 菜單類型:1=在“工具”菜單下創建子菜單
return true; // 返回true表示標識成功
}
NDD_PROC_MAIN
:插件主邏輯入口該函數是插件的核心,主程序通過此函數調用插件的具體功能。需通過getCurEdit()
獲取當前編輯器句柄(QsciScintilla對象),實現對文本的操作。
#include <pluginGl.h>
#include "qttestclass.h" // 自定義主窗口類
NDD_EXPORT int NDD_PROC_MAIN(QWidget* pNotepad, const QString& strFileName,
std::function<QsciScintilla*()> getCurEdit,
std::function<bool(int, void*)> pluginCallBack,
NDD_PROC_DATA* pData) {
QsciScintilla* pEdit = getCurEdit(); // 獲取當前編輯器實例
if (!pEdit) {
qDebug() << "未獲取到編輯器實例!";
return -1; // 返回-1表示執行失敗
}
QtTestClass dlg(pNotepad, pEdit); // 創建自定義對話框(繼承自QWidget)
dlg.exec(); // 顯示對話框,等待用戶操作
return 0; // 返回0表示執行成功
}
其中,QtTestClass
是對話框類,用于實現具體的UI交互(如“轉換為大寫”“轉換為小寫”按鈕),并通過QsciScintilla
的API修改文本內容。
使用Qt Creator打開.pro
項目文件(如helloworld.pro
),配置構建套件(選擇與Notepad–編譯時一致的Qt版本),點擊“構建”按鈕即可生成插件文件(Linux下為.so
動態庫)。
若使用命令行編譯,需編寫CMakeLists.txt
(或直接使用qmake
+make
):
cd src/plugin/helloworld
qmake # 生成Makefile
make -j4 # 編譯(-j4表示使用4線程加速)
make install # 安裝到Notepad--插件目錄
編譯成功后,插件文件(如libhelloworld.so
)會自動復制到Notepad–的插件目錄(Linux下為~/.local/share/notepad--/plugins/
)。無需額外配置,重啟Notepad–后,插件會在“插件”菜單下顯示(如“文本大小寫轉換”)。
NDD_PROC_IDENTIFY
和NDD_PROC_MAIN
的官方原型,避免手動修改參數類型。.pro
文件中添加依賴:QT += core gui widgets
CONFIG += link_pkgconfig
PKGCONFIG += qscintilla2
或通過命令行鏈接:g++ -fPIC -shared helloworld.cpp -o libhelloworld.so $(pkg-config --cflags --libs Qt5Widgets qscintilla2)
.pro
文件中添加:CODECFORSRC = UTF-8
CODECFORTR = UTF-8
然后重新運行qmake
。m_menuType
字段控制菜單顯示方式(如m_menuType=1
表示在“工具”菜單下創建子菜單),并在NDD_PROC_MAIN
中實現具體功能。QsciScintilla
的API(如text()
獲取文本、setText()
設置文本),結合正則表達式實現變量命名轉換(如下劃線轉駝峰式)。QProcess
調用系統命令(如yapf
格式化Python代碼、clang-format
格式化C++代碼),并將結果返回到編輯器。