-
-
Save fanlushuai/530683a9a577f6baa293f182577bd2b0 to your computer and use it in GitHub Desktop.
| //=========================enjoy !!!============================================= | |
| // 1. 输入流畅理念。修改F键的导航功能,按键生成策略。采用左边前两排+v,b的字符。保证不会生成rx,一些让手指弯曲过度的组合按键。使得输入更加流畅 | |
| // 2. 高频快速直达理念。搜索,使用独立的s关键字,使用最少的按键,来处理最高频的功能。同理,最直达的逻辑优化。h,直达历史,以及内置的b书签。通过原始的o前缀虽然也挺快,但是,还是处在一种没有优先级的状态。 | |
| // 3. 添加快速搜索的能力(可以抛弃一键切换插件)(注:xx可以表达为,域名的缩写,比如,github-gh,google-gg。自己可以改配置,加搜索引擎): | |
| // a. ";+xx",携带当前关键字,切换搜索引擎进行搜索】(独有扩展) | |
| // b. ";;+xx", 使用当前选中的内容,进行浏览器的搜索(内置,使用s+。这种更加易于,减轻快捷键的记忆负担。) | |
| // c. ";;;+xx", 使用用户输入,在当前页面打开输入框,进行搜索(内置,使用s+,这种减轻记忆负担。同时因为在使用频率上,也就s频率高。所以,单独抽取了一个s键) | |
| // d. "alt+s",快速的自动切换搜索引擎,按照顺序进行搜索 | |
| // e. "oa+xx",使用关键字,同时打开相同类型的搜索引擎,进行搜索。比如,一个关键字将同时打开,google,baidu。 | |
| // 4. 添加导航的功能,使用"m+xx"的方式,直接跳转到目标网站(独有扩展。可以抛弃导航插件了) | |
| // 注意:建议添加配置地址为:https://gist.githubusercontent.com/fanlushuai/530683a9a577f6baa293f182577bd2b0/raw/surfingkeys-config.txt?v=1 | |
| // 默认插件加载此配置会进行缓存。所以,无法获取最新的gist内容。自己随便加个参数,打破局面。?v=1,需要更新,直接v=另外一个值就行。 | |
| //================================================================================ | |
| const { | |
| unmap, | |
| iunmap, | |
| vunmap, | |
| aceVimMap, | |
| mapkey, | |
| imap, | |
| imapkey, | |
| getClickableElements, | |
| vmapkey, | |
| map, | |
| cmap, | |
| addSearchAlias, | |
| removeSearchAlias, | |
| tabOpenLink, | |
| readText, | |
| Clipboard, | |
| Front, | |
| Hints, | |
| Visual, | |
| RUNTIME | |
| } = api; | |
| //添加按键Hints配置。一定程度上规避,因逻辑上无脑组合按键的生成,导致违背手掌舒适度的问题。 | |
| //分析过程 https://github.com/brookhong/Surfingkeys/commit/ebd4aad2f0fd6946538cced005470366f2170ae4 | |
| //todo new version issue | |
| //Hints.setCharacters('asfqwertvb'); | |
| //历史记录搜索,不使用默认的MU排序。MU排序太鸡肋。 | |
| settings.historyMUOrder = false; | |
| //关于光标定位到地址栏无法定位回页面的问题。 | |
| //可以在浏览器设置里面添加特殊的搜索引擎来实现。搜索引擎的地址为javascript: 关键字设置为";" 最好关键字的中英文个添加一个搜索引擎。这样就很ok了。 | |
| //注意:与其他扩展的快捷键冲突问题。没有很好的实现。发现p按键,可以短暂失效按键捕获。只能说是一个方案,但是很鸡肋。比如和简悦的冲突。 | |
| // 1.冲突修改 | |
| //与浏览器冲突部分,个人认为它更好 | |
| // 移除与浏览器的冲突 查看下载历史,历史记录 | |
| unmap('<Ctrl-j>'); | |
| iunmap('<Ctrl-j>'); | |
| vunmap('<Ctrl-j>'); | |
| unmap('<Ctrl-h>'); | |
| iunmap('<Ctrl-h>'); | |
| vunmap('<Ctrl-h>'); | |
| // 2.vimium兼容。个人认为vimium逻辑更好 | |
| // 相当于是<Shift-[jkhl]> | |
| map('H', 'S'); // 历史后退 | |
| map('L', 'D'); // 历史前进 | |
| map('J', 'E'); // tab向左 | |
| map('K', 'R'); // tab向右 | |
| map('h', 'oh'); // 最直接的理念。 | |
| // 3.当前搜索结果选取,各种按键冲突和不灵。<ctrl-n>是个问题会打开新的窗口,而且<ctrl-.>,<ctrl-,>不起作用 | |
| // 个人设置的搜索结果快捷键。 采用vim的逻辑。 | |
| // 相当于是<alt-[jkhl]> 。 原本想采用<ctrl-[jkhl]>,但 ctrl-k 等容易和浏览器快捷键冲突 | |
| // jk上下条目,hl,左右页条目 | |
| //cmap('<Alt-j>','<Ctrl-n>'); | |
| //cmap('<Alt-k>','<Ctrl-p>'); | |
| //cmap('<Alt-l>','<Ctrl-.>'); | |
| //cmap('<Alt-h>','<Ctrl-,>'); | |
| //cmap和map是不冲突的。 | |
| //那么alt键的引入没必要了。因为他本来就不属于vim和emacs,那么直接用<Shift-[jkhl]>,和兼容vimium一样的逻辑就行了。减少新键位的引入。同时使用上更舒适 | |
| //cmap('J','<Ctrl-n>'); | |
| //cmap('K','<Ctrl-p>'); | |
| //cmap('L','<Ctrl-.>'); | |
| //cmap('H','<Ctrl-,>'); | |
| //又发现新问题。搜索结果还是不应该用<Shift-[jkhl]>。因为牵扯到大写jkhl的输入问题。 | |
| //还是改回来吧。<alt-[jkhl]> | |
| cmap('<Alt-j>', '<Ctrl-n>'); //或者使用ahk来修改。参考https://github.com/brookhong/Surfingkeys/issues/1204#issuecomment-1500828389 | |
| cmap('<Alt-k>', '<Ctrl-p>'); | |
| cmap('<Alt-l>', '<Ctrl-.>'); | |
| cmap('<Alt-h>', '<Ctrl-,>'); | |
| //4 扩展js,交互其他 | |
| //和toby插件进行交互 | |
| function openTobyHtml() { | |
| tabOpenLink("chrome-extension://hddnkoipeenegfoeaoibdmnaalmgkpip/toby.html"); | |
| } | |
| mapkey('ot', '打开toby页面', openTobyHtml); | |
| // os 打开简悦稍后读 | |
| function openSimpReadHtml() { | |
| tabOpenLink("chrome-extension://ijllcpnolfcooahcekpamkbidhejabll/unreader/main.html"); | |
| } | |
| mapkey('os', '打开简悦稍后读', openSimpReadHtml); | |
| // 打开pocket | |
| function openPocket() { | |
| tabOpenLink("https://getpocket.com/my-list"); | |
| } | |
| mapkey('op', '打开Pocket', openPocket); | |
| // 注意:默认ge,打开扩展管理。但是一般不用。不如直接打开,应用商店 | |
| function openChromeExtentonStore() { | |
| tabOpenLink("https://chrome.google.com/webstore/category/extensions?hl=zh-CN"); | |
| } | |
| mapkey('ge', '打开应用商店', openChromeExtentonStore); | |
| //5 final.set theme 官网主题。调整字体大小 | |
| settings.theme = ` | |
| :root { | |
| --theme-ace-bg:#282828ab; /*Note the fourth channel, this adds transparency*/ | |
| --theme-ace-bg-accent:#3c3836; | |
| --theme-ace-fg:#ebdbb2; | |
| --theme-ace-fg-accent:#7c6f64; | |
| --theme-ace-cursor:#928374; | |
| --theme-ace-select:#458588; | |
| } | |
| #sk_editor { | |
| height: 50% !important; /*Remove this to restore the default editor size*/ | |
| background: var(--theme-ace-bg) !important; | |
| } | |
| .sk_theme { | |
| font-size: 11pt; | |
| } | |
| #sk_omnibar { | |
| width: 46%; | |
| left: 28%; | |
| opacity: 1; | |
| } | |
| #sk_omnibar_middle{ | |
| top: 25%; | |
| } | |
| .sk_theme #sk_omnibarSearchResult>ul>li:nth-child(odd) { | |
| background: #cddef9; | |
| } | |
| .sk_theme #sk_omnibarSearchResult>ul>li.focused { | |
| background: #93b38b; | |
| padding: 14px; | |
| border-left: 10px solid #ccc!important; | |
| border-color: #ecae2d!important; | |
| } | |
| .ace-chrome .ace_print-margin, .ace_gutter, .ace_gutter-cell, .ace_dialog{ | |
| background: var(--theme-ace-bg-accent) !important; | |
| } | |
| .ace_dialog-bottom{ | |
| border-top: 1px solid var(--theme-ace-bg) !important; | |
| } | |
| .ace-chrome{ | |
| color: var(--theme-ace-fg) !important; | |
| } | |
| .ace_gutter, .ace_dialog { | |
| color: var(--theme-ace-fg-accent) !important; | |
| } | |
| .ace_cursor{ | |
| color: var(--theme-ace-cursor) !important; | |
| } | |
| .normal-mode .ace_cursor{ | |
| background-color: var(--theme-ace-cursor) !important; | |
| border: var(--theme-ace-cursor) !important; | |
| } | |
| .ace_marker-layer .ace_selection { | |
| background: var(--theme-ace-select) !important; | |
| } ` | |
| // 6 添加一个自己写的逻辑。实现一键切换插件的逻辑,甚至还有增强 | |
| //=====================faster search engine swither====================start | |
| //{mapkey,siteName,keywordRegex,searchUrl} commonUseMapkey:(s,search)(v,videa)(c,code)(g,shop) | |
| var switchSearchConfigs = [{ | |
| commonUseMapKey: 's', | |
| mapkey: ';gg', | |
| siteName: 'google', | |
| keywordRegex: getRegExp('www.google.com/search', 'q'), | |
| searchUrl: 'https://www.google.com/search?q=%s' | |
| }, | |
| { | |
| commonUseMapKey: 's', | |
| mapkey: ';bd', | |
| siteName: 'baidu', | |
| keywordRegex: getRegExp('www.baidu.com/s', 'wd'), | |
| searchUrl: 'https://www.baidu.com/s?wd=%s' | |
| }, | |
| { | |
| commonUseMapKey: 'v', | |
| mapkey: ';yt', | |
| siteName: 'youtube', | |
| keywordRegex: getRegExp('www.youtube.com/results', 'search_query'), | |
| searchUrl: 'https://www.youtube.com/results?search_query=%s' | |
| }, | |
| { | |
| commonUseMapKey: 'c', | |
| mapkey: ';gh', | |
| siteName: 'github', | |
| keywordRegex: getRegExp('github.com/search', 'q'), | |
| searchUrl: 'https://github.com/search?o:desc&q=%s&s:stars&type:Repositories' | |
| }, | |
| { | |
| commonUseMapKey: 'v', | |
| mapkey: ';bb', | |
| siteName: 'bilibili', | |
| keywordRegex: getRegExp('search.bilibili.com/all', 'keyword'), | |
| searchUrl: 'https://search.bilibili.com/all?keyword=%s' | |
| }, | |
| { | |
| commonUseMapKey: 'g', | |
| mapkey: ';jd', | |
| siteName: 'jd', | |
| keywordRegex: getRegExp('search.jd.com/[Ss]earch', 'keyword'), | |
| searchUrl: 'https://search.jd.com/Search?keyword=%s' | |
| }, | |
| { | |
| commonUseMapKey: 'g', | |
| mapkey: ';tb', | |
| siteName: 'taobao', | |
| keywordRegex: getRegExp('s.taobao.com/search', 'q'), | |
| searchUrl: 'https://s.taobao.com/search?q=%s' | |
| }, | |
| { | |
| commonUseMapKey: 'v', | |
| mapkey: ';xg', | |
| siteName: '西瓜', | |
| keywordRegex: getRegExp('www.ixigua.com/search', 'keyword'), | |
| searchUrl: 'https://www.ixigua.com/search?keyword=%s' | |
| }, | |
| { | |
| commonUseMapKey: 's', | |
| mapkey: ';sm', | |
| siteName: '神马', | |
| keywordRegex: getRegExp('so.m.sm.cn/s', 'q'), | |
| searchUrl: 'https://so.m.sm.cn/s?q=%s' | |
| } | |
| ]; | |
| function getRegExp(urlBeforeParam, searchParamKey) { | |
| //ep. ^http[s]{0,1}://www.google.com/search\?.*?[&]{0,1}q=([^&]*)?.*$ | |
| var regStr = '^http[s]{0,1}://' + urlBeforeParam + '\?.*?[&]{0,1}' + searchParamKey + '=([^&]*)?.*$'; | |
| return new RegExp(regStr); | |
| } | |
| function getCurrentKeywordAndMapkey() { | |
| var currentURL = window.location.href; | |
| for (var i = 0, len = switchSearchConfigs.length; i < len; i++) { | |
| var searchConfig = switchSearchConfigs[i]; | |
| if (searchConfig.keywordRegex.test(currentURL)) { | |
| var currentKeywordAndMapkey = { | |
| keyword: RegExp.$1, | |
| mapkey: searchConfig.mapkey | |
| }; | |
| return currentKeywordAndMapkey; | |
| } | |
| } | |
| } | |
| function getTargetSearchSiteConfig(mapkey) { | |
| for (var i = 0, len = switchSearchConfigs.length; i < len; i++) { | |
| var searchConfig = switchSearchConfigs[i]; | |
| if (searchConfig.mapkey == mapkey) { | |
| return searchConfig; | |
| } | |
| } | |
| } | |
| function switchSearchEngineWithKeywordByMapKey(mapkey) { | |
| var currentKeywordAndMapkey = getCurrentKeywordAndMapkey(); | |
| if (!currentKeywordAndMapkey || currentKeywordAndMapkey.length < 1 || !currentKeywordAndMapkey.keyword || currentKeywordAndMapkey.keyword < 1) { | |
| return; | |
| } | |
| switchSearchEngin(currentKeywordAndMapkey, mapkey); | |
| } | |
| function switchSearchEngin(currentKeywordAndMapkey, mapkey) { | |
| var targetSearchSiteConfig = getTargetSearchSiteConfig(mapkey); | |
| if (!targetSearchSiteConfig || targetSearchSiteConfig.searchUrl.length < 1) { | |
| return; | |
| } | |
| var targetURLHref = targetSearchSiteConfig.searchUrl.replace('%s', currentKeywordAndMapkey.keyword); | |
| window.location.href = encodeURI(decodeURI(targetURLHref)); | |
| } | |
| function searchWithCopyWordsByMapKey(mapkey) { | |
| var targetSearchSiteConfig = getTargetSearchSiteConfig(mapkey); | |
| if (!targetSearchSiteConfig || targetSearchSiteConfig.searchUrl.length < 1) { | |
| return; | |
| } | |
| Clipboard.read(function (response) { | |
| var query = window.getSelection().toString() || response.data; | |
| if (!query || query.length < 1) { | |
| return; | |
| } | |
| var targetURLHref; | |
| if (isUrl(query)) { | |
| //如果复制的内容本身就是一个url,那么直接跳转。代替了常规的ctrl+t,ctlr+l,ctrl+v ,enter操作 | |
| targetURLHref = query; | |
| } else { | |
| targetURLHref = targetSearchSiteConfig.searchUrl.replace('%s', encodeURIComponent(query)); | |
| } | |
| tabOpenLink(targetURLHref); | |
| }); | |
| } | |
| function isUrl(context) { | |
| return /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/.test(context); | |
| } | |
| //unmap all key with ';' prefix of default settings | |
| // ;fsDisplay hints to focus scrollable elements | |
| // ;m把鼠标移出最近的元素 | |
| // ;w聚焦到主窗口 | |
| // ;pj从剪贴板恢复数据 | |
| // ;pf用yf复制出来的结果填充表单 | |
| // ;pp在当前页粘贴HTML | |
| // ;重复相应的f/F | |
| // ;j关闭下载完毕的提示框 [保留] 不能保留了。会影响 ;jd | |
| // ;cp复制代理信息 | |
| // ;ap应用剪贴板中的代理信息 | |
| // ;s切换PDF阅读器 | |
| // ;t用谷歌翻译选中文本 [保留] 不能保留了。会影响 ;tb | |
| // ;dh删除30天前的所有访问历史记录 | |
| // ;db从收藏夹里删除当前网址 | |
| // '<Alt-s>' 禁用启动插件,不要,基本没用。下面自动切换搜索引擎使用。 | |
| // 取消,占用`;`的快捷键。以及取消占用`s`的快捷键。 | |
| const unmaps = [ | |
| ';fs', ';m', ';w', ';pj', ';pf', ';pp', ';cp', ';ap', ';s', ';dh', ';db', '<Alt-s>', ';t', ';j', 'sg', 'sd', 'sb', 'se', 'sw', 'ss', 'sh', 'sy', 'sjd', 'stb', 'sxg' | |
| ]; | |
| unmaps.forEach((u) => { | |
| unmap(u); | |
| }); | |
| // 最高频的搜索,最简单的按键。 | |
| mapkey('s', "快速网络搜索s", function () { | |
| Front.openOmnibar({ | |
| type: "SearchEngine", | |
| extra: "gg" | |
| }); | |
| }); | |
| //remap ';' as search engine switch prefix | |
| function bindMapKeyForSwitchSearchEngine() { | |
| for (var i = 0, len = switchSearchConfigs.length; i < len; i++) { | |
| var searchConfig = switchSearchConfigs[i]; | |
| if (!searchConfig.mapkey || searchConfig.mapkey.length < 1) { | |
| continue; | |
| } | |
| //notice: use let instead of var | |
| let mk = searchConfig.mapkey; | |
| // 1. 使用当前的搜索关键字,换新的搜索引擎 。绑定 (';'+ 两个字母)的快捷键 | |
| mapkey(mk, '搜索<当前搜索关键字>内容 - ' + searchConfig.siteName, function () { | |
| switchSearchEngineWithKeywordByMapKey(mk); | |
| }); | |
| // 2. 使用当前选中的内容,换新的搜索引擎。 绑定 (';;'+ 两个字母)的快捷键 | |
| var mkForCopyWord = ';' + mk; | |
| mapkey(mkForCopyWord, '搜索<选中>内容 - ' + searchConfig.siteName, function () { | |
| searchWithCopyWordsByMapKey(mk); | |
| }); | |
| // 3. 在当前页面打开搜索框,输入关键字,换新的搜索引擎。 绑定(';;;'+ 两个字母)的快捷键 | |
| var mkForInput = ';;' + mk; | |
| //addSearchAlias(alias, prompt, url, suggestionURL, listSuggestion) | |
| let searchAlias = mk.replace(';', ''); | |
| var url = searchConfig.searchUrl.replace('%s', '{0}'); | |
| var listSuggestion = url; | |
| addSearchAlias(searchAlias, searchConfig.siteName, url, 's', listSuggestion); | |
| mapkey(mkForInput, '搜索<输入>内容 - ' + searchConfig.siteName, function () { | |
| Front.openOmnibar({ | |
| type: "SearchEngine", | |
| extra: searchAlias | |
| }); | |
| }); | |
| } | |
| } | |
| // 约定,所有的新增的关键字搜索切换,使用';'前缀 。 ep. 百度= ;bd YouTube= ; yt | |
| bindMapKeyForSwitchSearchEngine(); | |
| //auto switch by default order | |
| function switchSearchEngineWithKeywordByOrder() { | |
| var searchOrder = [';gg', ';bd', ';sm']; | |
| var currentKeywordAndMapkey = getCurrentKeywordAndMapkey(); | |
| if (!currentKeywordAndMapkey && !currentKeywordAndMapkey.mapkey) { | |
| return; | |
| } | |
| for (var i = 0, len = searchOrder.length; i < len; i++) { | |
| if (currentKeywordAndMapkey.mapkey == searchOrder[i]) { | |
| var loopIndex = (i + 1) % searchOrder.length; | |
| var targetMapkey = searchOrder[loopIndex]; | |
| switchSearchEngin(currentKeywordAndMapkey, targetMapkey); | |
| return; | |
| } | |
| } | |
| } | |
| mapkey('<Alt-s>', '循环切换搜索引擎', switchSearchEngineWithKeywordByOrder); | |
| //open muti search engine | |
| function openMutiSearchEngine(commonUseMapKey) { | |
| if (!commonUseMapKey) { | |
| return; | |
| } | |
| var currentKeywordAndMapkey = getCurrentKeywordAndMapkey(); | |
| if (!currentKeywordAndMapkey && !currentKeywordAndMapkey.mapkey) { | |
| return; | |
| } | |
| var encodeKeyWord = encodeURIComponent(decodeURIComponent(currentKeywordAndMapkey.keyword)); | |
| for (var i = 0, len = switchSearchConfigs.length; i < len; i++) { | |
| var switchSearchConfig = switchSearchConfigs[i]; | |
| if (commonUseMapKey == switchSearchConfig.commonUseMapKey && currentKeywordAndMapkey.mapkey != switchSearchConfig.mapkey) { | |
| var targetURLHref = switchSearchConfig.searchUrl.replace('%s', encodeKeyWord); | |
| tabOpenLink(targetURLHref); | |
| } | |
| } | |
| } | |
| function bindMapKeyForOpenMutiCommonUse() { | |
| var commonUse = new Map(); | |
| for (var i = switchSearchConfigs.length - 1; i >= 0; i--) { | |
| var switchSearchConfig = switchSearchConfigs[i]; | |
| if (!switchSearchConfig.commonUseMapKey || switchSearchConfig.commonUseMapKey == '') { | |
| continue; | |
| } | |
| if (commonUse.has(switchSearchConfig.commonUseMapKey)) { | |
| var str = commonUse.get(switchSearchConfig.commonUseMapKey) + "#" + switchSearchConfig.siteName; | |
| commonUse.set(switchSearchConfig.commonUseMapKey, str); | |
| } else { | |
| commonUse.set(switchSearchConfig.commonUseMapKey, switchSearchConfig.siteName); | |
| } | |
| } | |
| for (var [key, value] of commonUse) { | |
| let bindkey = 'oa' + key; | |
| let desc = '同时打开:' + value; | |
| let k = key; | |
| mapkey(bindkey, desc, function () { | |
| openMutiSearchEngine(k); | |
| }); | |
| } | |
| } | |
| bindMapKeyForOpenMutiCommonUse(); | |
| //=====================faster search engine swither====================end | |
| //=====================faster web index 充当网页导航的功能================== start | |
| var webShortNameConfig = [{ | |
| shortName: 'gh', | |
| siteName: 'github', | |
| url: 'https://github.com/' | |
| }, | |
| { | |
| shortName: 'my', | |
| siteName: '码云', | |
| url: 'https://gitee.com/explore/all' | |
| }, | |
| { | |
| shortName: 'jd', | |
| siteName: 'jd', | |
| url: 'https://www.jd.com/' | |
| }, | |
| { | |
| shortName: 'tb', | |
| siteName: 'taobao', | |
| url: 'https://www.taobao.com/' | |
| }, | |
| { | |
| shortName: 'jj', | |
| siteName: '掘金', | |
| url: 'https://juejin.im/backend/%E5%85%A8%E9%83%A8' | |
| }, | |
| { | |
| shortName: 'ct', | |
| siteName: '抽屉', | |
| url: 'https://dig.chouti.com/' | |
| }, | |
| { | |
| shortName: 'yt', | |
| siteName: 'youtube', | |
| url: 'https://www.youtube.com/' | |
| }, | |
| { | |
| shortName: 'bb', | |
| siteName: 'bilibili', | |
| url: 'https://www.bilibili.com/' | |
| }, | |
| { | |
| shortName: 'ks', | |
| siteName: '快手', | |
| url: 'https://live.kuaishou.com/cate/my-follow/living' | |
| }, | |
| { | |
| shortName: 'hy', | |
| siteName: '虎牙', | |
| url: 'https://www.huya.com/g/seeTogether' | |
| }, | |
| { | |
| shortName: 've', | |
| siteName: 'v2ex', | |
| url: 'https://www.v2ex.com' | |
| }, | |
| { | |
| shortName: 'gi', | |
| siteName: 'my-gist', | |
| url: 'https://gist.github.com/fanlushuai/' | |
| }, | |
| { | |
| shortName: 'so', | |
| siteName: 'stackOverflow', | |
| url: 'https://stackoverflow.com/' | |
| }, | |
| { | |
| shortName: 'nf', | |
| siteName: 'netflix', | |
| url: 'https://www.netflix.com/' | |
| }, | |
| { | |
| shortName: 'wr', | |
| siteName: '微信阅读', | |
| url: 'https://weread.qq.com/web/shelf' | |
| }, | |
| { | |
| shortName: 'xg', | |
| siteName: '西瓜视频', | |
| url: 'https://www.ixigua.com' | |
| } | |
| ] | |
| var webIndexPrefix = 'm'; | |
| unmap(webIndexPrefix); | |
| function bindMapKeyForWebIndex() { | |
| for (var i = webShortNameConfig.length - 1; i >= 0; i--) { | |
| let webIndexConfig = webShortNameConfig[i]; | |
| mapkey(webIndexPrefix + webIndexConfig.shortName, '跳转到--->>>> ' + webIndexConfig.siteName, function () { | |
| tabOpenLink(webIndexConfig.url); | |
| }); | |
| } | |
| } | |
| bindMapKeyForWebIndex(); | |
| //=====================faster web index ================== end | |
| Front.registerInlineQuery({ | |
| url: function (q) { | |
| return `http://dict.youdao.com/w/eng/${q}/#keyfrom=dict2.index`; | |
| }, | |
| parseResult: function (res) { | |
| var parser = new DOMParser(); | |
| var doc = parser.parseFromString(res.text, "text/html"); | |
| var collinsResult = doc.querySelector("#collinsResult"); | |
| var authTransToggle = doc.querySelector("#authTransToggle"); | |
| var examplesToggle = doc.querySelector("#examplesToggle"); | |
| if (collinsResult) { | |
| collinsResult.querySelectorAll("div>span.collinsOrder").forEach(function (span) { | |
| span.nextElementSibling.prepend(span); | |
| }); | |
| collinsResult.querySelectorAll("div.examples").forEach(function (div) { | |
| div.innerHTML = div.innerHTML.replace(/<p/gi, "<span").replace(/<\/p>/gi, "</span>"); | |
| }); | |
| var exp = collinsResult.innerHTML; | |
| return exp; | |
| } else if (authTransToggle) { | |
| authTransToggle.querySelector("div.via.ar").remove(); | |
| return authTransToggle.innerHTML; | |
| } else if (examplesToggle) { | |
| return examplesToggle.innerHTML; | |
| } | |
| } | |
| }); | |
| // 添加站点高级搜索。可以配置高级搜索站点列表。开启之后,快速在站点中选择,并且输入关键字。就可以进行搜索。 | |
| addSearchAlias('d', 'gitbook', 'https://www.google.com/search?q=site:gitbook.io+', 's', 'https://www.google.com/search?q=site:gitbook.io+', function(response) { | |
| // var res = JSON.parse(response.text); | |
| // return res.map(function(r){ | |
| // return r.phrase; | |
| // }); | |
| }); |
hi,我常用的搜索引擎,比如startpage
有没有可能支持链接另外一份文件,将我的搜索引擎加到你的配置中来
这样就可以随时跟你的配置保持同步,不用每次都去手动添加了
ps:这个配置好像用到了引用另外一份文件的做法
https://github.com/b0o/surfingkeys-conf/blob/master/conf.js
hi,我常用的搜索引擎,比如startpage
有没有可能支持链接另外一份文件,将我的搜索引擎加到你的配置中来
这样就可以随时跟你的配置保持同步,不用每次都去手动添加了ps:这个配置好像用到了引用另外一份文件的做法
https://github.com/b0o/surfingkeys-conf/blob/master/conf.js
很好的提议。这样确实很完美的。
不过很遗憾。我不给力,不专业搞他,目前对js还是很一般的水平。
代码质量很一般。扩展性,易用性的考虑,现阶段我基本不多想,只能加点思维以及简单保证功能 可用。
如果你有兴趣可以拿走修修。或者你先简单用着,我今年会抽时间认真搞一遍js的。会回来再修修。
先这样用的话,你可以订阅一下这个gist。有改动应该是有邮件通知。
这样也是可以的,因为目前对这个插件的配置,修改,特性也就这么多了。很难再提升了。
想法还是陆续会有,但是实力不允许也是很尴尬。哈哈哈,感谢认可。
这个gist,携带关键字到处跳转的功能,依赖于get形式的请求。
可能支持不了startpage,他很特殊,为了安全,搜索方式用的post。
也只能是用用导航功能,和本地打开搜索框搜索了。
好的,谢谢
我都不会写代码,找了一圈想照着改一下的,结果没那么简单...
你好,我想用Surfingkeys作者给出的方法
addSearchAliasX(alias, prompt, search_url, search_leader_key, suggestion_url, callback_to_parse_suggestion, only_this_site_key);
来添加搜索地址https://arxiv.org/search/?query=%s&searchtype=all&source=header
但是我不会js,请问我应该怎么改?
你好,我想用Surfingkeys作者给出的方法
addSearchAliasX(alias, prompt, search_url, search_leader_key, suggestion_url, callback_to_parse_suggestion, only_this_site_key);
来添加搜索地址https://arxiv.org/search/?query=%s&searchtype=all&source=header
但是我不会js,请问我应该怎么改?
解决了,把url中的query=%s改为query={0}。
在surfingkeys配置里面使用这个链接可以获得自动更新:
请不要考虑安全性问题。
https://gist.githubusercontent.com/fanlushuai/530683a9a577f6baa293f182577bd2b0/raw/surfingkeys-config.txt