• Redjard@lemmy.dbzer0.com
    link
    fedilink
    arrow-up
    6
    ·
    edit-2
    1 year ago

    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)

    • Redjard@lemmy.dbzer0.com
      link
      fedilink
      English
      arrow-up
      1
      ·
      11 months 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);