diff --git a/src/static/js/ace2_inner.ts b/src/static/js/ace2_inner.ts index 709840f80..654042d69 100644 --- a/src/static/js/ace2_inner.ts +++ b/src/static/js/ace2_inner.ts @@ -2526,7 +2526,15 @@ function Ace2Inner(editorInfo, cssManagers) { const handleKeyEvent = (evt) => { if (!isEditable) return; - const {type, charCode, keyCode, which, altKey, shiftKey} = evt; + const {type, charCode, keyCode, which, shiftKey} = evt; + + // If DOM3 support exists, ensure that the left ALT key was pressed. This + // allows keyboard layouts with special meaning for right-alt-char to + // continue working on Firefox / macOS. + let altKey = evt.altKey; + if (evt.originalEvent.location !== undefined) { + altKey = altKey && evt.originalEvent.location === evt.originalEvent.DOM_KEY_LOCATION_LEFT; + } // Don't take action based on modifier keys going up and down. // Modifier keys do not generate "keypress" events.