Gebrauchsfähiger Zustand ist wiederhergestellt:
Ich habe ein wenig herumexperimentiert, ein- und wieder auskommentiert und es tut erstmal wieder.
Danke dir Andreas
Natürlich ich. Aber nur aus Notwehr
Gebrauchsfähiger Zustand ist wiederhergestellt:
Ich habe ein wenig herumexperimentiert, ein- und wieder auskommentiert und es tut erstmal wieder.
Danke dir Andreas
Natürlich ich. Aber nur aus Notwehr
Danke für die Rückmeldung.
Das von dir modifizierte Skript ändert hier erstmal nix. Sieht im Kontextmenü aus wie vorher.
Damned, darf ich jetzt doch den ganzen *.css-Kram durchforsten und auf Fehlersuche gehen?
Hallo
Mir fehlt im Kontextmenü der Tabs der Eintrag "Tabs als LZ hinzufügen".
Folgenden Code konnte ich ausmachen der zumindest mitverantwortlich dafür ist:
// TabContextCloseAllTabs.uc.js
(function() {
if (location != 'chrome://browser/content/browser.xhtml')
return;
let menuitem = document.createXULElement('menuitem');
menuitem.id = 'context_closeLeftTabs';
menuitem.setAttribute('label', 'Linke Tabs schließen');
menuitem.setAttribute('oncommand',
'for (let i = TabContextMenu.contextTab._tPos - 1; i >= 0; i--) \
gBrowser.removeTab(gBrowser.tabs[i], {animate: true})');
let tabContextMenu = document.getElementById('tabContextMenu');
let refItem = document.getElementById('context_undoCloseTab');
tabContextMenu.insertBefore(menuitem, refItem);
tabContextMenu.insertBefore(document.getElementById('context_closeTabsToTheEnd'), refItem);
tabContextMenu.insertBefore(document.getElementById('context_closeOtherTabs'), refItem);
tabContextMenu.removeChild(document.getElementById('context_closeTabOptions'));
})();
// TabContextCloseAllTabs.uc.js
(function() {
if (location != 'chrome://browser/content/browser.xhtml')
return;
var closeAllTabsItem = document.createXULElement('menuitem');
closeAllTabsItem.id = 'context_closeAllTabs';
closeAllTabsItem.setAttribute('label', 'Alle Tabs schließen');
closeAllTabsItem.setAttribute('oncommand',
'for (let tab of gBrowser.visibleTabs) gBrowser.removeTab(tab)');
var refItem = document.getElementById('context_closeOtherTabs');
refItem.parentNode.insertBefore(closeAllTabsItem, refItem.nextSibling);
})();
Alles anzeigen
Ist der Code aktiv sieht mein Kontextmenü so aus:
Deaktiviere ich ihn, so:
Da sind natürlich noch eine Reihe von *.css am werkeln, aber der Code lässt den Eintrag überhaupt erscheinen o. verschwinden.
Meine Frage nun: gibt der Quellcode eine Info her warum das so ist oder muss ich alle *.css durchforsten?
jeder kann es letztendlich machen, wie er es möchte.
Ich kann natürlich mal eine Umfrage hier im Forum starten, ob es noch mehr user gibt die sich an meiner Art Codes zu geben stören.
Denn wenn dem dann so ist, dann verzichte ich in Zukunft darauf.
Ich möchte auf keinen Fall, dass dadurch evtl. ein schlechtes Licht auf das Forum geworfen wird.
Ich stör' mich nicht dran
Und sage es gern auch mal hier: -Danke-!
Du und schlechtes Licht ... pfff
Da geben sich andere Mühe
Das Projekt hat einen neuen Namen und firmiert nun unter LibreWolf
3, 2, 1 ...
Na, dann kann man sich weitere Unterstützung zur Anpassung deines Fuchses also schenken?
Wieso?
Ich bin bei Version 87 aus- und bei 89 wieder eingestiegen. Und das nur dank der Hilfe des Forums. Ich musste Gott sei Dank dieses Mal relativ wenig nachfragen, weil ich mich der Antworten etlicher Threads bedienen konnte, wo Leute ähnliche Lösungen gesucht hatten.
Nun isser in 'nem Zustand der gern lange Zeit so bleiben darf.
Ich habe sehr viel Zeit in lesen, testen und mit modifizieren verbracht. Jetzt ist das Zeitbudget für Anpassungen vorerst aufgebraucht. Wenn wieder was kaputt aktualisiert wurde, melde ich mich bestimmt wieder
... und wieso hipsterigen Update?
Ich hatte das Wort noch übrig
Es ist ja kein Geheimnis was ich von diesem Rapid Release-Zirkus halte
Oder so
Ich habe die Beschäftigung mit dem Gedöns schon wieder eingestellt. Momentan funktioniert der Fux halbwegs so wie ich es mir vorstelle.
Bis halt zum nächsten hipsterigen Update
Danke für den Hinweis.
Ich meine, es könnte sogar dieses Skript sein welches in einer der zahlreichen *.css drinnen steht.
Die Zur Verfügung Stellung der Daten ist freiwillig und man kann das deaktivieren
Dann haste Ruhe
Danke für die Anregungen.
Nicht ohne Grund hatte ich aber nach dem Punkt im Hamburger Menü gefragt. Die Idee mit dem Eintrag im Tab-Kontextmenü hatte ich vor langer Zeit mal getestet aber wegen der eher seltenen Anwendung dann wieder verworfen. Das Kontextmenü ist auf die Einträge eingedampft die hier oft und häufig zum Einsatz kommen.
Es bleibt die Frage, ist es möglich den "Weg" zu reduzieren oder muss ich mich umgewöhnen?
Hallo
Sorry für den komisch klingenden und nicht wirklich suchfreundlichen Threadtitel.
Während der Neueinrichtung hatte ich neulich einen Beitrag von Boersenfeger gesehen, finde den jetzt aber nicht mehr.
Er fragte dort, meine ich mich zu erinnern, ob es möglich ist die Pfade zu Einträgen der Chronik zu verringern.
Seit V. 89 (vllt. auch schon 88) ist es so: Hamburger Menü (oben rechts idR) -> Chronik -> Kürzlich geschlossene Tabs (bzw. Fenster) -> und erst dann sehe ich die Einträge. Das war vorher einfacher.
Oder als Bildstrecke:
Kann man die Einträge wieder eine Ebene nach "oben" holen, also statt vier Klicks, nur drei um eine Auswahl treffen zu können?
Danke auch von mir bzgl. Erklärung der Lowe-Liste
Peter Lowe deaktivieren
Aus Neugier: warum sollte die nicht genutzt werden?
der kleine Pfeil im Kontextmenü für an Seitenanfang
nach oben, und vielleicht nach unten
Alternativ zu aborix' Empfehlung wäre eine Erweiterung für Mausgesten. Ich steuere das durch einen angedeuteten Pfeil nach oben bzw. unten mit der rechten Maustaste.
Ich habs nochmal probiert, jetzt geht es.
Danke.
Danke für den Hinweis. Ich habe mal schnell drei von den sechs getestet und keines hatte eine Funktion
Danke für den Hinweis. Einen expliziten Code zum löschen habe ich nicht, ich mach das manuell. Aber jetzt wo du es sagst, ich nutze ja tatsächlich ein Restartskript ... vielleicht merke ich mir das endlich mal
Ich hab keine Ahnung woran es lag, das Skript funktioniert wieder bzw. weiterhin
Hallo
Ich hatte auch große Probleme eine der zahlreichen *.css die gerade kursieren, um die Tableiste unter die Lesezeichenleiste zu verschieben, ans laufen zu bekommen.
Meine Lösung ist kein Eintrag in der "userChrome.css" sondern ein Skript:
// ==UserScript==
// @name zzzz-MultiRowTab_LiteforFx48.uc.js
// @namespace http://space.geocities.yahoo.co.jp/gl/alice0775
// @description Experimentelle CSS Version für Mehrzeilige Tableiste
// @include main
// @compatibility Firefox 81
// @author Alice0775
// @version 2016/08/05 00:00 Firefox 48
// @version 2016/05/01 00:01 hide favicon if busy
// @version 2016/03/09 00:01 Bug 1222490 - Actually remove panorama for Fx45+
// @version 2016/02/09 00:01 workaround css for lwt
// @version 2016/02/09 00:00
// ==/UserScript==
"use strict";
MultiRowTabLiteforFx();
function MultiRowTabLiteforFx() {
/* Symbolleisten und Menüleiste von der Titelleiste in die Navigator-Toolbox verschieben */
document.getElementById("titlebar").parentNode.insertBefore(document.getElementById("toolbar-menubar"),document.getElementById("titlebar"));
var css =` @-moz-document url-prefix("chrome://browser/content/browser.xhtml") {
/* Symbolleiste Sortieren */
#toolbar-menubar { -moz-box-ordinal-group: 1 !important; } /* Menüleiste */
#nav-bar { -moz-box-ordinal-group: 2 !important; } /* Navigationsleiste */
#PersonalToolbar { -moz-box-ordinal-group: 3 !important; } /* Lesezeichen-Symbolleiste */
#titlebar { -moz-box-ordinal-group: 4 !important; } /* Titelleiste */
/* Anpassung der Symbolleisten */
[tabsintitlebar="true"] #toolbar-menubar { height: 29px; }
[tabsintitlebar="true"][sizemode="maximized"] #navigator-toolbox { padding-top: 8px !important; }
#titlebar,#tabbrowser-tabs { -moz-appearance: none !important; }
/* Windows 10 und Firefox Standardtheme, Fensterausenlinie in weiß.
Anpassung für Titelleistenschaltflächen wenn sie in den Hintergrund verschoben sind */
#main-window:not([lwtheme="true"]) #TabsToolbar .titlebar-buttonbox .titlebar-button,
#main-window:not([lwtheme="true"]) #window-controls toolbarbutton { color: rgb(24, 25, 26) !important; }
#main-window:not([lwtheme="true"]) #TabsToolbar .titlebar-buttonbox .titlebar-button:not(.titlebar-close):hover,
#main-window:not([lwtheme="true"]) #window-controls toolbarbutton:not([id="close-button"]):hover {
background-color: var(--lwt-toolbarbutton-hover-background, hsla(0,0%,70%,.4)) !important; }
/* Anpassung für Titelleistenschaltflächen */
[tabsintitlebar="true"] .titlebar-buttonbox-container { display: block; position: fixed; right:0; }
[tabsintitlebar="true"][sizemode="normal"] .titlebar-buttonbox-container { top: 1px; }
[tabsintitlebar="true"][sizemode="maximized"] .titlebar-buttonbox-container { top: 8px; }
#navigator-toolbox:not([style^="margin-top:"])[style=""][inFullscreen="true"] #window-controls { display: flex; position: fixed; top: 0; right:0; }
#navigator-toolbox:not([style^="margin-top:"])[style=""][inFullscreen="true"] #window-controls > toolbarbutton { display: inline; max-height: var(--tab-min-height); }
/* auf der rechten Seite Platz für die Schaltflächen der Titelleiste einfügen, damit die
Schaltflächen der Titelleiste und der Navigationsleiste nicht verdeckt werden */
[tabsintitlebar="true"] #toolbar-menubar[autohide="true"][inactive="true"] ~ #nav-bar:not([inFullscreen="true"]) { padding-right: 139px !important; }
#navigator-toolbox[inFullscreen="true"] #nav-bar { padding-right: 109px !important; }
/* Mehrzeilige Tableiste */
box[class="scrollbox-clip"][orient="horizontal"],
tabs > arrowscrollbox { display: block; }
scrollbox[part][orient="horizontal"] {
display: flex;
flex-wrap: wrap;
max-height: calc(var(--tab-min-height) * 5); /* Anzahl der Tabzeilen(Standard = 5 Zeilen) */
overflow-x: hidden;
overflow-y: auto; }
tabs tab[fadein]:not([pinned]) { flex-grow: 1; }
tabs tab,.tab-background {
height: var(--tab-min-height);
overflow: hidden; }
#main-window[proton] tabs tab,
#main-window[proton] .tab-background {
min-height: var(--tab-min-height);
margin: 0 !important;
padding: 0 !important; }
tab > .tab-stack { width: 100%; }
#main-window[proton] .tab-background[style$="2px solid red !important;"] { border-radius: 0 !important; }
#tabs-newtab-button { margin: 0 !important; }
/* Bei Überschreitung der angegebenen Zeilenanzahl, mit der Maus,
über die dann eingeblendetet Scrolleiste zur gewünschten Zeile wechseln */
scrollbox[part][orient="horizontal"] > scrollbar { -moz-window-dragging: no-drag; }
/* Drag-Bereich auf der linken und rechten Seite der
Tab-Leiste ausblenden - verstecken
Links und rechts → hbox.titlebar-spacer
links → hbox.titlebar-spacer[type="pre-tabs"]
rechts → hbox.titlebar-spacer[type="post-tabs"] */
hbox.titlebar-spacer
,
/* Ausblenden - Verstecken */
tabs tab:not([fadein]),#scrollbutton-up,#scrollbutton-down,
#toolbar-menubar[autohide="false"] + #titlebar #TabsToolbar .titlebar-buttonbox-container { display: none; }
} `;
var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
var uri = makeURI('data:text/css;charset=UTF=8,' + encodeURIComponent(css));
sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
gBrowser.tabContainer.clearDropIndicator = function() {
let tabs = this.allTabs;
for (let i = 0, len = tabs.length; i < len; i++) {
tabs[i].removeAttribute("style");
tabs[i].querySelector(".tab-background").removeAttribute("style");
}
}
gBrowser.tabContainer.addEventListener("dragleave", function(event) { this.clearDropIndicator(event); }, true);
gBrowser.tabContainer.on_dragover = function(event) {
this.clearDropIndicator();
var effects = this._getDropEffectForTabDrag(event);
var ind = this._tabDropIndicator;
if (effects == "" || effects == "none") {
ind.hidden = true;
return;
}
event.preventDefault();
event.stopPropagation();
var arrowScrollbox = this.arrowScrollbox;
// autoscroll the tab strip if we drag over the scroll
// buttons, even if we aren't dragging a tab, but then
// return to avoid drawing the drop indicator
var pixelsToScroll = 0;
if (this.getAttribute("overflow") == "true") {
switch (event.originalTarget) {
case arrowScrollbox._scrollButtonUp:
pixelsToScroll = arrowScrollbox.scrollIncrement * -1;
break;
case arrowScrollbox._scrollButtonDown:
pixelsToScroll = arrowScrollbox.scrollIncrement;
break;
}
if (pixelsToScroll) {
arrowScrollbox.scrollByPixels(
(RTL_UI ? -1 : 1) * pixelsToScroll,
true
);
}
}
// let draggedTab = event.dataTransfer.mozGetDataAt(TAB_DROP_TYPE, 0);
let draggedTab = this._getDropIndex(event, false);
if (
(effects == "move" || effects == "copy") &&
this == draggedTab.container
) {
ind.hidden = true;
if (!this._isGroupTabsAnimationOver()) {
// Wait for grouping tabs animation to finish
return;
}
this._finishGroupSelectedTabs(draggedTab);
if (effects == "move") {
this._animateTabMove(event);
return;
}
}
this._finishAnimateTabMove();
if (effects == "link") {
let tab = this._getDragTargetTab(event, true);
if (tab) {
if (!this._dragTime) {
this._dragTime = Date.now();
}
if (Date.now() >= this._dragTime + this._dragOverDelay) {
this.selectedItem = tab;
}
ind.hidden = true;
return;
}
}
var rect = arrowScrollbox.getBoundingClientRect();
var newMargin;
if (pixelsToScroll) {
// if we are scrolling, put the drop indicator at the edge
// so that it doesn't jump while scrolling
let scrollRect = arrowScrollbox.scrollClientRect;
let minMargin = scrollRect.left - rect.left;
let maxMargin = Math.min(
minMargin + scrollRect.width,
scrollRect.right
);
if (RTL_UI) {
[minMargin, maxMargin] = [
this.clientWidth - maxMargin,
this.clientWidth - minMargin,
];
}
newMargin = pixelsToScroll > 0 ? maxMargin : minMargin;
} else {
let newIndex = this._getDropIndex(event, effects == "link");
let children = this.allTabs;
if (newIndex == children.length) {
// let tabRect = children[newIndex - 1].getBoundingClientRect();
let tabRect = children[newIndex - 1].querySelector(".tab-background").style.setProperty("border-right","2px solid red","important");
if (RTL_UI) {
newMargin = rect.right - tabRect.left;
} else {
newMargin = tabRect.right - rect.left;
}
} else {
// let tabRect = children[newIndex].getBoundingClientRect();
let tabRect = children[newIndex].querySelector(".tab-background").style.setProperty("border-left","2px solid red","important");
if (RTL_UI) {
newMargin = rect.right - tabRect.right;
} else {
newMargin = tabRect.left - rect.left;
}
}
}
ind.hidden = false;
newMargin += ind.clientWidth / 2;
if (RTL_UI) {
newMargin *= -1;
}
ind.style.transform = "translate(" + Math.round(newMargin) + "px)";
}
gBrowser.tabContainer.on_drop = function(event) {
this.clearDropIndicator();
var dt = event.dataTransfer;
var dropEffect = dt.dropEffect;
var draggedTab;
let movingTabs;
if (dt.mozTypesAt(0)[0] == TAB_DROP_TYPE) {
// tab copy or move
draggedTab = dt.mozGetDataAt(TAB_DROP_TYPE, 0);
// not our drop then
if (!draggedTab) {
return;
}
movingTabs = draggedTab._dragData.movingTabs;
draggedTab.container._finishGroupSelectedTabs(draggedTab);
}
this._tabDropIndicator.hidden = true;
event.stopPropagation();
if (draggedTab && dropEffect == "copy") {
// copy the dropped tab (wherever it's from)
let newIndex = this._getDropIndex(event, false);
let draggedTabCopy;
for (let tab of movingTabs) {
let newTab = gBrowser.duplicateTab(tab);
gBrowser.moveTabTo(newTab, newIndex++);
if (tab == draggedTab) {
draggedTabCopy = newTab;
}
}
if (draggedTab.container != this || event.shiftKey) {
this.selectedItem = draggedTabCopy;
}
} else if (draggedTab && draggedTab.container == this) {
let oldTranslateX = Math.round(draggedTab._dragData.translateX);
let tabWidth = Math.round(draggedTab._dragData.tabWidth);
let translateOffset = oldTranslateX % tabWidth;
let newTranslateX = oldTranslateX - translateOffset;
if (oldTranslateX > 0 && translateOffset > tabWidth / 2) {
newTranslateX += tabWidth;
} else if (oldTranslateX < 0 && -translateOffset > tabWidth / 2) {
newTranslateX -= tabWidth;
}
let dropIndex = this._getDropIndex(event, false);
// "animDropIndex" in draggedTab._dragData &&
// draggedTab._dragData.animDropIndex;
let incrementDropIndex = true;
if (dropIndex && dropIndex > movingTabs[0]._tPos) {
dropIndex--;
incrementDropIndex = false;
}
if (oldTranslateX && oldTranslateX != newTranslateX && !gReduceMotion) {
for (let tab of movingTabs) {
tab.setAttribute("tabdrop-samewindow", "true");
tab.style.transform = "translateX(" + newTranslateX + "px)";
let onTransitionEnd = transitionendEvent => {
if (
transitionendEvent.propertyName != "transform" ||
transitionendEvent.originalTarget != tab
) {
return;
}
tab.removeEventListener("transitionend", onTransitionEnd);
tab.removeAttribute("tabdrop-samewindow");
this._finishAnimateTabMove();
if (dropIndex !== false) {
gBrowser.moveTabTo(tab, dropIndex);
if (incrementDropIndex) {
dropIndex++;
}
}
gBrowser.syncThrobberAnimations(tab);
};
tab.addEventListener("transitionend", onTransitionEnd);
}
} else {
this._finishAnimateTabMove();
if (dropIndex !== false) {
for (let tab of movingTabs) {
gBrowser.moveTabTo(tab, dropIndex);
if (incrementDropIndex) {
dropIndex++;
}
}
}
}
} else if (draggedTab) {
let newIndex = this._getDropIndex(event, false);
let newTabs = [];
for (let tab of movingTabs) {
let newTab = gBrowser.adoptTab(tab, newIndex++, tab == draggedTab);
newTabs.push(newTab);
}
// Restore tab selection
gBrowser.addRangeToMultiSelectedTabs(
newTabs[0],
newTabs[newTabs.length - 1]
);
} else {
// Pass true to disallow dropping javascript: or data: urls
let links;
try {
links = browserDragAndDrop.dropLinks(event, true);
} catch (ex) {}
if (!links || links.length === 0) {
return;
}
let inBackground = Services.prefs.getBoolPref(
"browser.tabs.loadInBackground"
);
if (event.shiftKey) {
inBackground = !inBackground;
}
let targetTab = this._getDragTargetTab(event, true);
let userContextId = this.selectedItem.getAttribute("usercontextid");
let replace = !!targetTab;
let newIndex = this._getDropIndex(event, true);
let urls = links.map(link => link.url);
let csp = browserDragAndDrop.getCSP(event);
let triggeringPrincipal = browserDragAndDrop.getTriggeringPrincipal(
event
);
(async () => {
if (
urls.length >=
Services.prefs.getIntPref("browser.tabs.maxOpenBeforeWarn")
) {
// Sync dialog cannot be used inside drop event handler.
let answer = await OpenInTabsUtils.promiseConfirmOpenInTabs(
urls.length,
window
);
if (!answer) {
return;
}
}
gBrowser.loadTabs(urls, {
inBackground,
replace,
allowThirdPartyFixup: true,
targetTab,
newIndex,
userContextId,
triggeringPrincipal,
csp,
});
})();
}
if (draggedTab) {
delete draggedTab._dragData;
}
}
gBrowser.tabContainer._getDropIndex = function(event, isLink) {
var tabs = this.allTabs;
var tab = this._getDragTargetTab(event, isLink);
if (!RTL_UI) {
for (let i = tab ? tab._tPos : 0; i < tabs.length; i++) {
if (
event.screenY >
tabs[i].screenY &&
event.screenY <
tabs[i].screenY + tabs[i].getBoundingClientRect().height
) {
if (
event.screenX >
tabs[i].screenX &&
event.screenX <
tabs[i].screenX + tabs[i].getBoundingClientRect().width / 2
) {
return i;
}
if (
event.screenX >
tabs[i].screenX + tabs[i].getBoundingClientRect().width / 2 &&
event.screenX <
tabs[i].screenX + tabs[i].getBoundingClientRect().width
) {
return i + 1;
}
}
}
} else {
for (let i = tab ? tab._tPos : 0; i < tabs.length; i++) {
if (
event.screenY >
tabs[i].screenY &&
event.screenY <
tabs[i].screenY + tabs[i].getBoundingClientRect().height
) {
if (
event.screenX <
tabs[i].screenX + tabs[i].getBoundingClientRect().width &&
event.screenX >
tabs[i].screenX + tabs[i].getBoundingClientRect().width / 2
) {
return i;
}
if (
event.screenX <
tabs[i].screenX + tabs[i].getBoundingClientRect().width / 2 &&
event.screenX >
tabs[i].screenX
) {
return i + 1;
}
}
}
}
return tabs.length;
}
}
Alles anzeigen
Die (mutmaßlich) schlechte Nachricht: ich habe dieses Skript nach den entsprechenden notwendigen Vorbereitungen in einem neuen Profil getestet. Es funktioniert zwar, aber die Tableiste sprang bei mir jedes Mal wenn ich mit "Strg + T" einen neuen Tab aufgemacht habe. In meinem Hauptprofil tritt dieses Verhalten Gott sei Dank nicht auf.
Vielleicht ist ein/dieses Skript ja ein Ansatz der dir weiterhilft.