keyconfig 20110522
-
- Posts: 3
- Joined: December 22nd, 2016, 6:41 am
Re: keyconfig 20110522
I'm just getting my feet wet with keyconfig and was looking to do something which I think would be fairly simple. What I want to do is have a hotkey that would take the current message in Thunderbird and forward it to a specific email address. In this case, I was wanting to use my Todoist address email because there no longer seems to be a Todoist for Thunderbird add on.
Could anyone provide a very basic code structure for forwarding a message to a specific email address and tying it to a hot key?
thanks
Could anyone provide a very basic code structure for forwarding a message to a specific email address and tying it to a hot key?
thanks
-
- Posts: 6426
- Joined: February 3rd, 2009, 6:29 pm
Re: keyconfig 20110522
@tettnanger
Try these:
Try these:
Code: Select all
// forward
MsgForwardMessage(null);
Code: Select all
// forward inline
MsgForwardAsInline(null);
Code: Select all
// forward as attachment
MsgForwardAsAttachment(null);
Code: Select all
// forward in non-default format
var cmdEvent = document.createEvent("xulcommandevent");
cmdEvent.initCommandEvent(
"command" /* type */,
true /* bubble */,
true /* cancelable */,
window /* view */,
0 /* detail */,
false /* ctrl key */,
false /* alt key */,
true /* shift key */,
false /* meta key */,
null /* source event */
);
MsgForwardMessage(cmdEvent);
Code: Select all
// forward, add recipient, send now
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].
getService(Components.interfaces.nsIWindowMediator);
var msgHdr = gFolderDisplay.selectedMessage;
var listener = {
onWindowTitleChange: function () {},
onCloseWindow: function () {},
onOpenWindow: function (aWindow) {
wm.removeListener(this);
this.compose = aWindow.docShell.
QueryInterface(Components.interfaces.nsIInterfaceRequestor).
getInterface(Components.interfaces.nsIDOMWindow);
this.compose.addEventListener("compose-window-init", this, true);
},
handleEvent: function (event) {
event.currentTarget.removeEventListener(event.type, this, true);
event.currentTarget.gMsgCompose.RegisterStateListener(listener);
},
NotifyComposeFieldsReady: function () {},
NotifyComposeBodyReady: function () {
this.compose.gMsgCompose.UnregisterStateListener(this);
this.compose.window.setTimeout(function () {
this.AddRecipient("addr_to", "foo bar <test@invalid.com>");
this.awDeleteRow(this.awGetMaxRecipients());
this.goDoCommand("cmd_sendNow");
}, 0);
}
}
wm.addListener(listener);
MsgForwardMessage(null);
Code: Select all
// automatically forward
var forwardTo = "foo bar <test@invalid.com>";
var messageArray = gFolderDisplay.selectedMessageUris;
for (var i = 0; i < messageArray.length; i++) {
var messageUri = messageArray[i];
var messenger = Components.classes["@mozilla.org/messenger;1"].
createInstance(Components.interfaces.nsIMessenger);
var msgHdr = messenger.messageServiceFromURI(messageUri).messageURIToMsgHdr(messageUri);
var msgWindow = Components.classes["@mozilla.org/messenger/msgwindow;1"].
createInstance(Components.interfaces.nsIMsgWindow);
msgWindow.domWindow = window;
msgWindow.rootDocShell.allowAuth = true;
var msgAccountManager = Components.classes["@mozilla.org/messenger/account-manager;1"].
getService(Components.interfaces.nsIMsgAccountManager);
var server = msgAccountManager.defaultAccount.incomingServer;
var msgComposeService = Components.classes["@mozilla.org/messengercompose;1"].
getService(Components.interfaces.nsIMsgComposeService);
var forwardAsDefault = msgComposeService.kForwardAsDefault;
var forwardAsAttachment = msgComposeService.kForwardAsAttachment;
var forwardInline = msgComposeService.kForwardInline;
// kForwardAsDefault uses mail.forward_message_mode preference
// 0: forward as attachment
// 1: forward as quoted (obsolete, mapped to 2)
// 2: forward as inline with attachments (default)
var forwardType = forwardAsDefault;
msgComposeService.forwardMessage(forwardTo, msgHdr, msgWindow, server, forwardType);
}
-
- Posts: 3
- Joined: December 22nd, 2016, 6:41 am
Re: keyconfig 20110522
@morat
Perfect. That last code example worked like a charm. Thank you!
Perfect. That last code example worked like a charm. Thank you!
-
- Posts: 3
- Joined: December 22nd, 2016, 6:41 am
Re: keyconfig 20110522
One follow up question. Is there a way (using the last code example in Morat's list) to automatically REMOVE the attachment prior to forwarding? Since I'm using this to put a reminder in my Todoist inbox I generally do not need attachments, nor do I want potentially large attachments sent to Todoist.
thanks
thanks
-
- Posts: 6426
- Joined: February 3rd, 2009, 6:29 pm
Re: keyconfig 20110522
@tettnanger
1.
Do you want to delete all attachments on the original message with prompts, then automatically forward?
http://dxr.mozilla.org/comm-release/sea ... ttachments
2.
Do you want to silently delete all attachments on the original message, then automatically forward?
It may be possible with the detachAttachmentsWOPrompts method.
http://dxr.mozilla.org/comm-release/sou ... senger.idl
3.
Do you want to automatically forward without attachments, but keep all attachments on the original message?
AFAIK, there is no API to automatically forward without attachments.
http://dxr.mozilla.org/comm-release/sou ... ervice.idl
1.
Do you want to delete all attachments on the original message with prompts, then automatically forward?
Code: Select all
// delete all attachments
TryHandleAllAttachments("delete");
2.
Do you want to silently delete all attachments on the original message, then automatically forward?
It may be possible with the detachAttachmentsWOPrompts method.
http://dxr.mozilla.org/comm-release/sou ... senger.idl
3.
Do you want to automatically forward without attachments, but keep all attachments on the original message?
AFAIK, there is no API to automatically forward without attachments.
http://dxr.mozilla.org/comm-release/sou ... ervice.idl
-
- Posts: 6426
- Joined: February 3rd, 2009, 6:29 pm
Re: keyconfig 20110522
@tettnanger
You could combine the second to last and last code examples.
If the selected message has an attachment, then use the second to last code example, else use the last code example.
You could combine the second to last and last code examples.
If the selected message has an attachment, then use the second to last code example, else use the last code example.
Code: Select all
var forwardTo = "foo bar <test@invalid.com>";
var msgHdr = gFolderDisplay.selectedMessage;
if (msgHdr.flags & Components.interfaces.nsMsgMessageFlags.Attachment) {
// forward, add recipient, delete all attachments, send now
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].
getService(Components.interfaces.nsIWindowMediator);
var listener = {
onWindowTitleChange: function () {},
onCloseWindow: function () {},
onOpenWindow: function (aWindow) {
wm.removeListener(this);
this.compose = aWindow.docShell.
QueryInterface(Components.interfaces.nsIInterfaceRequestor).
getInterface(Components.interfaces.nsIDOMWindow);
this.compose.addEventListener("compose-window-init", this, true);
},
handleEvent: function (event) {
event.currentTarget.removeEventListener(event.type, this, true);
event.currentTarget.gMsgCompose.RegisterStateListener(listener);
},
NotifyComposeFieldsReady: function () {},
NotifyComposeBodyReady: function () {
this.compose.gMsgCompose.UnregisterStateListener(this);
this.compose.window.setTimeout(function () {
this.AddRecipient("addr_to", forwardTo);
this.awDeleteRow(this.awGetMaxRecipients());
this.GetMsgAttachmentElement().focus();
this.goDoCommand("cmd_selectAll");
this.goDoCommand("cmd_delete");
this.goDoCommand("cmd_sendNow");
}, 0);
}
}
wm.addListener(listener);
MsgForwardMessage(null);
} else {
// automatically forward
var msgWindow = Components.classes["@mozilla.org/messenger/msgwindow;1"].
createInstance(Components.interfaces.nsIMsgWindow);
msgWindow.domWindow = window;
msgWindow.rootDocShell.allowAuth = true;
var msgAccountManager = Components.classes["@mozilla.org/messenger/account-manager;1"].
getService(Components.interfaces.nsIMsgAccountManager);
var server = msgAccountManager.defaultAccount.incomingServer;
var msgComposeService = Components.classes["@mozilla.org/messengercompose;1"].
getService(Components.interfaces.nsIMsgComposeService);
var forwardAsDefault = msgComposeService.kForwardAsDefault;
var forwardAsAttachment = msgComposeService.kForwardAsAttachment;
var forwardInline = msgComposeService.kForwardInline;
// kForwardAsDefault uses mail.forward_message_mode preference
// 0: forward as attachment
// 1: forward as quoted (obsolete, mapped to 2)
// 2: forward as inline with attachments (default)
var forwardType = forwardAsDefault;
msgComposeService.forwardMessage(forwardTo, msgHdr, msgWindow, server, forwardType);
}
-
- Posts: 165
- Joined: March 19th, 2007, 6:24 am
Re: keyconfig 20110522
How to open a website in the current tab (and, alternatively, in a new tab) with keyconfig (and Scratchpad)
This works (opens the first google hit in a new tab):
Now I wanted to add another domain from which the same shortcut would load yet another page (within the current tab). I got this far:
If I uncomment the "gBrowser.addTab(http://www.good-afternoon.com/)"-bit, it stops working and I do not know why.
I tried Firefox's Scratchpad, but this throughs an unexpected error: "Exception: ReferenceError: gBrowser is not defined"
1)
How can I make this work in keyconfig?
2)
How / where can I better debug / test my keyconfig attempts?
3)
Why does gbrowser throw an error in Scratchpad? (I googled for far too long already...
THANK YOU
This works (opens the first google hit in a new tab):
Code: Select all
if(window.content.location.href.match(/^http(s)?:\/\/www\.google.(com|fr)\/search/))
{
var nodes = content.document.evaluate('//h3[@class]/a', content.document, null, 7, null);
var url_temp = nodes.snapshotItem(0);
gBrowser.addTab(url_temp.href);
// gBrowser.addTab(nodes.snapshotItem(0));
}
Code: Select all
if(window.content.location.href.match(/^http(s)?:\/\/www\.google.(com|fr)\/search/))
{
var nodes = content.document.evaluate('//h3[@class]/a', content.document, null, 7, null);
var url_temp = nodes.snapshotItem(0);
gBrowser.addTab(url_temp.href);
} else if(window.content.location.href.match(/^http(s)?:\/\/(www\.)?hello-world.net\/ict\/folder/))
{
alert("Hello! I am an alert box!");
// gBrowser.addTab(http://www.good-afternoon.com/)
}
I tried Firefox's Scratchpad, but this throughs an unexpected error: "Exception: ReferenceError: gBrowser is not defined"
1)
How can I make this work in keyconfig?
2)
How / where can I better debug / test my keyconfig attempts?
3)
Why does gbrowser throw an error in Scratchpad? (I googled for far too long already...
THANK YOU
-
- Posts: 6426
- Joined: February 3rd, 2009, 6:29 pm
Re: keyconfig 20110522
@chirpy_7
Instructions:
1. open about:config
2. set devtools.chrome.enabled preference to true
3. tools > web developer > scratchpad
4. environment > browser
5. edit > paste (i.e. copy and paste code below)
6. execute > run
Instructions:
1. open about:config
2. set devtools.chrome.enabled preference to true
3. tools > web developer > scratchpad
4. environment > browser
5. edit > paste (i.e. copy and paste code below)
6. execute > run
Code: Select all
/* Scratchpad Browser Environment */
(function() {
// notice the quotes around the url
gBrowser.selectedTab = gBrowser.addTab("http://www.google.com/");
})();
-
- Posts: 165
- Joined: March 19th, 2007, 6:24 am
Re: keyconfig 20110522
Thanks morat for that breezingly fast reply!
I had tried to introduce the scratchpad browser environment by adding the line as detailed here https://developer.mozilla.org/en-US/doc ... er_context - however, that did not work; maybe it's still not in the right environment and/or doesn't have the right "scope"...
I feel slightly overwhelmed by the seemingly many ways of loading URL's, at least some of which seem to be already deprecated (possibly including gbrowser ?) and therefore earmarked as obsolete: https://developer.mozilla.org/en-US/doc ... ed_browser
This one seems valid, but I could not get it to work (neither in Scratchpad nor in keyconfig): https://developer.mozilla.org/en-US/Add ... abs/update
How can I modify your solution so that the URL will open in the current tab ?
I had tried to introduce the scratchpad browser environment by adding the line
Code: Select all
// -sp-context: browser
I feel slightly overwhelmed by the seemingly many ways of loading URL's, at least some of which seem to be already deprecated (possibly including gbrowser ?) and therefore earmarked as obsolete: https://developer.mozilla.org/en-US/doc ... ed_browser
This one seems valid, but I could not get it to work (neither in Scratchpad nor in keyconfig): https://developer.mozilla.org/en-US/Add ... abs/update
How can I modify your solution so that the URL will open in the current tab ?
-
- Posts: 165
- Joined: March 19th, 2007, 6:24 am
Re: keyconfig 20110522
I figured this one out:
But what about deprecation? Any other ways to achieve the same which will be around and stay supported longer?
Code: Select all
gBrowser.loadURI("http://www.google.com/");
-
- Posts: 6426
- Joined: February 3rd, 2009, 6:29 pm
Re: keyconfig 20110522
@chirpy_7
I doubt Mozilla will remove the gBrowser methods before the XUL apocalypse. (end of 2017)
Old Firefox Extensions Will Stop Working in Firefox 57
http://forums.mozillazine.org/viewtopic ... &t=3025513
Keyconfig extension: Open Location in Firefox
http://kb.mozillazine.org/Keyconfig_ext ... n_Location
Tabbed Browser and loadURI method
http://developer.mozilla.org/en-US/docs ... tabbrowser
http://developer.mozilla.org/en-US/docs ... od/loadURI
I doubt Mozilla will remove the gBrowser methods before the XUL apocalypse. (end of 2017)
Old Firefox Extensions Will Stop Working in Firefox 57
http://forums.mozillazine.org/viewtopic ... &t=3025513
Keyconfig extension: Open Location in Firefox
http://kb.mozillazine.org/Keyconfig_ext ... n_Location
Tabbed Browser and loadURI method
http://developer.mozilla.org/en-US/docs ... tabbrowser
http://developer.mozilla.org/en-US/docs ... od/loadURI
-
- Posts: 1
- Joined: January 12th, 2017, 12:32 pm
Re: keyconfig 20110522
Hello. I have been using the following hotkey to navigate tabs for a while, assigned to Ctrl+Shift+}, and similarly for the other direction.
But now there's a weird issue going on. When I use this hotkey to move to a tab it's like the focus is not properly restored to the document so for example pressing the spacebar will not scroll the page like it should. This doesn't happen with the native hotkey which is Ctrl+PgUp / PgDn.
What could be the cause of this problem and how can I fix it? Thank you.
EDIT: I'm sorry, I was pretty sure I had isolated the problem to this hotkey but it seems that it also happens with the native hotkey. Keyconfig may have nothing to do with it.
Code: Select all
gBrowser.mTabContainer.advanceSelectedTab(1,true);
What could be the cause of this problem and how can I fix it? Thank you.
EDIT: I'm sorry, I was pretty sure I had isolated the problem to this hotkey but it seems that it also happens with the native hotkey. Keyconfig may have nothing to do with it.
-
- Posts: 20
- Joined: April 15th, 2009, 8:07 pm
Re: keyconfig 20110522
@morat
Re: full screen. Sorry for the delay.
My mistake was that "Back in the main dialog, I selected the new FullScreen key,": it was,of course, already selected.
Now I can toggle the full screen with Alt+Enter, which is OK but I'd prefer to exit full screen with Esc. How can I do that?
emf10679
Re: full screen. Sorry for the delay.
My mistake was that "Back in the main dialog, I selected the new FullScreen key,": it was,of course, already selected.
Now I can toggle the full screen with Alt+Enter, which is OK but I'd prefer to exit full screen with Esc. How can I do that?
emf10679
-
- Posts: 6426
- Joined: February 3rd, 2009, 6:29 pm
Re: keyconfig 20110522
@emf10679
Try this:
Try this:
Code: Select all
if (window.fullScreen) {
BrowserFullScreen();
} else {
BrowserStop();
}
-
- Posts: 1934
- Joined: February 10th, 2008, 6:30 am
- Location: Hungary
Re: keyconfig 20110522
Can I do something like running an external program?
I would like to run youtube-dl:
Acually It look like most of it I can put in a configuration file, so this would serve:
where the <url> would be the curren't tab's url.
I would like to run youtube-dl:
Code: Select all
youtube-dl -f "(bestvideo[vcodec=vp9]/bestvideo[vcodec^=avc]/bestvideo[vcodec!=vp8])[height<=1440]+(bestaudio[acodec=opus]/bestaudio[acodec=vorbis]/bestaudio[acodec^=m4a]/bestaudio)/(best[vcodec=vp9]/best[vcodec^=avc]/best[vcodec!=vp8])[height<=1440]" --write-description --write-sub --write-thumbnail --embed-thumbnail --embed-subs --sub-lang en,hu --no-mtime -o "%(title)s.%(ext)s" <url>
Acually It look like most of it I can put in a configuration file, so this would serve:
Code: Select all
youtube-dl <url>