国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

不想使用notepad++,快使用notepad--來(lái)替換

這篇具有很好參考價(jià)值的文章主要介紹了不想使用notepad++,快使用notepad--來(lái)替換。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

相信越來(lái)越多的人已經(jīng)認(rèn)識(shí)到notepad++作者的可惡了,我曾經(jīng)也是notepad++的使用者,當(dāng)我看到它的作者一個(gè)臺(tái)灣人,明目張膽的利用軟件開始宣傳他的錯(cuò)誤觀點(diǎn)后,便覺(jué)得要做些什么了。

notepad++不過(guò)是一個(gè)小軟件,談不上復(fù)雜,而且不支持mac和linux平臺(tái)。我?guī)缀趺刻於家褂镁庉嬈?,既然這樣,我為何不來(lái)自己做一款呢?順便做一個(gè)跨平臺(tái)版本的。既然他叫notepad++,那我就notepad--吧,減少一些錯(cuò)誤言論,減少一些自以為是,簡(jiǎn)稱ndd。我相信國(guó)內(nèi)有大把的同行,都可以做出這種類似的小軟件。不過(guò)恰好大公司瞧不上,小公司沒(méi)技術(shù),那就我來(lái)做吧。

notepad++ 功能簡(jiǎn)單,只能在windows上使用,不支持linux和mac平臺(tái),而且基于政治方面的原因,notepad++的作者如果再這么繼續(xù)作死下去,notepad++在國(guó)內(nèi)下架是遲早的事情。目前已經(jīng)在網(wǎng)絡(luò)上有大量的言論,都在反對(duì)使用notepad++。但是notepad++的作者依然是我行我素,他以為我大陸沒(méi)人可以治得了它,大家雖然嘴上討厭,但是沒(méi)有可以替換它的同類軟件吧。

在我編寫對(duì)比軟件ccompare的過(guò)程中,我發(fā)現(xiàn)其核心功能,已經(jīng)具備一個(gè)文本編輯器的雛形了。只需要再多花一部分額外的精力,便可以成為一個(gè)功能基本可以替換notepad++的簡(jiǎn)單文本編輯器。

notepad--,qt?,notepad--,編輯器

?notepad--,qt?,notepad--,編輯器

?于是說(shuō)干就干吧。一番研究后發(fā)現(xiàn),notepad其實(shí)只是一個(gè)外包裝,其內(nèi)部是大名鼎鼎的開源編輯器核心控件scintilla,所以notepad++作者的水平,其實(shí)也遠(yuǎn)遠(yuǎn)沒(méi)有達(dá)到他自以為是的高度。只要解放了國(guó)內(nèi)的996環(huán)境,給程序員更好的個(gè)人時(shí)間,可以想象,國(guó)內(nèi)一定可以冒出一大批優(yōu)秀的自由軟件出來(lái)。

我相信國(guó)內(nèi)至少有百分之十的程序員,是具備編寫操作系統(tǒng)、編譯器、編輯器水平的。不過(guò)大家都被996和幾兩碎銀壓的踹不過(guò)氣來(lái)。只要解放程序員,把他們從低水平的體力活中解放出來(lái),中國(guó)的基礎(chǔ)軟件才能看到希望。

notepad--,qt?,notepad--,編輯器

不過(guò)要想短時(shí)間取代notepad++的市場(chǎng),也基本是不可能的。目前國(guó)內(nèi)的應(yīng)用軟件,稍微偏底層的一些東西,比如文本編輯器,解析器、編譯器,更不要提操作系統(tǒng),幾乎全部被國(guó)外所把持。我想作為一個(gè)老的程序員,雖然技術(shù)可能已經(jīng)被潮流淘汰了,但是在底層基礎(chǔ)建設(shè)方面,還是可以發(fā)揮一些余熱。準(zhǔn)備優(yōu)先在國(guó)產(chǎn)統(tǒng)uos系上,發(fā)布并維護(hù)替換Notepad++的同類軟件——notepad--。

至于有沒(méi)有市場(chǎng),會(huì)不會(huì)成功,能不能轉(zhuǎn)換出市場(chǎng)效應(yīng),那就交給時(shí)間吧。


ndd 開源地址:ndd: notepad--是一個(gè)國(guó)產(chǎn)跨平臺(tái)、簡(jiǎn)單的文本編輯器,是替換notepad++的一種選擇。其內(nèi)置強(qiáng)大的代碼對(duì)比功能,讓你丟掉付費(fèi)的beyond compare。 (gitee.com)

notepad--,qt?,notepad--,編輯器

還是貼上一些代碼吧,避免被認(rèn)為是低效的文章。

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);

	QDir::setCurrent(QCoreApplication::applicationDirPath());

#ifdef Q_OS_UNIX
    QApplication::setStyle(QStyleFactory::create("fusion"));
#endif
	a.setApplicationDisplayName(c_strTitle);
	a.setApplicationName(c_strTitle);
	
	QStringList arguments = QCoreApplication::arguments();
#ifdef Q_OS_WIN
	QSharedMemory shared("CCNotebook");
#endif
	if (shared.attach())//共享內(nèi)存被占用則直接返回
	{
		//發(fā)現(xiàn)在文件中如果存在空格時(shí),參數(shù)不止1個(gè),所以不能單純用2個(gè)參數(shù)表示
		if (arguments.size() > 1)
		{
        #ifdef Q_OS_WIN

			qlonglong hwndId;
			shared.lock();
			memcpy(&hwndId, shared.data(), sizeof(qlonglong));
			shared.unlock();

			HWND hwnd = (HWND)hwndId;
			if (::IsWindow(hwnd))
			{
				//去掉第一個(gè)參數(shù),后續(xù)的參數(shù)拼接起來(lái)。其實(shí)參數(shù)中間有空格還是需要使用""引用起來(lái),避免空格參數(shù)分隔為多個(gè)
				arguments.takeFirst();

				QString filename = arguments.join("");
				QByteArray data = filename.toUtf8();

				COPYDATASTRUCT copydata;
				copydata.dwData = CUSTOM_TYPE; //自定義類型
				copydata.lpData = data.data();  //數(shù)據(jù)大小
				copydata.cbData = data.size();  // 指向數(shù)據(jù)的指針

				::SendMessage(hwnd, WM_COPYDATA, reinterpret_cast<WPARAM>(nullptr), reinterpret_cast<LPARAM>(&copydata));
			}
        #else
            pid_t pid;

            arguments.takeFirst();
            QString filename = arguments.join("");
            QByteArray data = filename.toUtf8();

            nppShared.attach();
            nppShared.lock();
            memcpy(&pid, nppShared.data(), sizeof(pid_t));
            memset((char*)nppShared.data()+sizeof(pid_t),0, 1024-sizeof(pid_t));
            memcpy((char*)nppShared.data()+sizeof(pid_t),data.data(),data.size());
            nppShared.unlock();

            kill(pid,SIGUSR1);
			#endif
		}
		else if (arguments.size() == 1)
		{
#ifdef Q_OS_WIN
			//把窗口設(shè)置到最前
			qlonglong hwndId;
			shared.lock();
			memcpy(&hwndId, shared.data(), sizeof(qlonglong));
			shared.unlock();
			HWND hwnd = (HWND)hwndId;
			if (::IsWindow(hwnd))
			{
				QString filename("open");
				QByteArray data = filename.toUtf8();

				COPYDATASTRUCT copydata;
				copydata.dwData = OPEN_NOTEPAD_TYPE; //自定義類型
				copydata.lpData = data.data();  //數(shù)據(jù)大小
				copydata.cbData = data.size();  // 指向數(shù)據(jù)的指針

				::SendMessage(hwnd, WM_COPYDATA, reinterpret_cast<WPARAM>(nullptr), reinterpret_cast<LPARAM>(&copydata));
			}
#else
            pid_t pid;
            nppShared.attach();
            nppShared.lock();
            memcpy(&pid, nppShared.data(), sizeof(pid_t));
            memset((char*)nppShared.data()+sizeof(pid_t),0, 1024-sizeof(pid_t));
            nppShared.unlock();
            qDebug()<<"empty file send";
            kill(pid,SIGUSR1);
#endif
		}
		return 0;
	}
#ifdef Q_OS_WIN
	shared.create(32);
#else
    shared.create(32);
    nppShared.create(2048);

    if(signal(SIGUSR1,sig_usr) == SIG_ERR)
    {
       qDebug()<<"linux create sign failed";
    }
#endif

	QFile file(":/mystyle.qss"); //qss文件路徑
	QString styleSheet;
	if (file.open(QIODevice::Text | QIODevice::ReadOnly))
	{
		styleSheet = file.readAll();
		qApp->setStyleSheet(styleSheet);
	}
	file.close();

	CCNotePad *pMainNotepad = new CCNotePad(true);
	pMainNotepad->setAttribute(Qt::WA_DeleteOnClose);
	pMainNotepad->setShareMem(&shared);
	pMainNotepad->show();

	QThread *workThread = new QThread(&a);
	//QObject::connect(workThread, &QThread::finished, workThread, &QObject::deleteLater);
	workThread->start();

	//這里不能給parent,否則會(huì)導(dǎo)致父子對(duì)象不在同一個(gè)線程的錯(cuò)誤
	NetRegister *pNetReg = new NetRegister(nullptr);
	pNetReg->moveToThread(workThread);

	QStatusBar *pStatusBar = pMainNotepad->statusBar();
	QObject::connect(pNetReg, &NetRegister::showMessage, pStatusBar, &QStatusBar::showMessage);
	QObject::connect(pNetReg, &NetRegister::signToLicenceServer, pNetReg, &NetRegister::slot_ToLicenceServer); 
	QObject::connect(pNetReg, &NetRegister::signMsg, pMainNotepad, &CCNotePad::slot_donate);
	//下面槽函數(shù)會(huì)在workThread刪除的時(shí)候執(zhí)行
	QObject::connect(workThread, &QThread::finished, pNetReg, &NetRegister::quit);
	//注意下面函數(shù)會(huì)在新線程中執(zhí)行
	emit pNetReg->signToLicenceServer();


#ifdef Q_OS_WIN
	//HWND hwnd = ::FindWindowA("Qt5QWindowIcon", "CCNotebook");
	//發(fā)現(xiàn)hwnd就是和effectiveWinId相等的,不需要查詢了
	qlonglong winId = (qlonglong)pMainNotepad->effectiveWinId();

	shared.lock();
	memcpy(shared.data(), &winId, sizeof(qlonglong));
	shared.unlock();
#else
    qlonglong winId = (qlonglong)pMainNotepad->effectiveWinId();
    shared.lock();
    memcpy(shared.data(), &winId, sizeof(qlonglong));
    shared.unlock();
    nppShared.attach();
    //get proceess id to share memory
    pid_t pid = getpid();
    nppShared.lock();
    memcpy(nppShared.data(), &pid, sizeof(pid_t));
    nppShared.unlock();
#endif // Q_OS_WIN

	if (arguments.size() == 2)
	{
		pMainNotepad->openFile(arguments[1]);
        pMainNotepad->showNormal();
	}
	else
	{
		pMainNotepad->initTabNewOne();
	}

	a.exec();

	//結(jié)束進(jìn)程
	workThread->quit();
	workThread->wait();
	delete workThread;

	return 0;
}

ndd開源地址:

ndd: notepad--是一個(gè)國(guó)產(chǎn)跨平臺(tái)、簡(jiǎn)單的文本編輯器,是替換notepad++的一種選擇。其內(nèi)置強(qiáng)大的代碼對(duì)比功能,讓你丟掉付費(fèi)的beyond compare。 (gitee.com)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-571696.html

到了這里,關(guān)于不想使用notepad++,快使用notepad--來(lái)替換的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Unity編輯器實(shí)現(xiàn)對(duì)選中物體一鍵替換材質(zhì)

    Unity編輯器實(shí)現(xiàn)對(duì)選中物體一鍵替換材質(zhì)

    ? ?????最近美術(shù)同事在整理模型動(dòng)畫時(shí)有一個(gè)需求,就是選中部分的模型一件將材質(zhì)替換成同一個(gè)材質(zhì)球。在編輯器下將這個(gè)功能實(shí)現(xiàn)了出來(lái)。代碼放在最后,簡(jiǎn)單記錄一下。 首先對(duì)選中進(jìn)行遍歷,拿到所有的子對(duì)象; 對(duì)每個(gè)具體的對(duì)象拿到對(duì)應(yīng)的 Mesh Renderer 組件; 對(duì)每

    2024年02月13日
    瀏覽(25)
  • DAY1,Qt [ 手動(dòng)實(shí)現(xiàn)登錄框(信息調(diào)試類,按鈕類,行編輯器類,標(biāo)簽類的使用)]

    DAY1,Qt [ 手動(dòng)實(shí)現(xiàn)登錄框(信息調(diào)試類,按鈕類,行編輯器類,標(biāo)簽類的使用)]

    ---mychat.h---頭文件 ---mychar.cpp---源文件 ---main.cpp---測(cè)試文件 結(jié)果--- ? ?

    2024年02月14日
    瀏覽(15)
  • qt+opencv實(shí)現(xiàn)圖片編輯器

    qt+opencv實(shí)現(xiàn)圖片編輯器

    借助QLabel容器,進(jìn)行顯示圖片作為背景,然后重寫QLabel類實(shí)現(xiàn)矩形,直線和圓形的實(shí)現(xiàn)。opencv板塊直接實(shí)現(xiàn)相關(guān)圖片操作。 打開圖片 裁切 改變亮度和對(duì)比度 順時(shí)針旋轉(zhuǎn)和逆時(shí)針旋轉(zhuǎn) 重寫的QLabel

    2024年02月16日
    瀏覽(26)
  • Qt富文本編輯器中表格的操作

    Qt富文本編輯器中表格的操作

    原本計(jì)劃中的方案時(shí)使用Qt的富文本編輯器做一個(gè)類Word的編輯器,配合OpenXML實(shí)現(xiàn)脫離office軟件下對(duì)Word軟件進(jìn)行編輯的,但是該方案最終被放棄了,所以最終放到博客上做個(gè)記錄。程序是在別人的開源代碼上改的,原本的文字和圖片的樣式編輯已經(jīng)有了,表格方面是我自己做

    2024年02月15日
    瀏覽(26)
  • 帝國(guó)CMS7.5編輯器換行替換為p標(biāo)記,如何將標(biāo)簽br換成p標(biāo)簽

    第一個(gè)在:eadminecmseditorinfoeditorconfig.js; 第二個(gè)在:eadminecmseditortempeditorconfig.js; 第三個(gè)在:edataecmseditorinfoeditorconfig.js; 你要把這三個(gè)文件里面的: config.enterMode = CKEDITOR.ENTER_BR; config.shiftEnterMode = CKEDITOR.ENTER_P; 都改成 config.enterMode = CKEDITOR.ENTER_P; config.shiftEnterMode = CK

    2024年02月03日
    瀏覽(18)
  • 用QT/C++寫一個(gè)簡(jiǎn)易文本編輯器

    用QT/C++寫一個(gè)簡(jiǎn)易文本編輯器

    學(xué)習(xí)QT的小練習(xí),先看一下目前實(shí)現(xiàn)的效果。 ? 功能: 編輯文本保存為txt。 打開一個(gè)txt文本文件,可編輯可保存。 文本編輯功能:剪切,復(fù)制,粘貼,加粗,斜體,下劃線,設(shè)置顏色,字體。 要點(diǎn): QT Designer的UI可視化設(shè)計(jì):基本控件布局,資源導(dǎo)入,菜單動(dòng)作,信號(hào)槽的

    2024年02月05日
    瀏覽(18)
  • 基于QT4的GPX文件編輯器開發(fā)

    基于QT4的GPX文件編輯器開發(fā)

    GPX文件是記錄地理點(diǎn)的文件,本質(zhì)是一種xml文件。GPX文件目前沒(méi)有很好的編輯器,因此作者決定開發(fā)一款無(wú)需安裝的綠色編輯器。 在QT4開發(fā)中,XML可以用DOM來(lái)實(shí)現(xiàn),但其邏輯并不是很清晰。使用模型視圖反而會(huì)更加可讀。因此在開發(fā)中,使用model-view模式來(lái)實(shí)現(xiàn)數(shù)據(jù)讀寫。

    2024年02月12日
    瀏覽(26)
  • 二、Qt定時(shí)器與文本編輯器制作《QT 入門到實(shí)戰(zhàn)》

    二、Qt定時(shí)器與文本編輯器制作《QT 入門到實(shí)戰(zhàn)》

    了解 qt 的 pixmap 了解 qt 的 label 如何顯示圖片 了解定時(shí)器的開啟 了解定時(shí)器的關(guān)閉 了解文件如何進(jìn)行讀取 了解 QFileDialog 的使用 了解了一個(gè)文本編輯器的基本編寫 鞏固了 connect 的使用 在 Qt 中使用 Label 可以顯示文本,但 Label 不止可以顯示文本,還可以用于圖片的顯示。 首

    2024年02月02日
    瀏覽(24)
  • IDE /Qt Creator 文本編輯器之文件編碼設(shè)置

    IDE /Qt Creator 文本編輯器之文件編碼設(shè)置

    在 Qt Creator 工具 - 選項(xiàng) - 文本編輯器 - 行為選項(xiàng)卡中,存在一個(gè)叫作 “文件編碼” 的配置項(xiàng)。其默認(rèn)配置如下, 我是栽了不少坑之后,才理解到它的用途和作用方式的。這是一個(gè)有用的配置項(xiàng),尤其是在使用 Qt Creator + MSVC 組成的集成開發(fā)環(huán)境時(shí)。我是在整理 《IDE/warning:

    2024年02月13日
    瀏覽(51)
  • QT Creator更改主題和編輯器風(fēng)格(附幾款黑色主題)

    QT Creator更改主題和編輯器風(fēng)格(附幾款黑色主題)

    適用于qtcreator 打開Qt選擇\\\"工具\(yùn)\\"-\\\"選項(xiàng)\\\"; 2. 選擇\\\"環(huán)境\\\"-\\\"Theme\\\"切換不同的主題風(fēng)格 這里切換的是外邊框的風(fēng)格,如果編輯器中有同名的風(fēng)格,編輯器的風(fēng)格也會(huì)被切換 ?切換為dark風(fēng)格 3. 選擇\\\"文本編輯器\\\"后設(shè)置紅色下拉框即可設(shè)置編輯器風(fēng)格代碼風(fēng)格。 這里切換的是代碼界面

    2024年02月09日
    瀏覽(54)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包