mirror of
https://github.com/rubickCenter/rubick
synced 2025-06-19 02:08:37 +08:00
feat: 支持主程序拼音、缩写检索,支持 shift+Esc 呼起主界面
This commit is contained in:
parent
a65acbaeb3
commit
a35a5ccfc3
5
package-lock.json
generated
5
package-lock.json
generated
@ -8571,6 +8571,11 @@
|
||||
"minimatch": "^3.0.4"
|
||||
}
|
||||
},
|
||||
"jian-pinyin": {
|
||||
"version": "0.2.3",
|
||||
"resolved": "https://registry.nlark.com/jian-pinyin/download/jian-pinyin-0.2.3.tgz",
|
||||
"integrity": "sha1-H8a/9wiKw4goPzGm/USBFp+F4OI="
|
||||
},
|
||||
"js-base64": {
|
||||
"version": "2.6.4",
|
||||
"resolved": "http://npmreg.qa.91jkys.com/js-base64/-/js-base64-2.6.4.tgz",
|
||||
|
@ -66,6 +66,7 @@
|
||||
"electron-store": "^8.0.0",
|
||||
"iohook": "^0.9.3",
|
||||
"is-chinese": "^1.4.2",
|
||||
"jian-pinyin": "^0.2.3",
|
||||
"keycode": "^2.2.0",
|
||||
"marked": "^2.0.7",
|
||||
"md5": "^2.3.0",
|
||||
|
@ -7,10 +7,12 @@ const configPath = path.join(getlocalDataFile(), './rubick-config.json');
|
||||
|
||||
let defaultConfig = {
|
||||
Darwin: {
|
||||
version: 2,
|
||||
perf: {
|
||||
shortCut: {
|
||||
showAndHidden: 'Option+R',
|
||||
separate: 'Ctrl+D'
|
||||
separate: 'Ctrl+D',
|
||||
quit: 'Shift+Escape'
|
||||
},
|
||||
common: {
|
||||
start: true,
|
||||
@ -39,7 +41,7 @@ global.opConfig = {
|
||||
opConfig.config = JSON.parse(fs.readFileSync(configPath) || JSON.stringify(defaultConfig[platform]));
|
||||
}
|
||||
// 重置
|
||||
if (!opConfig.config.perf || !opConfig.config.superPanel || !opConfig.config.global) {
|
||||
if (!opConfig.version || opConfig.version < defaultConfig[platform].version) {
|
||||
opConfig.config = defaultConfig[platform];
|
||||
fs.writeFileSync(configPath, JSON.stringify(opConfig.config));
|
||||
}
|
||||
|
@ -63,6 +63,11 @@ class Listener {
|
||||
mainWindow.webContents.send('new-window');
|
||||
});
|
||||
|
||||
globalShortcut.register(config.perf.shortCut.quit, () => {
|
||||
mainWindow.webContents.send('init-rubick');
|
||||
mainWindow.show();
|
||||
});
|
||||
|
||||
// 注册自定义全局快捷键
|
||||
config.global.forEach(sc => {
|
||||
if (!sc.key || !sc.value) return;
|
||||
|
@ -22,7 +22,7 @@ const SYSTEM_PLUGINS = [
|
||||
{
|
||||
code: 'pick',
|
||||
explain: 'rubick 帮助文档',
|
||||
cmds: ['取色', '拾色', 'Pick color']
|
||||
cmds: ['取色', '拾色', 'Pick color', 'qs', 'ss']
|
||||
}
|
||||
],
|
||||
tag: 'rubick-color'
|
||||
@ -34,7 +34,7 @@ const SYSTEM_PLUGINS = [
|
||||
{
|
||||
code: 'shortCut',
|
||||
explain: 'rubick 屏幕截取',
|
||||
cmds: ['截屏', 'shortCut']
|
||||
cmds: ['截屏', 'shortCut', 'jp']
|
||||
}
|
||||
],
|
||||
tag: 'rubick-screen-short-cut'
|
||||
@ -46,7 +46,7 @@ const SYSTEM_PLUGINS = [
|
||||
{
|
||||
code: 'lock',
|
||||
explain: '锁屏',
|
||||
cmds: ['锁屏', 'lock screen']
|
||||
cmds: ['锁屏', 'lock screen', 'sp']
|
||||
}
|
||||
],
|
||||
tag: 'rubick-lock'
|
||||
|
37
src/renderer/assets/common/translate.js
Normal file
37
src/renderer/assets/common/translate.js
Normal file
@ -0,0 +1,37 @@
|
||||
let key = '吖哎安肮凹八挀扳邦勹陂奔伻皀边灬憋汃冫癶峬嚓偲参仓撡冊嵾噌叉犲辿伥抄车抻阷吃充抽出膗巛刅吹旾踔呲从凑粗汆镩蹿崔邨搓咑呆丹当刀恴揼灯仾嗲敁刁爹丁丟东吺剢耑叾吨多妸奀鞥仒发帆匚飞分丰覅仏垺夫旮侅干冈皋戈给根更工勾估瓜乖关光归丨呙妎咍兯夯茠诃黒拫亨乊叿齁乎花怀欢巟灰昏吙丌加戋江艽阶巾坕冂丩凥姢噘军咔开刊忼尻匼肎劥空廤扝夸蒯宽匡亏坤扩垃来兰啷捞仂雷塄唎俩嫾簗蹽咧厸伶溜咯龙娄噜驴孪掠抡捋嘸妈埋颟牤猫庅呅椚掹踎宀喵乜民名谬摸哞某母拏腉囡囔孬疒娞嫩莻妮拈娘鸟捏脌宁妞农羺奴女疟奻硸噢妑拍眅乓抛呸喷匉丕片剽氕姘乒钋剖仆七掐千呛悄切亲靑宆丘区峑炔夋亽呥穣荛惹人扔日戎厹嶿堧桵闰挼仨毢三桒掻色杀筛山伤弰奢申升尸収书刷衰闩双谁妁厶忪凁苏狻夊孙唆他囼坍汤仐忑膯剔天旫怗厅囲偷凸湍推吞乇屲歪乛尣危塭翁挝乌夕呷仙乡灱些忄兴凶休戌吅疶坃丫咽央幺倻膶一乚应哟佣优扜囦曰蒀帀災兂牂傮啫贼怎曽吒夈沾张佋蜇贞凧之中州朱抓拽专妆隹宒卓仔孖宗邹租劗厜尊昨'.split('');
|
||||
let pinyin = 'AAiAnAngAoBaBaiBanBangBaoBeiBenBengBiBianBiaoBieBinBingBoBuCaCaiCanCangCaoCeCenCengChaChaiChanChangChaoCheChenChengChiChongChouChuChuaiChuanChuangChuiChunChuoCiCongCouCuCuanChuanCuanCuiCunCuoDaDaiDanDangDaoDeDenDengDiDiaDianDiaoDieDingDiuDongDouDuDuanDuiDunDuoEEnEngErFaFanFangFeiFenFengFiaoFoFouFuGaGaiGanGangGaoGeGeiGenGengGongGouGuGuaGuaiGuanGuangGuiGunGuoHaHaiHanHangHaoHeHeiHenHengHoHongHouHuHuaHuaiHuanHuangHuiHunHuoJiJiaJianJiangJiaoJieJinJingJiongJiuJuJuanJueJunKaKaiKanKangKaoKeKenKengKongKouKuKuaKuaiKuanKuangKuiKunKuoLaLaiLanLangLaoLeLeiLengLiLiaLianLiangLiaoLieLinLingLiuLoLongLouLuLvLuanLveLunLuoMMaMaiManMangMaoMeMeiMenMengMiMianMiaoMieMinMingMiuMoMouMeiMuNaNaiNanNangNaoNeNeiNenNNiNianNiangNiaoNieNinNingNiuNongNouNuNvNveNuanNuoOuPaPaiPanPangPaoPeiPenPengPiPianPiaoPiePinPingPoPouPuQiQiaQianQiangQiaoQieQinQingQiongQiuQuQuanQueQunRaRanRangRaoReRenRengRiRongRouRuRuanRuiRunRuoSaSaiSanSangSaoSeShaShaiShanShangShaoSheShenShengShiShouShuShuaShuaiShuanShuangShuiShuoSiSongSouSuSuanSuiSunSuoTaTaiTanTangTaoTeTengTiTianTiaoTieTingTongTouTuTuanTuiTunTuoWaWaiWanWangWeiWenWengWoWuXiXiaXianXiangXiaoXieXinXingXiongXiuXuXuanXueXunYaYanYangYaoYeYenYiYinYingYoYongYouYuYuanYueYunZaZaiZanZangZaoZeZeiZenZengZhaZhaiZhanZhangZhaoZheZhenZhengZhiZhongZhouZhuZhuaZhuaiZhuanZhuangZhuiZhunZhuoZaiZiZongZouZuZuanZuiZunZuo'.split(/(?=[A-Z])/g);
|
||||
let cache = {};
|
||||
let keyLen = key.length - 1;
|
||||
let creg = /[\u4e00-\u9fa5]/;
|
||||
let translate = word => {
|
||||
if (word.length > 1) {
|
||||
let ret = '';
|
||||
for (let i = 0; i < word.length; i++) {
|
||||
ret += translate(word[i]);
|
||||
if (i < word.length - 1) {
|
||||
ret += ',';
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (!creg.test(word)) {
|
||||
return word;
|
||||
}
|
||||
|
||||
if (cache.hasOwnProperty(word)) {
|
||||
return cache[word];
|
||||
}
|
||||
let begin = 0;
|
||||
let end = keyLen;
|
||||
while (begin <= end) {
|
||||
let middle = Math.floor((begin + end) / 2);
|
||||
if (word.localeCompare(key[middle], 'zh-CN') < 0) {
|
||||
end = middle - 1;
|
||||
} else {
|
||||
begin = middle + 1;
|
||||
}
|
||||
}
|
||||
return (cache[word] = (pinyin[end] || '').toLowerCase());
|
||||
};
|
||||
export default translate;
|
@ -10,6 +10,8 @@ import { getlocalDataFile } from '../../../main/common/utils';
|
||||
import iconvLite from 'iconv-lite';
|
||||
import bpList from 'bplist-parser';
|
||||
|
||||
import translate from './translate'
|
||||
|
||||
const store = new Store();
|
||||
|
||||
function getWindowHeight(searchList) {
|
||||
@ -233,7 +235,14 @@ APP_FINDER_PATH.forEach((searchPath, index) => {
|
||||
};
|
||||
|
||||
if (appZhName && isZhRegex.test(appZhName)) {
|
||||
// pinyinArr = [['pin'], ['yin']]
|
||||
const py = translate(appZhName);
|
||||
const pinyinArr = py.split(',');
|
||||
const firstLatter = pinyinArr.map(py => py[0]);
|
||||
// 拼音
|
||||
fileOptions.keyWords.push(pinyinArr.join(''));
|
||||
// 缩写
|
||||
fileOptions.keyWords.push(firstLatter.join(''));
|
||||
// 中文
|
||||
fileOptions.keyWords.push(appZhName);
|
||||
}
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
<div class="settings-detail">
|
||||
<div v-if="currentSelect[0] === 0">
|
||||
<div class="setting-item">
|
||||
<div class="title">快捷键</div>
|
||||
<div class="title">快捷键(需要使用 option/ctrl/shift/command 键修饰)</div>
|
||||
<div class="settings-item-li">
|
||||
<div class="label">显示/隐藏快捷键</div>
|
||||
<div class="value" tabIndex=-1 @keydown="(e) => changeShortCut(e, 'showAndHidden')">{{ config.perf.shortCut.showAndHidden }}</div>
|
||||
@ -24,6 +24,10 @@
|
||||
<div class="label">插件分离快捷键</div>
|
||||
<div class="value" tabIndex=-1 @keydown="(e) => changeShortCut(e, 'separate')">{{ config.perf.shortCut.separate }}</div>
|
||||
</div>
|
||||
<div class="settings-item-li">
|
||||
<div class="label">返回主界面</div>
|
||||
<div class="value" tabIndex=-1 @keydown="(e) => changeShortCut(e, 'quit')">{{ config.perf.shortCut.quit }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="setting-item">
|
||||
<div class="title">通用</div>
|
||||
|
Loading…
x
Reference in New Issue
Block a user