this post was submitted on 11 Aug 2023
424 points (99.5% liked)

Firefox

4218 readers
62 users here now

A community for discussion about Mozilla Firefox.

founded 2 years ago
MODERATORS
 

all 12 comments
sorted by: hot top controversial new old
[–] [email protected] 32 points 1 year ago (4 children)

Now if they would let you customize keyboard shortcuts, it would have been my default browser years ago.

[–] [email protected] 28 points 1 year ago (1 children)

Easy to fix with an extension. Shortkeys

[–] twirl7303 2 points 1 year ago* (last edited 1 year ago)

I use qutebrowser for this reason. Keyboard first controls. All the workaround extensions for Firefox have limitations on about, config, and addon pages. I also had trouble with losing focus to Google docs and when a page is loading. Until Firefox offers full native control options, this was too brittle for me from a keyboard accessibility perspective.

I would love to use Firefox more though once this happens!

[–] [email protected] 6 points 1 year ago* (last edited 1 year ago) (1 children)

You can customize browser-internal shortcuts with a script in your profile dir.
For example this is my script

‹user profile›/chrome/removeshortcuts.uc.js

var ids = `

viewBookmarksSidebarKb
key_quitApplication
openFileKb
key_savePage
printKb
goBackKb2
goForwardKb2
addBookmarkAsKb
bookmarkAllTabsKb
manBookmarkKb
viewBookmarksToolbarKb

`.replace(/\s+/g,' ').trim().split(' ');


ids.forEach( id=>{
    var key = document.getElementById(id);
    if (key) key.remove();
});


⁤
var originalKey = document.getElementById("key_screenshot");
if (originalKey) {
    // Clone the original key
    var newKey = originalKey.cloneNode(true);

    // Set the new id and shortcut for the new key
    newKey.setAttribute("id", newKey.id+"_redjard_alt");
    if (newKey.hasAttribute('data-l10n-id'))
        newKey.setAttribute("data-l10n-id", newKey.getAttribute('data-l10n-id')+"_redjard_alt");
    newKey.setAttribute("key", "S");
    newKey.setAttribute("modifiers", "accel");

    // Add the new key to the parent of the original key
    originalKey.parentNode.appendChild(newKey);
}

The script removes the shortcuts listed in the beginning and adds an alternate shortcut for screenshots to ctrl+s.
You can see all internashortcuts by opening a browser console and querying the shortcut elements (using regular javascript)

[–] [email protected] 1 points 1 year ago

To complete this, probably with ff117 I had to fix the way I load my userchrome files, reminding me I should probably put them here too:

/usr/lib64/firefox/firefox.cfg

// firefox.cfg file needs to start with a comment line
// it is included by having the following two lines in defaults/pref/autoconfig.js:
// pref("general.config.sandbox_enabled", false);
// pref("general.config.filename", "firefox.cfg");
// pref("general.config.obscure_value", 0);

var Services = globalThis.Services;
Services.obs.addObserver((aSubject, _aTopic, _aData)=>{
  var chromeWindow = aSubject;
  chromeWindow.setTimeout(()=>{
    try {
      if (chromeWindow.userChromeJsMod) return;
      chromeWindow.userChromeJsMod = true;
      var chromeFiles = chromeWindow.FileUtils.getDir("UChrm", []).directoryEntries;
      var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);
      while (chromeFiles.hasMoreElements()) {
        var file = chromeFiles.getNext().QueryInterface(Components.interfaces.nsIFile);
        var fileURI = Services.io.newFileURI(file);
        if (!file.isFile()) continue;
        
        if (/(^userChrome|\.uc)\.js$/i.test(file.leafName)) {
          // load userChrome.js and *.uc.js (case insensitive) as js file
          Services.scriptloader.loadSubScriptWithOptions(fileURI.spec, {
            target: chromeWindow,
            charset: "UTF-8",
            ignoreCache: true,
          });
        } else if (/\.as\.css$/i.test(file.leafName)) {
          // load *.as.css (case insensitive) as css file (in browser scope)
          if (!sss.sheetRegistered(fileURI, sss.AGENT_SHEET)) {
            sss.loadAndRegisterSheet(fileURI, sss.AGENT_SHEET);
          }
        } else if (/^(?!(userChrome|userContent)\.css$).+\.css$/i.test(file.leafName)) {
          if (!sss.sheetRegistered(fileURI, sss.USER_SHEET)) {
            sss.loadAndRegisterSheet(fileURI, sss.USER_SHEET);
          }
        }
      }
    } catch (e) {
      Components.utils.reportError(e); // [check] Show Content Messages
    }
  }, 10);  // end of timeout
}, "browser-delayed-startup-finished", false);

/usr/lib64/firefox/defaults/pref/autoconfig.js

pref("general.config.sandbox_enabled", false);
pref("general.config.filename", "firefox.cfg");
pref("general.config.obscure_value", 0);

[–] [email protected] 5 points 1 year ago (1 children)

How can you use anything that doesn't support Tree Style Tabs?

Or do you use Orion or something?

[–] [email protected] 1 points 1 year ago (1 children)

I’ll have to try out tree style tabs. I miss chrome’s tab groups sooo much

[–] [email protected] 2 points 1 year ago (1 children)

When you do, feel free to find the "cheat code" to disable the top tab bar, it makes it a whole lot less noisy to me at least.

[–] [email protected] 2 points 1 year ago (1 children)

Just tried it. This is great. NOW I agree Firefox is better in every way.

[–] [email protected] 2 points 1 year ago

Welcome to the club!

And yes, it really makes a difference. And, there are even extra extensions for TST: I use a color tabs extenaion for it as welm as an extension that lets me export a tab tree as markdown for use in my notes or to batch "bookmark" them before closing them.