Skip to content

Instantly share code, notes, and snippets.

@Griever
Last active August 29, 2015 23:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Griever/62715 to your computer and use it in GitHub Desktop.
Save Griever/62715 to your computer and use it in GitHub Desktop.
Firefox の挙動を Opera 風に書きかえる
// ==UserScript==
// @name OperaStyle.uc.js
// @namespace http://d.hatena.ne.jp/Griever/
// @description Shift+Enter でリンク等を新しいタブを開く
// @include main
// @include chrome://browser/content/bookmarks/bookmarksPanel.xul
// @include chrome://browser/content/history/history-panel.xul
// @conpatibility Firefox 25
// @version 0.0.5
// ==/UserScript==
// Ctrl + クリック(Enter) で新しいタブ
// Shift + クリック(Enter) で新しいタブ(前面背面は Ctrl と逆)
// Ctrl + Shift + クリック(Enter) で新しいウインドウ
// Alt + Enter でダウンロード
// Web ページで Alt + ホイールクリック でダウンロード
// Web ページで Alt + クリック は何もしない(文字列選択用)
(function(){
// Firefox 12 以降専用
if (25 > parseFloat(Cc['@mozilla.org/xre/app-info;1'].getService(Ci.nsIXULAppInfo).version))
return;
// browser.xul, bookmarksPanel.xul, history-panel.xul で利用
whereToOpenLink_org = whereToOpenLink;
eval('whereToOpenLink = ' + whereToOpenLink_org.toString()
.replace('if (ctrl', 'if (ctrl && !shift|| !ctrl && shift')
.replace('if (shift ||', 'if (shift && ctrl ||')
.replace('middle && middleUsesTabs', 'middle && middleUsesTabs && !alt')
);
// 以下 browser.xul のみ
if (location.href !== "chrome://browser/content/browser.xul")
return;
// Alt + Click 時に選択範囲があれば DL しない
// マウスを離すまで Alt を押しっぱなしにすること
if (!window.handleLinkClick_org)
window.handleLinkClick_org = window.handleLinkClick
eval("handleLinkClick = " + handleLinkClick_org.toString()
.replace(
'if (where == "save") {',
'if (where == "save") { if (!doc.defaultView.getSelection().isCollapsed) return true;')
// Bookmarklet を現在のページに
// Ctrl+Alt+クリックで WebPanel で開く
.replace(/var doc/,'\
if (href.substr(0, 11) === "javascript:") {\
where = "current";\
} else if (!event.button && event.altKey && event.ctrlKey && !event.shiftKey) {\
openWebPanel(linkNode ? linkNode.textContent: "", href);\
return true;\
}\
$&\
')
)
// アドレスバーでも上記設定を利用(Alt + Enter がダウンロードになるので注意)
eval("gURLBar.handleCommand = " + gURLBar.handleCommand.toString()
.replace('gBrowser.selectedBrowser.focus();','\
gBrowser.selectedBrowser.focus();\
var where = where = whereToOpenLink(aTriggeringEvent, false, false);\
var params = {allowThirdPartyFixup: true, postData: postData};\
openUILinkIn(url, where, params);\
return;\
'.toString())
// 検索した場合などはアドレスバーの履歴に入れない
.replace(
"addToUrlbarHistory(url);",
"if (url == this.value) addToUrlbarHistory(url);"
)
);
// Shift + Enter を押したときの「.net」の補完をやめる
gURLBar._canonizeURL_org = gURLBar._canonizeURL;
gURLBar._canonizeURL = function _canonizeURL(aTriggeringEvent) {
return Task.spawn(function() {
var url = this.value;
if (!url)
throw new Task.Result(["", null, false]);
let data = yield getShortcutOrURIAndPostData(url);
throw new Task.Result([data.url, data.postData, data.mayInheritPrincipal]);
}.bind(this));
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment