Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

MediaWiki:UserScripts/Shortcuts.js

MediaWiki interface page

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
// MediaWiki:UserScripts/Shortcuts.js
// Shortcuts:
//   d -> delete current page
//   h -> history
//   r -> recent changes
//   e -> edit current page
//   u -> upload file
//   p -> protect current page
//
// Wikitext editor only:
//   Ctrl+Enter (or Cmd+Enter) -> Save changes
//
// Notes:
// - D/H/R/E/U/P won't trigger while typing.
// - Ctrl/Cmd+Enter WILL trigger while typing in the wikitext textarea.
(function () {
  if (window.__shortcutsInstalled) return;
  window.__shortcutsInstalled = true;

  function isTypingTarget(el) {
    if (!el) return false;
    var tag = (el.tagName || '').toLowerCase();
    return tag === 'input' || tag === 'textarea' || tag === 'select' || !!el.isContentEditable;
  }

  function go(title, query) {
    location.href = mw.util.getUrl(title, query || {});
  }

  function trySaveWikitext() {
    var btn =
      document.querySelector('#wpSave') ||
      document.querySelector('button[name="wpSave"]') ||
      document.querySelector('input[name="wpSave"]');

    if (btn && !btn.disabled) {
      btn.click();
      return true;
    }
    return false;
  }

  document.addEventListener(
    'keydown',
    function (e) {
      var k = (e.key || '').toLowerCase();

      // Ctrl+Enter / Cmd+Enter -> Save changes (wikitext edit form)
      if ((e.ctrlKey || e.metaKey) && !e.altKey && k === 'enter') {
        if (mw.config.get('wgAction') === 'edit' || mw.config.get('wgAction') === 'submit') {
          if (trySaveWikitext()) {
            e.preventDefault();
            e.stopPropagation();
          }
        }
        return;
      }

      // Single-key shortcuts: ignore modifiers + typing
      if (e.ctrlKey || e.metaKey || e.altKey) return;
      if (isTypingTarget(e.target)) return;

      var page = mw.config.get('wgPageName');

      if (k === 'e') { e.preventDefault(); go(page, { action: 'edit' }); return; }
      if (k === 'h') { e.preventDefault(); go(page, { action: 'history' }); return; }
      if (k === 'p') { e.preventDefault(); go(page, { action: 'protect' }); return; }
      if (k === 'd') { e.preventDefault(); go(page, { action: 'delete' }); return; }
      if (k === 'r') { e.preventDefault(); go('Special:RecentChanges'); return; }
      if (k === 'u') { e.preventDefault(); go('Special:Upload'); return; }
    },
    true
  );
})();