很抱歉,前段时间为了准备合格考和期末考试,暂时放下了这边的完善工作,有些辜负大家的指教。现在放假了,我又来交作业啦!
虽然我也没想过要提交到melpa什么的(水平差远了哈哈),但每次都一股脑儿把所有代码扔进论坛也不甚雅观。于是我将这个小插件正式定名为 cnhl
放到了github上,亦是方便大家安装使用(感谢 @twlz0ne 前辈的提醒!)。
这次在已有代码上依然有比较多的改动,请各位前辈指导:
-
弄了个不三不四的“trie”出来(也不知道算不算trie
再次感谢 @LdBeth 前辈的指导!),再结合了其它一些不甚雅观的方法改善了一下匹配face部分的代码。
具体思路是:预置一个列表(
cnhl--face-items
),表中存有thulac返回结果的首字母与face的对应关系,再用这个列表生成一个哈希表(不知道怎么初始化哈希表的值,只好用loop的笨方法挨个写进去……),然后每次使用thulac返回值的首字母字母去匹配哈希表中的值。这部分代码如下:不知道有没有更好的方法,还请前辈们指教。
-
重新理了理timer,解决了上一个版本中一直困扰我的几个大bug,例如快速换行导致高亮失败、删字导致下一句第一个词被清除高亮一类的破问题。现在它在写作中的表现已经相当不错。唯一的问题是一口气高亮超过82个字符的行会失败,算是个重大bug,我仔细研究研究是怎么回事(逻辑苦手当场暴毙qaq)……
-
主题上做了很大的修改。根据一段时间的使用经验和对词语出现概率的估算,我调整了一下对thulac结果的合并方法,让它用起来更清晰舒服;同时去掉了那两个高度合并的方案,只留下一个,因为根据我的写作实际,彩虹糖似的语法高亮并不会对我造成干扰。我还加入了适配亮色主题的颜色(两种,在README中)。
我的审美不适合所有人,要定制的话,Adobe Color可能能帮到大家——毕竟文字的高亮还是和代码高亮不太一样,既要考虑到清晰度,也要考虑到整体的和谐,不刺眼,不喧宾夺主,保证思路连贯。
直接效果就是代码量小了好多哈哈,看着清楚多了!有机会把设计思路总结总结。
-
我现在在用emacs29,在29中,原先的感谢 @twlz0ne 前辈!不存在问题,是我想当然了qwqreturn
函数被cl-return
所替换,我不知道它能不能向下兼容。如果cnhl在旧版本上报错的话,我会新建一个分支。 -
一些细节上的优化,像语法优化、
cl-loop
的使用、封装了一个开关高亮的函数之类的杂七杂八的东西,倒是为自己微不足道的进步沾沾自喜了一阵子。另外我还学着其它包给cnhl.el装模作样地加了个头尾,不知道符不符合规范,还请前辈们批评。
看上去是能用了,但我知道它还是过于简陋,连minor mode都没做。下一步我打算让它更像样些,加入一些必要的功能;如果有可能还想换用c++版的thulac,这样就不需要折腾一堆python了,或者直接写成dynamic module——但那离我还太远了,好高骛远要不得。要学习的地方很多呀。
另外还有部分细节体验较差,例如在org有序列表的一行中按下M-RET会导致当前行的高亮被删除;使用一些生成文本的功能后会报找不到下文的错误;高亮范围有时会越出标点导致性能浪费等,我会着手修复。
哦对了,我还想写一篇对文科生们的emacs安利文,不知道有没有哪位前辈已经写过了,我继续补充发扬(flag立在这儿了awa)。
感谢一路指导我的各位前辈们,小子无以为报,旧作一片以酬诸君:
莫疑繁此为何妨,夜觅阑珊守尺方。
代码行行映人肃,个中点点入心长。
肠肥恶见三牲貌,腹馁唯知一口张。
当敬人间才与苦,方成诸夏景还长。
还望各位前辈多多批评!