Skip to content

Instantly share code, notes, and snippets.

@masato3
Last active March 31, 2025 15:48
Show Gist options
  • Save masato3/564dc1e482fbdd4401eeb6d7222da983 to your computer and use it in GitHub Desktop.
Save masato3/564dc1e482fbdd4401eeb6d7222da983 to your computer and use it in GitHub Desktop.
Surfingkeys 設定ファイル
// デフォルトキー
// https://github.com/brookhong/Surfingkeys/blob/75afdb75e3f226e9a7f2db542a279d924a8403ce/pages/default.js
// 特殊キー
// https://github.com/brookhong/Surfingkeys/blob/982942c780d46908484c9906e6d74ca3628ceb8d/content_scripts/keyboardUtils.js
// APIリスト
// https://github.com/brookhong/Surfingkeys/blob/master/docs/API.md
// feature_groups
// https://github.com/brookhong/Surfingkeys/blob/5940fb2cfac098c3347db9cbb6b47205d9c83641/src/content_scripts/ui/frontend.js
// mapkeyで記載しないとMiscにまとめられて表示される 気にしなくてもいい
// 0: Help
// 1: Mouse Click
// 2: Scroll Page / Element
// 3: Tabs
// 4: Page Navigation
// 5: Sessions
// 6: Search selected with
// 7: Clipboard
// 8: Omnibar
// 9: Visual Mode
// 10: vim-like marks
// 11: Settings
// 12: Chrome URLs
// 13: Proxy
// 14: Misc
// 15: Insert Mode
// 16: Lurk Mode
// ------------------------------------------------------------
// Properties list
// https://github.com/brookhong/Surfingkeys?tab=readme-ov-file#properties-list
// ブラウザ履歴の最大数
settings.omnibarHistoryCacheSize = 500;
// ビジュアルモードでテキストコピー後にノーマルモードへ
settings.modeAfterYank = 'Normal';
// j/k のスクロール量
settings.scrollStepSize = 100;
// 前/次 のページリンクに一致する正規表現
settings.prevLinkRegex = /((<<|prev(ious)?)|<||«||[]+)/i;
settings.nextLinkRegex = /((>>|next)|>||»||[]+)/i;
// ヒント表示位置
settings.hintAlign = 'left';
// ヒントキー表示中にShift押しながらヒントキーで新タブで開く
settings.hintShiftNonActive = true;
// Surfingkeys無効サイト
settings.blocklistPattern = /mail.google.com/i;
// 最近使用した順へ
settings.tabsMRUOrder = false;
settings.historyMUOrder = false;
// 入力ボックスからフォーカスが外れたときにカーソルがあった場所にカーソル
// Xでiで入力ボックスに切り替えるとiが入力され、ヒントキーも表示されるため
settings.cursorAtEndOfInput = false;
// ------------------------------------------------------------
// other
// hit-a-hint hjklはヒントキー表示中の移動キー
// wで切り替えたときに表示すると、デフォルトキーが表示されるときがある
api.Hints.setCharacters('asdfwerxcvuionm');
// ------------------------------------------------------------
// Help
// PassThrough mode 1.5秒間だけSurfingkeys無効
api.mapkey('p', '#0enter ephemeral PassThrough mode to temporarily suppress SurfingKeys', function() {
api.Normal.passThrough(1500);
});
// ------------------------------------------------------------
// Mouse Click
api.map('F', 'gf');
api.map('Q', ';di');
api.map('[', '[[');
api.map(']', ']]');
// ------------------------------------------------------------
// Scroll Page / Element
// 5回分の j/k
api.mapkey('<Ctrl-j>', '#2feedkeys 5j', function() {
api.Normal.feedkeys('5j');
});
api.mapkey('<Ctrl-k>', '#2feedkeys 5k', function() {
api.Normal.feedkeys('5k');
});
// ------------------------------------------------------------
// Tabs
api.map('gxa', 'gx0');
api.map('gxe', 'gx$');
api.map('ga', 'g0');
api.map('ge', 'g$');
api.map('gh', 'gxt');
api.map('gl', 'gxT');
api.map('gp', '<Alt-p>');
api.map('h', 'E');
api.map('l', 'R');
// タブが2個のときにEscでキャンセルすると、もう一個のタブに移動する
api.map('t', 'T');
api.map('<', '<<');
api.map('>', '>>');
// タブ検索でomnibarを常に使用
api.mapkey('T', '#3Choose a tab with omnibar', function() {
api.Front.openOmnibar({type: 'Tabs'});
});
// ------------------------------------------------------------
// Page Navigation
api.map('g/', 'g?');
api.map('gr', 'g#');
api.map('u', 'gu');
api.map(';b', '<Ctrl-6>');
api.map('\\', 'gU');
api.map('H', 'S');
api.map('L', 'D');
// ------------------------------------------------------------
// Search selected with
api.removeSearchAlias('b');
api.removeSearchAlias('d');
api.removeSearchAlias('g');
api.removeSearchAlias('w');
// ------------------------------------------------------------
// Clipboard
api.map('yn', 'yl');
api.map('P', 'cc');
// Markdown形式でサイトリンクコピー <> はエスケープ
api.mapkey('ymd', "#7Copy current page's link with markdown", function() {
const title = window.document.title.replace(/(<|>)/g, '\\$1');
api.Clipboard.write(`[${title}](${location.href})`);
});
// デコードしたサイトリンクコピー
api.mapkey('yd', "#7Copy current page's decoded link", function() {
api.Clipboard.write(decodeURI(location.href));
});
// ------------------------------------------------------------
// Omnibar
api.map('gO', 'go');
api.unmap('go');
api.unmap('oi');
api.map('b', 'ox');
api.unmap('ox');
api.map('B', 'oh');
api.unmap('ob');
api.map('oM', 'om');
api.unmap('om');
// ------------------------------------------------------------
// Visual Mode
api.vunmap('gr');
api.vunmap('q');
// ------------------------------------------------------------
// vim-like marks
// qmarks
// https://github.com/hushin/dotfiles/blob/master/docs/SurfingkeysSetting.js
const qmarksUrls = {
1: 'https://calendar.gameiroiro.com/animecd.php',
2: 'https://ascii2d.net/',
4: 'https://rakko.tools/tools/2/',
a: 'https://annict.com/legacy/sign_in',
A: 'https://www.google.com/analytics/web/?hl=ja',
bl: 'https://booklog.jp/login',
bs: 'https://bsky.app/',
c: 'https://cloudinary.com/users/login',
dm: 'https://mission.games.dmm.com/',
dw: 'http://www.dmm.com/rental/-/wishlist/',
e: 'https://ecnavi.jp/login/',
E: 'https://accounts.evernote.com/login',
fd: 'https://feedly.com/i/back?gate=%2Fhomepage',
fl: 'https://fewlight.net',
fw: 'https://fewlight.net/wish-list/',
gh: 'https://github.com/login',
gs: 'https://gist.github.com/auth/github?',
G: 'https://mail.google.com/',
i: 'https://jp.inoreader.com/ja/login',
j: 'https://translate.google.com/?hl=ja&sl=auto&tl=ja&op=translate',
k: 'https://kanji.sljfaq.org/drawj.html',
l: 'http://localhost:4000/',
m: 'https://monitor.macromill.com/airs/exec/monitorLoginAction.do',
M: 'https://ssl.pc.moppy.jp/login/',
n: 'https://app.netlify.com/',
pi: 'https://accounts.pixiv.net/login?',
pt: 'https://photos.google.com/login',
px: 'https://pex.jp/login?',
q: 'https://creazy.net/amazon_quick_affiliate#AmaQuick',
r: 'https://research-panel.jp/login/',
s: 'https://speedtest.gate02.ne.jp/',
S: 'https://search.google.com/search-console/manual-actions?hl=ja',
tm: 'https://tokimeki.blue/login',
tn: 'https://notes.toodledo.com/',
to: 'https://outlines.toodledo.com/#/dashboard',
vu: 'https://www.virustotal.com/gui/home/upload',
vU: 'https://www.virustotal.com/gui/home/url',
wg: 'https://gamerch.com/gakumasu/',
wp: 'https://gamewith.jp/pricone-re/',
x: 'https://x.com/login'
};
const qmarksMapKey = (prefix, urls, newTab) => {
const openLink = (link, newTab) => () => {
api.RUNTIME('openLink', {
tab: { tabbed: newTab },
url: link
});
};
for (const key in urls) {
api.mapkey(prefix + key, `#10qmark: ${urls[key]}`, openLink(urls[key], newTab));
};
};
// gn/go キー qmarksUrlsに設定したキーと対のURLを 新タブ/現在のタブ で開く
api.unmap('gn');
qmarksMapKey('gn', qmarksUrls, true);
qmarksMapKey('go', qmarksUrls, false);
api.map('M', 'm');
api.unmap('m');
// ------------------------------------------------------------
// Chrome URLs
api.unmap('gc');
api.unmap('gk');
api.mapkey('gD', '#12Open Chrome dns cache', function() {
api.tabOpenLink('chrome://net-internals/#dns');
});
api.mapkey('gE', '#12Open Chrome Extensions', function() {
api.tabOpenLink('chrome://extensions/');
});
api.mapkey('gS', '#12Open Chrome Extensons shortcuts', function() {
api.tabOpenLink('chrome://extensions/shortcuts');
});
api.mapkey('gV', '#12Open Chrome version', function() {
api.tabOpenLink('chrome://version/');
});
// ------------------------------------------------------------
// Proxy
const unmapsProxy = [
'cp', ';pa', ';pb', ';pd', ';ps', ';pc', ';cp', ';ap'
];
unmapsProxy.forEach(function(key) {
api.unmap(key);
});
// ------------------------------------------------------------
// Misc
// Amazon jp商品URL短く ただしdp以外のパターンがあるみたい
// 現在のタブをリロード
api.mapkey(';a', 'Amazon short url in current tab', function () {
const asin = document.getElementById('ASIN').value;
location.href='https://amazon.co.jp/dp/' + asin;
});
// 日付と曜日と時刻を表示 数字は0詰め2桁 Escで非表示
api.mapkey(';dd', 'display the date, day, and time', function () {
const padZero2 = (num) => String(num).padStart(2, '0');
const today = new Date();
const month = padZero2(today.getMonth() + 1);
const date = padZero2(today.getDate());
const day = today.getDay();
const dayList = ['日', '月', '火', '水', '木', '金', '土'];
const dayWeek = dayList[day];
const hour = padZero2(today.getHours());
const minutes = padZero2(today.getMinutes());
const formatTodayDate = `${month}${date}日(${dayWeek}) ${hour}:${minutes}`;
api.Front.showPopup(formatTodayDate);
});
// Pocket ブックマークレット
// https://efe.me/posts/2025-03-02-pocket-universal-browser-extension/
api.mapkey(';p', 'Pocket ブックマークレット', function () {
const url = encodeURIComponent(window.location.href);
const pocketUrl = 'https://getpocket.com/save?url=' + url;
api.tabOpenLink(pocketUrl);
});
// Raindrop.io ブックマークレット
// https://help.raindrop.io/install-extension#bookmarklet-universal
// ブックマークのみ 自動で保存されるので間違えたら削除
api.mapkey(';r', 'Raindrop ブックマークレット', function () {
const rspW = 450, rspH = 600,
rspL = parseInt((screen.width / 2) - (rspW / 2)),
rspT = parseInt((screen.height / 2) - (rspH / 2));
window.open(
'https://app.raindrop.io/add?link=' + encodeURIComponent(location.href) + '&title=' +
encodeURIComponent(document.title), 'raindrop-save', 'width=' + rspW + ',height=' + rspH +
',resizable=yes,scrollbars=yes,status=false,location=false,toolbar=false,left=' + rspL + ',top=' + rspT
);
});
// 表示中のサイトをGoogle翻訳 ウェブサイトで翻訳 auto-jp
api.mapkey(';t', 'Search Google翻訳 ウェブサイト', function() {
api.tabOpenLink(`https://translate.google.com/translate?hl=&sl=auto&tl=ja&u=${location.href}`);
});
// 後で設定しないとうまくいかない
api.map('mf', 'cf');
// ------------------------------------------------------------
// 検索エンジン favicon取得できないサイトある
// Google 1年以内
api.addSearchAlias('1', 'Google-1年以内', 'https://www.google.com/search?q={0}&lr=lang_ja&hl=ja&tbs=lr:lang_1ja,qdr:y');
api.mapkey('o1', 'Search with alias Google 1年以内', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: '1'});
});
// 2ch(5ch)横断検索 - re.Find2ch
api.addSearchAlias('2', '2ch(5ch)横断検索-re.Find2ch', 'https://refind2ch.org/search?q=');
api.mapkey('o2', 'Search with alias 2ch(5ch)横断検索', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: '2'});
});
// Google 3ヶ月以内
api.addSearchAlias('3', 'Google-3ヶ月以内', 'https://www.google.com/search?q={0}&lr=lang_ja&hl=ja&tbs=lr:lang_1ja,qdr:m3');
api.mapkey('o3', 'Search with alias Google 3ヶ月以内', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: '3'});
});
// Google 6ヶ月以内
api.addSearchAlias('6', 'Google-6ヶ月以内', 'https://www.google.com/search?q={0}&lr=lang_ja&hl=ja&tbs=lr:lang_1ja,qdr:m6');
api.mapkey('o6', 'Search with alias Google 6ヶ月以内', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: '6'});
});
// annict
api.addSearchAlias('ac', 'annict', 'https://annict.com/search?q=');
api.mapkey('oac', 'Search with alias annict', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'ac'});
});
// ABEMA
api.addSearchAlias('am', 'ABEMA', 'https://abema.tv/search?q=');
api.mapkey('oam', 'Search with alias ABEMA', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'am'});
});
// aguse ウェブ検査したいURL貼り付け
api.addSearchAlias('as', 'aguse', 'https://www.aguse.jp/?url=');
api.mapkey('oas', 'Search with alias aguse URL', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'as'});
});
// Amazon jp
api.addSearchAlias('az', 'amazon', 'https://www.amazon.co.jp/s?k=');
api.mapkey('oaz', 'Search with alias amazon', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'az'});
});
// ブクログ 電子書籍(一般書) ストア横断検索
api.addSearchAlias('ba', 'ブクログ-電子書籍(一般書)-ストア横断', 'https://booklog.jp/search?keyword={0}&service_id=202&index=All&sort=rank');
api.mapkey('oba', 'Search with alias ブクログ 電子書籍(一般書) ストア横断検索', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'ba'});
});
// ブクログ 電子書籍(一般書) Kindle
api.addSearchAlias('bk', 'ブクログ-電子書籍(一般書)-Kindle', 'https://booklog.jp/search?keyword={0}&service_id=202&index=1&sort=rank');
api.mapkey('obk', 'Search with alias ブクログ 電子書籍(一般書) Kindle', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'bk'});
});
// ブクログ 電子書籍(一般書) honto
api.addSearchAlias('bh', 'ブクログ-電子書籍(一般書)-honto', 'https://booklog.jp/search?keyword={0}&service_id=202&index=16&sort=rank');
api.mapkey('obh', 'Search with alias ブクログ 電子書籍(一般書) honto', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'bh'});
});
// Bluesky
api.addSearchAlias('bs', 'Bluesky', 'https://bsky.app/search?q=');
api.mapkey('obs', 'Search with alias Bluesky', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'bs'});
});
// Bluesky my ログインしてから
api.addSearchAlias('bm', 'Bluesky-my', 'https://bsky.app/search?q=from%3Ame+');
api.mapkey('obm', 'Search with alias Bluesky', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'bm'});
});
// Can I use
api.addSearchAlias('ci', 'Can-I-use', 'https://caniuse.com/?search=');
api.mapkey('oci', 'Search with alias Can I use', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'ci'});
});
// Chocolatey
api.addSearchAlias('cl', 'Chocolatey', 'https://chocolatey.org/packages?q=');
api.mapkey('ocl', 'Search with alias Chocolatey', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'cl'});
});
// Chrome ウェブストア
api.addSearchAlias('cw', 'chrome-ウェブストア', 'https://chromewebstore.google.com/search/');
api.mapkey('ocw', 'Search with alias chrome ウェブストア', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'cw'});
});
// DuckDuckGo 1年以内
api.addSearchAlias('d1', 'DuckDuckGo-1年以内', 'https://duckduckgo.com/?q={0}&df=y&ia=web');
api.mapkey('od1', 'Search with alias DuckDuckGo 1年以内', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'd1'});
});
// DuckDuckGo
api.addSearchAlias('dd', 'DuckDuckGo', 'https://duckduckgo.com/?q={0}&ia=web');
api.mapkey('odd', 'Search with alias DuckDuckGo', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'dd'});
});
// DMM 単品DVDレンタル
api.addSearchAlias('dD', 'DMM-単品DVDレンタル', 'https://www.dmm.com/rental/ppr/-/search/=/searchstr={0}/floor=dvd/limit=120/');
api.mapkey('odD', 'Search with alias DMM 単品DVDレンタル', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'dD'});
});
// Google翻訳 auto-en
api.addSearchAlias('e', 'Google翻訳-auto-en', 'https://translate.google.com/?hl=ja&tab=TT&sl=auto&tl=en&text=');
api.mapkey('oe', 'Search with alias Google翻訳 auto-en', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'e'});
});
// Google 日本除外で1年以内 検索語によっては除外が難しい
api.addSearchAlias('E', 'Google日本除外-1年以内', 'https://www.google.com/search?q={0}&gl=us&hl=en&pws=0&tbs=qdr:y-lang_ja');
api.mapkey('oE', 'Search with alias Google日本除外-1年以内', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'E'});
});
// Google
api.addSearchAlias('gg', 'Google', 'https://www.google.com/search?q=');
api.mapkey('ogg', 'Search with alias Google', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'gg'});
});
// Gist my
api.addSearchAlias('gm', 'Gist-my', 'https://gist.github.com/search?q=user%3Amasato3+{0}&ref=searchresults');
api.mapkey('ogm', 'Search with alias Gist my', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'gm'});
});
// grep.app
api.addSearchAlias('gp', 'grep.app', 'https://grep.app/search?q=');
api.mapkey('ogp', 'Search with alias grep.app', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'gp'});
});
// GitHub repositories
api.addSearchAlias('gr', 'GitHub-repositories', 'https://github.com/search?q={0}&type=repositories');
api.mapkey('ogr', 'Search with alias GitHub repositories', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'gr'});
});
// Gist
api.addSearchAlias('gs', 'Gist', 'https://gist.github.com/search?utf8=%E2%9C%93&q=');
api.mapkey('ogs', 'Search with alias Gist', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'gs'});
});
// IT用語辞典 e-Words
api.addSearchAlias('i', 'IT用語辞典-e-Words', 'https://e-words.jp/search?q=');
api.mapkey('oi', 'Search with alias IT用語辞典 e-Words', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'i'});
});
// Google翻訳 auto-jp
api.addSearchAlias('j', 'Google翻訳-auto-jp', 'https://translate.google.com/?hl=ja&sl=auto&tl=ja&text=');
api.mapkey('oj', 'Search with alias Google翻訳 auto-jp', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'j'});
});
// JVN iPedia - 脆弱性対策情報データベース
api.addSearchAlias('J', 'JVN-Pedia', 'https://jvndb.jvn.jp/search/index.php?mode=_vulnerability_search_IA_VulnSearch&lang=ja&useSynonym=1&keyword=');
api.mapkey('oJ', 'Search with alias JVN iPedia', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'J'});
});
// 価格.com 日本語文字化け
api.addSearchAlias('k', '価格.com', 'http://kakaku.com/search_results/');
api.mapkey('ok', 'Search with alias 価格.com', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'k'});
});
// MDN Web Docs
api.addSearchAlias('mw', 'MDN-Web-Docs', 'https://developer.mozilla.org/ja/search?q=');
api.mapkey('omw', 'Search with alias MDN Web Docs', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'mw'});
});
// Neovim Googleサイト内検索
api.addSearchAlias('n', 'Neovim-Googleサイト内検索', 'https://www.google.com/search?q=site:neovim.io%20');
api.mapkey('on', 'Search with alias Neovim Googleサイト内検索', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'n'});
});
// goo辞書 all
api.addSearchAlias('o', 'goo辞書-all', 'https://dictionary.goo.ne.jp/srch/all/{0}/m0u/');
api.mapkey('oo', 'Search with alias goo辞書 all', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'o'});
});
// PortableApps
api.addSearchAlias('pa', 'PortableApps', 'https://portableapps.com/search/node/');
api.mapkey('opa', 'Search with alias PortableApps', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'pa'});
});
// ピクシブ百科事典
api.addSearchAlias('pd', 'ピクシブ百科事典', 'https://dic.pixiv.net/search?query=');
api.mapkey('opd', 'Search with alias ピクシブ百科事典', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'pd'});
});
// pixiv
api.addSearchAlias('pi', 'pixiv', 'https://www.pixiv.net/tags/{0}/artworks?s_mode=s_tag');
api.mapkey('opi', 'Search with alias pixiv', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'pi'});
});
// Python 言語リファレンス
api.addSearchAlias('pp', 'python-言語リファレンス', 'https://docs.python.org/ja/3/search.html?q=');
api.mapkey('opp', 'Search with alias python-言語リファレンス', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'pp'});
});
// Google Play store アプリ
api.addSearchAlias('ps', 'Google-Play-store-アプリ', 'https://play.google.com/store/search?q={0}&c=apps');
api.mapkey('ops', 'Search with alias Google Play store アプリ', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'ps'});
});
// Qiita 新着順
api.addSearchAlias('q', 'Qiita-新着', 'https://qiita.com/search?q={0}&sort=created');
api.mapkey('oq', 'Search with alias Qiita 新着', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'q'});
});
// Raindrop.io
api.addSearchAlias('r', 'Raindrop', 'https://app.raindrop.io/my/0/', 'https://raindrop.io/favicon.ico');
api.mapkey('or', 'Search with alias Raindrop.io', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'r'});
});
// Yahoo!リアルタイム検索
api.addSearchAlias('R', 'Yahoo!リアルタイム検索', 'https://search.yahoo.co.jp/realtime/search?p={0}&ei=UTF-8&ifr=tp_sc');
api.mapkey('oR', 'Search with alias Yahoo!リアルタイム検索', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'R'});
});
// Googleサイト内検索 hostname
api.addSearchAlias('s', 'Googleサイト内検索 hostname', `https://www.google.com/search?q=site:${window.location.hostname}%20`);
api.mapkey('os', 'Search with alias Googleサイト内検索 hostname', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 's'});
});
// Google翻訳 ウェブサイト auto-jp 翻訳したいURL貼り付け
api.addSearchAlias('tw', 'Google翻訳-ウェブサイト-auto-jp', 'https://translate.google.com/translate?hl=&sl=auto&tl=ja&u=');
api.mapkey('otw', 'Search with alias Google翻訳 ウェブサイト auto-jp URL', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'tw'});
});
// X user 最新
api.addSearchAlias('x', 'X-user-最新', 'https://x.com/search?q=from:{0}&f=live');
api.mapkey('ox', 'Search with alias X user 最新', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'x'});
});
// Wikipedia en
api.addSearchAlias('we', 'wikipedia-en', 'https://en.wikipedia.org/wiki/');
api.mapkey('owe', 'Search with alias wikipedia en', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'we'});
});
// Wikipedia jp
api.addSearchAlias('wj', 'wikipedia-jp', 'https://ja.wikipedia.org/wiki/');
api.mapkey('owj', 'Search with alias wikipedia', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'wj'});
});
// プリコネ攻略wiki|プリンセスコネクト!Re:Dive解説 - ゲームウィズ
api.addSearchAlias('wp', 'プリコネ攻略wiki', 'https://gamewith.jp/pricone-re/search/results?query=');
api.mapkey('owp', 'Search with alias プリコネ攻略wiki', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'wp'});
});
// zenn
api.addSearchAlias('z', 'zenn', 'https://zenn.dev/search?q=');
api.mapkey('oz', 'Search with alias zenn', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: 'z'});
});
// 1Screen
api.addSearchAlias('!', '1Screen', 'https://1screen.ciatr.jp/search?q=');
api.mapkey('o!', 'Search with alias 1Screen', function() {
api.Front.openOmnibar({type: 'SearchEngine', extra: '!'});
});
// 検索して検索欄が表示中のときに他の検索エンジンでの再検索
// S > (入力要素が複数あるときは選択後に)検索エンジンで設定したaddSearchAliasのkey入力
api.mapkey('S', 'Search with alias feedkeys yis', function() {
api.Normal.feedkeys('yis');
});
// ------------------------------------------------------------
// Insert Mode
// 絵文字off
api.iunmap(':');
// ------------------------------------------------------------
// 指定サイトのキー
// サイトキーにfが割り当てられているので他に割り当て
api.map('<Alt-f>', 'f', /abema.tv|jp.inoreader.com|www.youtube.com/);
// サイトキーなどで j/k が割り当てられていると設定した Ctrl- j/k が動かないので置き換え
if (
/jp.inoreader.com|www.pixiv.net|notes.toodledo.com|outlines.toodledo.com|www.youtube.com|x.com/.test(
window.location.hostname
)
) {
api.map('<Ctrl-j>', 'd');
api.map('<Ctrl-k>', 'e');
}
// ABEMA
api.unmap('f', /abema.tv/);
// Feedly gaなどはgとaみたいに2個unmapする必要あり
const unmapsFeedly = [
'?', 'g', 'a', '/', 'r', 'j', 'k', 'n', 'p', 'o', 'v', 's', 'z'
];
unmapsFeedly.forEach(function(key) {
api.unmap(key, /feedly.com/);
});
// pixiv cockpit for pixiv使用中
const unmapsPixiv = [
'?', 'p', 'i', 'm', 'j', 'k', 'n'
];
unmapsPixiv.forEach(function (key) {
api.unmap(key, /www.pixiv.net/);
});
// Toggl ?が効かなくなることがある
const unmapsToggl = [
'?', 'c', 'm', 's', 'v', 'n', '<Ctrl-k>'
];
unmapsToggl.forEach(function (key) {
api.unmap(key, /toggl.com/);
});
// TOKIMEKI
const unmapsTokimeki = [
'r', 'd'
];
unmapsTokimeki.forEach(function (key) {
api.unmap(key, /tokimeki.blue/);
});
// Toodledo Task qは一度クリック後などでないと動かない
const unmapsToodledoTask = [
'?', 'i', 'c', 'q', 'e', 'd', 'w', 'z', 'x', 's', 'M', 's'
];
unmapsToodledoTask.forEach(function (key) {
api.unmap(key, /www.toodledo.com/);
});
// Toodledo Notes eは一度クリック後でないと正常に動かない
const unmapsToodledoNotes = [
'e', 'j', 'k', 'n'
];
unmapsToodledoNotes.forEach(function (key) {
api.unmap(key, /notes.toodledo.com/);
});
// Toodledo Outlines c/a は一度クリック後でないと正常に動かない
const unmapsToodledoOutlines = [
'c', 'a', 'j', 'k', 'x'
];
unmapsToodledoOutlines.forEach(function (key) {
api.unmap(key, /outlines.toodledo.com/);
});
// YouTube unmapで数字は無効にできない 使うときはPassThrough modeから
const unmapsYoutube = [
'?', '.', 'c', 'i', 'f', 'j', 'k', 'l', 't', '<', '>', ','
];
unmapsYoutube.forEach(function(key) {
api.unmap(key, /www.youtube.com/);
});
// X
const unmapsX = [
'?', 'j', 'k', 't'
];
unmapsX.forEach(function(key) {
api.unmap(key, /x.com/);
});
// ------------------------------------------------------------
// 指定サイトでSurfingkeysの一部キー優先
// inoreader
api.unmapAllExcept(
[
'p', 'i', 'I', '<Alt-f>', 'q', 'F', '<Ctrl-j>', '<Ctrl-k>', 'X', 'h', 'l', 't', '<', '>', 'T', 'w', 'L', 'H', 'saz', 's1',
'sgg', 'si', 'so', 'sR', 'swj', 'b', 'B', "'"
],
/jp.inoreader.com/
);
// ------------------------------------------------------------
// style
// theme
settings.theme = `
.sk_theme {
font-family: sans-serif;
font-size: 16px;
}
.sk_theme #sk_omnibarSearchResult>ul>li.focused {
background: #cddef9 !important;
}
.sk_theme #sk_omnibarSearchResult>ul>li:nth-child(odd) {
background: #f7f7f7;
}
#sk_tabs .sk_tab_hint {
font-family: monospace;
font-size: 16px;
font-weight: normal;
text-transform: lowercase;
}
`;
// Link Hints
api.Hints.style (`
font-family: monospace;
font-size: 16px;
font-weight: normal;
text-transform: lowercase;
`);
// Text Hints
api.Hints.style (`
font-family: monospace;
font-size: 16px;
text-transform: lowercase;
`,
'text'
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment