1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2026-04-17 16:13:31 +02:00

tab related mappings for muttator, thanks teramako

This commit is contained in:
Martin Stubenschrott
2008-06-02 14:20:28 +00:00
parent 20a672a961
commit e49aed94df
6 changed files with 314 additions and 238 deletions

View File

@@ -82,7 +82,7 @@ liberator.Addressbook = function () //{{{
{ {
to = gDBView.hdrForFirstSelectedMessage.mime2DecodedAuthor; to = gDBView.hdrForFirstSelectedMessage.mime2DecodedAuthor;
} }
catch (e) { liberator.echoerr("Exxx: No message is selected");} catch (e) { liberator.beep();}
if (!to) if (!to)
return; return;
@@ -93,7 +93,8 @@ liberator.Addressbook = function () //{{{
if (/^\S+\s+\S+\s*$/.test(displayName)) if (/^\S+\s+\S+\s*$/.test(displayName))
{ {
var names = displayName.split(/\s+/); var names = displayName.split(/\s+/);
displayName = "-firstname=" + names[0] + " -lastname=" + names[1]; displayName = "-firstname=" + names[0].replace(/"/g, "")
+ " -lastname=" + names[1].replace(/"/g, "");
} }
else else
{ {
@@ -140,7 +141,7 @@ liberator.Addressbook = function () //{{{
[["-name", "-n"], liberator.commands.OPTION_STRING]] [["-name", "-n"], liberator.commands.OPTION_STRING]]
}); });
liberator.commands.add(["contacts", "abook"], liberator.commands.add(["contacts", "addr[essbook]"],
"List or open multiple addresses", "List or open multiple addresses",
function (args, special) { liberator.addressbook.list(args, special); }); function (args, special) { liberator.addressbook.list(args, special); });

View File

@@ -793,7 +793,7 @@ const liberator = (function () //{{{
.quit(nsIAppStartup.eRestart | nsIAppStartup.eAttemptQuit); .quit(nsIAppStartup.eRestart | nsIAppStartup.eAttemptQuit);
}, },
// TODO: probably move to {muttator,vimperator,...}.js // TODO: move to {muttator,vimperator,...}.js
// this function is called, when the chrome is ready // this function is called, when the chrome is ready
startup: function () startup: function ()
{ {
@@ -820,7 +820,7 @@ const liberator = (function () //{{{
if (liberator.has("bookmarks")) { log("bookmarks"); liberator.bookmarks = liberator.Bookmarks(); } if (liberator.has("bookmarks")) { log("bookmarks"); liberator.bookmarks = liberator.Bookmarks(); }
if (liberator.has("history")) { log("history"); liberator.history = liberator.History(); } if (liberator.has("history")) { log("history"); liberator.history = liberator.History(); }
if (liberator.has("mail") && liberator.Mail) { log("mail"); liberator.mail = liberator.Mail(); } if (liberator.has("mail") && liberator.Mail) { log("mail"); liberator.mail = liberator.Mail(); }
if (liberator.has("tabs")) { log("tabs"); liberator.tabs = liberator.Tabs(); } if (liberator.has("tabs") && liberator.Tabs) { log("tabs"); liberator.tabs = liberator.Tabs(); }
if (liberator.has("marks")) { log("marks"); liberator.marks = liberator.Marks(); } if (liberator.has("marks")) { log("marks"); liberator.marks = liberator.Marks(); }
if (liberator.has("quickmarks")) { log("quickmarks"); liberator.quickmarks = liberator.QuickMarks(); } if (liberator.has("quickmarks")) { log("quickmarks"); liberator.quickmarks = liberator.QuickMarks(); }
if (liberator.has("hints")) { log("hints"); liberator.hints = liberator.Hints(); } if (liberator.has("hints")) { log("hints"); liberator.hints = liberator.Hints(); }

View File

@@ -223,6 +223,18 @@ liberator.Mail = function () //{{{
"Inspect (focus) message", "Inspect (focus) message",
function () { content.focus(); }); function () { content.focus(); });
liberator.mappings.add(modes, ["I"],
"Open the message in new tab",
function ()
{
if (gDBView && gDBView.selection.count < 1)
{
liberator.echoerr("Message is not selected");
return;
}
MsgOpenNewTabForMessage();
});
liberator.mappings.add(modes, ["<Space>"], liberator.mappings.add(modes, ["<Space>"],
"Scroll message or select next unread one", "Scroll message or select next unread one",
function () { return true; }, function () { return true; },
@@ -583,6 +595,8 @@ liberator.Mail = function () //{{{
var folder = liberator.mail.getFolders(args, true, true)[count]; var folder = liberator.mail.getFolders(args, true, true)[count];
if (!folder) if (!folder)
liberator.echoerr("Folder \"" + args + "\" does not exist"); liberator.echoerr("Folder \"" + args + "\" does not exist");
else if (liberator.forceNewTab)
MsgOpenNewTabForFolder(folder.URI);
else else
SelectFolder(folder.URI); SelectFolder(folder.URI);
}, },

View File

@@ -32,7 +32,7 @@ liberator.config = {
hostApplication: "Thunderbird", // TODO: can this be found out otherwise? gBrandBundle.getString("brandShortName"); hostApplication: "Thunderbird", // TODO: can this be found out otherwise? gBrandBundle.getString("brandShortName");
/*** optional options, there are checked for existance and a fallback provided ***/ /*** optional options, there are checked for existance and a fallback provided ***/
features: ["hints", "mail", "marks", "addressbook"], features: ["hints", "mail", "marks", "addressbook", "tabs"],
guioptions: { m: ["mail-toolbar-menubar2"], T: ["mail-bar2"], f: ["folderPaneBox", "folderpane_splitter"], F: ["folderPaneHeader"] }, guioptions: { m: ["mail-toolbar-menubar2"], T: ["mail-bar2"], f: ["folderPaneBox", "folderpane_splitter"], F: ["folderPaneHeader"] },
get browserModes() { return [liberator.modes.MESSAGE]; }, get browserModes() { return [liberator.modes.MESSAGE]; },
@@ -45,7 +45,7 @@ liberator.config = {
isComposeWindow: false, isComposeWindow: false,
dialogs: [ dialogs: [
["about", "About Thunderbird", //XXX: Shredder ? ["about", "About Thunderbird",
function () { openAboutDialog(); }], function () { openAboutDialog(); }],
["addons", "Manage Add-ons", ["addons", "Manage Add-ons",
function () { openAddonsMgr(); }], function () { openAddonsMgr(); }],

View File

@@ -56,6 +56,7 @@ the terms of any one of the MPL, the GPL or the LGPL.
<script type="application/x-javascript;version=1.8" src="options.js"/> <script type="application/x-javascript;version=1.8" src="options.js"/>
<script type="application/x-javascript;version=1.8" src="ui.js"/> <script type="application/x-javascript;version=1.8" src="ui.js"/>
<script type="application/x-javascript;version=1.8" src="util.js"/> <script type="application/x-javascript;version=1.8" src="util.js"/>
<script type="application/x-javascript;version=1.8" src="tabs.js"/>
<window id="messengerWindow"> <window id="messengerWindow">

View File

@@ -26,11 +26,33 @@ the provisions above, a recipient may use your version of this file under
the terms of any one of the MPL, the GPL or the LGPL. the terms of any one of the MPL, the GPL or the LGPL.
}}} ***** END LICENSE BLOCK *****/ }}} ***** END LICENSE BLOCK *****/
// TODO: many methods do not work with Thunderbird correctly yet
liberator.Tabs = function () //{{{ liberator.Tabs = function () //{{{
{ {
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
////////////////////// PRIVATE SECTION ///////////////////////////////////////// ////////////////////// PRIVATE SECTION /////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////{{{ /////////////////////////////////////////////////////////////////////////////{{{
var tabmail;
var getBrowser = (function(){
if (liberator.config.hostApplication == "Thunderbird")
{
return function()
{
if (!tabmail)
{
tabmail = document.getElementById('tabmail');
tabmail.__defineGetter__('mTabContainer',function(){ return this.tabContainer; });
tabmail.__defineGetter__('mTabs',function(){ return this.tabContainer.childNodes; });
tabmail.__defineGetter__('mCurrentTab',function(){ return this.tabContainer.selectedItem; });
tabmail.__defineGetter__('mStrip',function(){ return this.tabStrip; });
}
return tabmail;
};
}
else
return window.getBrowser;
})();
var alternates = [getBrowser().mCurrentTab, null]; var alternates = [getBrowser().mCurrentTab, null];
// used for the "gb" and "gB" mappings to remember the last :buffer[!] command // used for the "gb" and "gB" mappings to remember the last :buffer[!] command
@@ -72,12 +94,44 @@ liberator.Tabs = function () //{{{
} }
// hide tabs initially // hide tabs initially
if (liberator.config.name == "Vimperator")
getBrowser().mStrip.getElementsByClassName("tabbrowser-tabs")[0].collapsed = true; getBrowser().mStrip.getElementsByClassName("tabbrowser-tabs")[0].collapsed = true;
/////////////////////////////////////////////////////////////////////////////}}} /////////////////////////////////////////////////////////////////////////////}}}
////////////////////// OPTIONS ///////////////////////////////////////////////// ////////////////////// OPTIONS /////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////{{{ /////////////////////////////////////////////////////////////////////////////{{{
liberator.options.add(["showtabline", "stal"],
"Control when to show the tab bar of opened web pages",
"number", liberator.config.name == "Vimperator" ? 2 : 0,
{
setter: function (value)
{
var tabs = liberator.tabs.tabStrip;
if (!tabs)
return;
if (value == 0)
{
tabs.collapsed = true;
}
else if (value == 1)
{
liberator.options.setPref("browser.tabs.autoHide", true);
tabs.collapsed = false;
}
else
{
liberator.options.setPref("browser.tabs.autoHide", false);
tabs.collapsed = false;
}
},
validator: function (value) { return (value >= 0 && value <= 2); }
});
if (liberator.config.name == "Vimperator")
{
liberator.options.add(["activate", "act"], liberator.options.add(["activate", "act"],
"Define when tabs are automatically activated", "Define when tabs are automatically activated",
"stringlist", "homepage,quickmark,tabopen,paste", "stringlist", "homepage,quickmark,tabopen,paste",
@@ -114,39 +168,33 @@ liberator.Tabs = function () //{{{
}, },
validator: function (value) { return (value >= 0 && value <= 4); } validator: function (value) { return (value >= 0 && value <= 4); }
}); });
liberator.options.add(["showtabline", "stal"],
"Control when to show the tab bar of opened web pages",
"number", 2,
{
setter: function (value)
{
var tabs = getBrowser().mStrip.getElementsByClassName("tabbrowser-tabs")[0];
if (!tabs)
return;
if (value == 0)
{
tabs.collapsed = true;
} }
else if (value == 1)
{
liberator.options.setPref("browser.tabs.autoHide", true);
tabs.collapsed = false;
}
else
{
liberator.options.setPref("browser.tabs.autoHide", false);
tabs.collapsed = false;
}
},
validator: function (value) { return (value >= 0 && value <= 2); }
});
/////////////////////////////////////////////////////////////////////////////}}} /////////////////////////////////////////////////////////////////////////////}}}
////////////////////// MAPPINGS //////////////////////////////////////////////// ////////////////////// MAPPINGS ////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////{{{ /////////////////////////////////////////////////////////////////////////////{{{
liberator.mappings.add([liberator.modes.NORMAL], ["g0", "g^"],
"Go to the first tab",
function (count) { liberator.tabs.select(0); });
liberator.mappings.add([liberator.modes.NORMAL], ["g$"],
"Go to the last tab",
function (count) { liberator.tabs.select("$"); });
liberator.mappings.add([liberator.modes.NORMAL], ["gt", "<C-n>", "<C-Tab>", "<C-PageDown>"],
"Go to the next tab",
function (count) { liberator.tabs.select(count > 0 ? count - 1: "+1", count > 0 ? false : true); },
{ flags: liberator.Mappings.flags.COUNT });
liberator.mappings.add([liberator.modes.NORMAL], ["gT", "<C-p>", "<C-S-Tab>", "<C-PageUp>"],
"Go to previous tab",
function (count) { liberator.tabs.select("-" + (count < 1 ? 1 : count), true); },
{ flags: liberator.Mappings.flags.COUNT });
if (liberator.config.name == "Vimperator")
{
liberator.mappings.add([liberator.modes.NORMAL], ["b"], liberator.mappings.add([liberator.modes.NORMAL], ["b"],
"Open a prompt to switch buffers", "Open a prompt to switch buffers",
function () { liberator.commandline.open(":", "buffer! ", liberator.modes.EX); }); function () { liberator.commandline.open(":", "buffer! ", liberator.modes.EX); });
@@ -175,24 +223,6 @@ liberator.Tabs = function () //{{{
function (count) { liberator.tabs.switchTo(null, null, count, true); }, function (count) { liberator.tabs.switchTo(null, null, count, true); },
{ flags: liberator.Mappings.flags.COUNT }); { flags: liberator.Mappings.flags.COUNT });
liberator.mappings.add([liberator.modes.NORMAL], ["g0", "g^"],
"Go to the first tab",
function (count) { liberator.tabs.select(0); });
liberator.mappings.add([liberator.modes.NORMAL], ["g$"],
"Go to the last tab",
function (count) { liberator.tabs.select("$"); });
liberator.mappings.add([liberator.modes.NORMAL], ["gt", "<C-n>", "<C-Tab>", "<C-PageDown>"],
"Go to the next tab",
function (count) { liberator.tabs.select(count > 0 ? count - 1: "+1", count > 0 ? false : true); },
{ flags: liberator.Mappings.flags.COUNT });
liberator.mappings.add([liberator.modes.NORMAL], ["gT", "<C-p>", "<C-S-Tab>", "<C-PageUp>"],
"Go to previous tab",
function (count) { liberator.tabs.select("-" + (count < 1 ? 1 : count), true); },
{ flags: liberator.Mappings.flags.COUNT });
liberator.mappings.add([liberator.modes.NORMAL], ["u"], liberator.mappings.add([liberator.modes.NORMAL], ["u"],
"Undo closing of a tab", "Undo closing of a tab",
function (count) { liberator.commands.get("undo").execute("", false, count); }, function (count) { liberator.commands.get("undo").execute("", false, count); },
@@ -220,6 +250,7 @@ liberator.Tabs = function () //{{{
else else
liberator.tabs.select(index); liberator.tabs.select(index);
}); });
}
/////////////////////////////////////////////////////////////////////////////}}} /////////////////////////////////////////////////////////////////////////////}}}
////////////////////// COMMANDS //////////////////////////////////////////////// ////////////////////// COMMANDS ////////////////////////////////////////////////
@@ -232,6 +263,63 @@ liberator.Tabs = function () //{{{
liberator.tabs.remove(getBrowser().mCurrentTab, count > 0 ? count : 1, special, 0); liberator.tabs.remove(getBrowser().mCurrentTab, count > 0 ? count : 1, special, 0);
}); });
liberator.commands.add(["tab"],
"Execute a command and tell it to output in a new tab",
function (args)
{
liberator.forceNewTab = true;
liberator.execute(args);
liberator.forceNewTab = false;
},
{ completer: function (filter) { return liberator.completion.exTabCompletion(filter); } });
liberator.commands.add(["tabl[ast]"],
"Switch to the last tab",
function () { liberator.tabs.select("$", false); });
// TODO: count support
liberator.commands.add(["tabp[revious]", "tp[revious]", "tabN[ext]", "tN[ext]"],
"Switch to the previous tab or go [count] tabs back",
function (args)
{
if (!args)
liberator.tabs.select("-1", true);
else if (/^\d+$/.test(args))
liberator.tabs.select("-" + args, true); // FIXME: urgh!
else
liberator.echoerr("E488: Trailing characters");
});
// TODO: count support
liberator.commands.add(["tabn[ext]", "tn[ext]"],
"Switch to the next or [count]th tab",
function (args)
{
if (!args)
{
liberator.tabs.select("+1", true);
}
else if (/^\d+$/.test(args))
{
var index = parseInt(args, 10) - 1;
if (index < liberator.tabs.count)
liberator.tabs.select(index, true);
else
liberator.beep();
}
else
{
liberator.echoerr("E488: Trailing characters");
}
});
liberator.commands.add(["tabr[ewind]", "tabfir[st]"],
"Switch to the first tab",
function () { liberator.tabs.select(0, false); });
if (liberator.config.name == "Vimperator")
{
liberator.commands.add(["b[uffer]"], liberator.commands.add(["b[uffer]"],
"Switch to a buffer", "Switch to a buffer",
function (args, special) { liberator.tabs.switchTo(args, special); }, function (args, special) { liberator.tabs.switchTo(args, special); },
@@ -258,20 +346,6 @@ liberator.Tabs = function () //{{{
"Reload all tab pages", "Reload all tab pages",
function (args, special) { liberator.tabs.reloadAll(special); }); function (args, special) { liberator.tabs.reloadAll(special); });
liberator.commands.add(["tab"],
"Execute a command and tell it to output in a new tab",
function (args)
{
liberator.forceNewTab = true;
liberator.execute(args);
liberator.forceNewTab = false;
},
{ completer: function (filter) { return liberator.completion.command(filter); } });
liberator.commands.add(["tabl[ast]"],
"Switch to the last tab",
function () { liberator.tabs.select("$", false); });
liberator.commands.add(["tabm[ove]"], liberator.commands.add(["tabm[ove]"],
"Move the current tab after tab N", "Move the current tab after tab N",
function (args, special) function (args, special)
@@ -289,29 +363,6 @@ liberator.Tabs = function () //{{{
liberator.tabs.move(getBrowser().mCurrentTab, args, special); liberator.tabs.move(getBrowser().mCurrentTab, args, special);
}); });
// TODO: count support
liberator.commands.add(["tabn[ext]", "tn[ext]"],
"Switch to the next or [count]th tab",
function (args)
{
if (!args)
{
liberator.tabs.select("+1", true);
}
else if (/^\d+$/.test(args))
{
var index = parseInt(args, 10) - 1;
if (index < liberator.tabs.count)
liberator.tabs.select(index, true);
else
liberator.beep();
}
else
{
liberator.echoerr("E488: Trailing characters");
}
});
liberator.commands.add(["tabo[nly]"], liberator.commands.add(["tabo[nly]"],
"Close all other tabs", "Close all other tabs",
function () { liberator.tabs.keepOnly(getBrowser().mCurrentTab); }); function () { liberator.tabs.keepOnly(getBrowser().mCurrentTab); });
@@ -330,24 +381,10 @@ liberator.Tabs = function () //{{{
liberator.open("about:blank", where); liberator.open("about:blank", where);
}, },
{ completer: function (filter) { return liberator.completion.url(filter); } }); { completer: function (filter) { return liberator.completion.url(filter); } });
}
// TODO: count support if (liberator.has("session"))
liberator.commands.add(["tabp[revious]", "tp[revious]", "tabN[ext]", "tN[ext]"],
"Switch to the previous tab or go [count] tabs back",
function (args)
{ {
if (!args)
liberator.tabs.select("-1", true);
else if (/^\d+$/.test(args))
liberator.tabs.select("-" + args, true); // FIXME: urgh!
else
liberator.echoerr("E488: Trailing characters");
});
liberator.commands.add(["tabr[ewind]", "tabfir[st]"],
"Switch to the first tab",
function () { liberator.tabs.select(0, false); });
// TODO: extract common functionality of "undoall" // TODO: extract common functionality of "undoall"
liberator.commands.add(["u[ndo]"], liberator.commands.add(["u[ndo]"],
"Undo closing of a tab", "Undo closing of a tab",
@@ -414,8 +451,6 @@ liberator.Tabs = function () //{{{
undoCloseTab(); // doesn't work with i as the index to undoCloseTab undoCloseTab(); // doesn't work with i as the index to undoCloseTab
}); });
if (liberator.has("session"))
{
liberator.commands.add(["wqa[ll]", "wq", "xa[ll]"], liberator.commands.add(["wqa[ll]", "wq", "xa[ll]"],
"Save the session and quit", "Save the session and quit",
function () { liberator.quit(true); }); function () { liberator.quit(true); });
@@ -431,6 +466,14 @@ liberator.Tabs = function () //{{{
get count() { return getBrowser().mTabs.length; }, get count() { return getBrowser().mTabs.length; },
get tabStrip()
{
if (liberator.config.hostApplication == "Firefox")
return getBrowser().mStrip.getElementsByClassName("tabbrowser-tabs")[0];
else if (liberator.config.hostApplication == "Thunderbird")
return getBrowser().mStrip;
},
// @returns the index of the currently selected tab starting with 0 // @returns the index of the currently selected tab starting with 0
index: function (tab) index: function (tab)
{ {
@@ -531,7 +574,11 @@ liberator.Tabs = function () //{{{
// quitOnLastTab = 2: quit and save session // quitOnLastTab = 2: quit and save session
remove: function (tab, count, focusLeftTab, quitOnLastTab) remove: function (tab, count, focusLeftTab, quitOnLastTab)
{ {
function removeOrBlankTab (tab) var removeOrBlankTab = (function ()
{
if (liberator.config.hostApplication == "Firefox")
{
return function (tab)
{ {
if (getBrowser().mTabs.length > 1) if (getBrowser().mTabs.length > 1)
getBrowser().removeTab(tab); getBrowser().removeTab(tab);
@@ -546,7 +593,20 @@ liberator.Tabs = function () //{{{
else else
liberator.beep(); liberator.beep();
} }
};
} }
else if (liberator.config.hostApplication == "Thunderbird")
{
return function (tab)
{
if (getBrowser().mTabs.length > 1)
getBrowser().removeTab(tab);
else
liberator.beep();
};
}
return function() { return null; };
})();
if (typeof count != "number" || count < 1) if (typeof count != "number" || count < 1)
count = 1; count = 1;