Hallo alle.
Ich hatte verschiedene Aktionen, die einfache per Toolbar-Button auszuführen sind, in TB 68 vermisst. Siehe diesen Thread.
Hier meine Scripte, die bisher ganz normal wie gewünscht funktionieren.
Vorraussetzung ist die grundsätzliche Erweiterung zur Nutzung von UserScript wie hier von "edvoldie" erläutert.
Die Scripte bestehen im Wesentlichen immer aus dem gleichen Code.
Nur die jeweils für die andere ID, Funktionalität bzw. für andere verknüpfte Icons zuständigen Zeilen sind anzupassen.
Die Icons werden im Unterverzeichnis %Profilordner%/chrome/icons/ erwartet, was aber auch angepaßt werden kann.
Icons sind im Anhang. icons.zip
Die Scripte sollten ohne Änderungen auch unter Windows funktionieren, habe das aber nicht getestet (Tests nur unter Linux).
Die Buttons werden in der Toolbar rechts eingeordnet und können händisch per "Anpassen" verschoben werden.
[EDIT:
- die neue Position der Buttons wird möglicherweise nicht gespeichert. Die Ursache ist unbekannt.
Bei mir trat das Problem nur auf, wenn TB per "Restart" direkt neu gestartet wurd und bei extremen Experimenten.
- Habe noch eine Korrektur vorgenommen. Die Funktion event.preventBubble() gibt es nicht, habe ich entfernt.
- Weiters Script zum Sortieren ganz unten: SpecialSortEmails.uc.js]
Grundsätzlich muß ich noch anmerken, daß ich mich eigentlich nicht mit JS UserScripten für TB auskenne
Daher ist mir nicht alles klar, was da passiert. Verwendung bitte auf eigene Gefahr...
Da ich aber schon Scipte für anderen Programme programmiert hatte, nun ja, einfach mal machen...
Noch zu den "Orten" für die neuen Buttons (Zeile 49 im ersten Script), die möglich sind:
"mail-bar3" (die Standard Toolbar / Buttonleiste)
"mail-toolbar-menubar2" (Menüleiste)
"tabbar-toolbar" (Toolbar in der Tableiste rechts)
Das erste Script mit Kommentaren, hier für die Aktion "Alle Emails als gelesen markieren":
//MarkAllEmailRead.uc.js
"use strict";
(function() {
if (location != 'chrome://messenger/content/messenger.xul') return;
// neues Objekt "toolbarbutton" anlegen
var toolbarbutton = document.createElement('toolbarbutton');
// Pfad zum aktuellen Profilordner, Pfadtrennzeichen (/ oder \) unabhängig vom OS immer /
var currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
// hier das gewünschte Button-Icon angeben
var buttonicon = "markallread.png"
// die Eigenschaften des Buttons festlegen
var props = {
// die folgende Button-ID ist EINMALIG zu vergeben, Dopplungen mit anderen Bezeichnern strikt vermeiden!
id: 'MarkAllEmailRead-button',
// in der Toolbar angezeigter Text
label: 'Alle gelesen',
// bei MausOver angezeigter Text (Tooltip)
tooltiptext: 'Markiert alle Emails als gelesen',
// das anzuzeigende Icon (hier nicht ändern, oben angeben)
style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/icons/" + buttonicon) + '");',
// Klassenzugehörigkeit
class: 'toolbarbutton-1',
// Aktion bei Klick auf den Button (hier mei Links- oder Mittelklick alle Emails als gelesen markieren)
onclick:
'if (event.button == 0 || event.button == 1) { \
goDoCommand("cmd_markAllRead"); \
};'
};
// alle definierten Eigenschaften dem Button-Objekt zuordnen
for (var p in props) toolbarbutton.setAttribute(p, props[p]);
var toolbox = document.getElementById("mail-toolbox");
toolbox.palette.appendChild(toolbarbutton);
// gewünschte Leiste / Ort, wo der Button erstellt werden soll
var toolbar = document.getElementById("mail-bar3");
// die hier anzugebende Button-ID muss identisch zu der oben vergebenen sein
// Button in der Leiste anlegen
toolbar.insertItem("MarkAllEmailRead-button", toolbar.lastChild);
})();
Alles anzeigen
Dieses Script löscht alle Emails des aktuellen Ordners (nur Emails, keine Unterordner):
//EmptyFolder.uc.js
"use strict";
(function() {
if (location != 'chrome://messenger/content/messenger.xul') return;
var toolbarbutton = document.createElement('toolbarbutton');
var currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
var buttonicon = "emptyfolder.png"
var props = {
id: 'emptyFolder-button',
label: 'Ordner leeren',
tooltiptext: 'Ordner leeren',
style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/icons/" + buttonicon) + '");',
class: 'toolbarbutton-1',
onclick:
'if (event.button == 0 || event.button == 1) { \
goDoCommand("cmd_selectAll"); goDoCommand("cmd_delete"); \
};'
};
for (var p in props) toolbarbutton.setAttribute(p, props[p]);
var toolbox = document.getElementById("mail-toolbox");
toolbox.palette.appendChild(toolbarbutton);
var toolbar = document.getElementById("mail-bar3");
toolbar.insertItem("emptyFolder-button", toolbar.lastChild);
})();
Alles anzeigen
Dieses Script leert den Papierkorb des aktuell ausgewählten Bereichs / Kontos (alles, Emails UND Ordner):
//EmptyTrashFolder.uc.js
"use strict";
(function() {
if (location != 'chrome://messenger/content/messenger.xul') return;
var toolbarbutton = document.createElement('toolbarbutton');
var currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
var buttonicon = "delete.png"
var props = {
id: 'EmptyTrashFolder-button',
label: 'Papierkorb leeren',
tooltiptext: 'Papierkorb leeren',
style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/icons/" + buttonicon) + '");',
class: 'toolbarbutton-1',
onclick:
'if (event.button == 0 || event.button == 1) { \
gFolderTreeController.emptyTrash(); \
};'
};
for (var p in props) toolbarbutton.setAttribute(p, props[p]);
var toolbox = document.getElementById("mail-toolbox");
toolbox.palette.appendChild(toolbarbutton);
var toolbar = document.getElementById("mail-bar3");
toolbar.insertItem("EmptyTrashFolder-button", toolbar.lastChild);
})();
Alles anzeigen
Dieses Script beendet TB:
//QuitThunderbird.uc.js
"use strict";
(function() {
if (location != 'chrome://messenger/content/messenger.xul') return;
var toolbarbutton = document.createElement('toolbarbutton');
var currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
var buttonicon = "exit.png"
var props = {
id: 'quitThunderbird-button',
label: 'Beenden',
tooltiptext: 'Thunderbird beenden',
style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/icons/" + buttonicon) + '");',
class: 'toolbarbutton-1',
onclick:
'if (event.button == 0 || event.button == 1) { \
goQuitApplication(); \
};'
};
for (var p in props) toolbarbutton.setAttribute(p, props[p]);
var toolbox = document.getElementById("mail-toolbox");
toolbox.palette.appendChild(toolbarbutton);
var toolbar = document.getElementById("mail-bar3");
toolbar.insertItem("quitThunderbird-button", toolbar.lastChild);
})();
Alles anzeigen
Dieses Script markiert alle Emails:
//SelectAllEmail.uc.js
"use strict";
(function() {
if (location != 'chrome://messenger/content/messenger.xul') return;
var toolbarbutton = document.createElement('toolbarbutton');
var currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
var buttonicon = "selectall.png"
var props = {
id: 'SelectAllEmail-button',
label: 'Alle auswählen',
tooltiptext: 'Wählt alle Emails aus',
style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/icons/" + buttonicon) + '");',
class: 'toolbarbutton-1',
onclick:
'if (event.button == 0 || event.button == 1) { \
goDoCommand("cmd_selectAll"); \
};'
};
for (var p in props) toolbarbutton.setAttribute(p, props[p]);
var toolbox = document.getElementById("mail-toolbox");
toolbox.palette.appendChild(toolbarbutton);
var toolbar = document.getElementById("mail-bar3");
toolbar.insertItem("SelectAllEmail-button", toolbar.lastChild);
})();
Alles anzeigen
Dieses Script startet TB neu, ein Mitteklick löscht den JS-Cache.
Hierzu muß ich noch sagen, daß es nach dem Neustart auffällt, daß alle per Script erzeugten UserButtons nicht ihre händisch zugeordneten Positionen einnehmen. Alle sind dann zusammen rechts in der Toolbar. Das ist immer so, eagl auf welchem Weg TB direkt neu gestartet wird.
TB normal beenden und neu starten behebt das Problem wieder.
//RestartThunderbird.uc.js
"use strict";
(function() {
if (location != 'chrome://messenger/content/messenger.xul') return;
// Toolbar
var toolbarbutton = document.createElement('toolbarbutton');
var currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
var buttonicon = "sync.svg"
var props = {
id: 'restartThunderbird-button',
label: 'Neustart',
tooltiptext: 'Neustart (Mittelklick leert userChrome.js-Cache)',
style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/icons/" + buttonicon) + '");',
class: 'toolbarbutton-1',
onclick:
'if (event.button == 1) { \
event.preventDefault(); \
Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime).invalidateCachesOnRestart(); \
}; \
if (event.button == 0 || event.button == 1) { \
BrowserUtils.restartApplication(); \
};'
};
for (var p in props) toolbarbutton.setAttribute(p, props[p]);
var toolbox = document.getElementById("mail-toolbox");
toolbox.palette.appendChild(toolbarbutton);
var toolbar = document.getElementById("mail-bar3");
toolbar.insertItem("restartThunderbird-button", toolbar.lastChild);
// Menü-Datei (FilePopup)
var menuitem = document.createElement('menuitem');
var props = {
id: 'restartThunderbird-popupButton',
label: 'Neustart',
tooltiptext: 'Neustart (Mittelklick leert userChrome.js-Cache)',
style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/icons/" + buttonicon) + '");',
class: 'menuitem-iconic',
onclick:
'if (event.button == 1) { \
event.preventDefault(); \
Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime).invalidateCachesOnRestart(); \
}; \
if (event.button == 0 || event.button == 1) { \
BrowserUtils.restartApplication(); \
};'
};
for (var p in props) menuitem.setAttribute(p, props[p]);
var popup = document.getElementById('menu_FilePopup')
popup.insertBefore(menuitem, document.getElementById('menu_FileQuitItem'));
})();
Alles anzeigen
Dieses Script sortiert die Emails auf einen Schlag wie gewünscht.
Ganz unten stehen als Kommentar weitere Befehle, die zu einer anderen Sortierung führen.
Darüber geht auch ein gruppiertes Sortieren nach Datum absteigend bei gleichzeitigem Öffnen aller Gruppen.
Mit goDoCommand("cmd_previousMsg") und gFolderDisplay.clearSelection() kann experimentiert werden, wie die Markierung einer Email zum Schluß gesetzt wird. (Wollte eigentlich immer die oberste markieren, den Code habe ich aber nicht herausgefunden)
//SpecialSortEmails.uc.js
"use strict";
(function() {
if (location != 'chrome://messenger/content/messenger.xul') return;
var toolbarbutton = document.createElement('toolbarbutton');
var currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
var buttonicon = "sort.png"
var props = {
id: 'SortEmail-button',
label: 'Sortieren',
tooltiptext: 'Sortiert und gruppiert alle Emails nach Datum',
style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/icons/" + buttonicon) + '");',
class: 'toolbarbutton-1',
onclick:
'if (event.button == 0 || event.button == 1) { \
MsgSortThreadPane("byDate"); MsgSortDescending(); MsgSortUnthreaded(); goDoCommand("cmd_previousMsg"); \
};'
};
for (var p in props) toolbarbutton.setAttribute(p, props[p]);
var toolbox = document.getElementById("mail-toolbox");
toolbox.palette.appendChild(toolbarbutton);
var toolbar = document.getElementById("mail-bar3");
toolbar.insertItem("SortEmail-button", toolbar.lastChild);
})();
//MsgSortThreadPane("byDate"); MsgSortDescending(); MsgGroupBySort(); goDoCommand("cmd_selectAll"); gFolderDisplay.clearSelection();
//MsgSortThreadPane("byDate"); MsgSortDescending(); MsgSortUnthreaded(); goDoCommand("cmd_selectAll"); goDoCommand("cmd_previousMsg");
Alles anzeigen
Nutzen und freuen!