文件
mynode/packages/editor/CodeMirror/extensions/modifierKeyCssExtension.ts
chen 301194963b
一些检查失败了
automerge / automerge (push) Has been cancelled
react-native-android-build-apk / AssembleRelease (push) Has been cancelled
Build macOS M1 / Main (push) Has been cancelled
Joplin Continuous Integration / Main (macos-15-intel) (push) Has been cancelled
Joplin Continuous Integration / Main (ubuntu-22.04) (push) Has been cancelled
Joplin Continuous Integration / Main (ubuntu-22.04-arm) (push) Has been cancelled
Joplin Continuous Integration / Main (windows-11-vs2026-arm) (push) Has been cancelled
Joplin Continuous Integration / Main (windows-2025) (push) Has been cancelled
Joplin Continuous Integration / ServerDockerImage (ubuntu-22.04) (push) Has been cancelled
Joplin Continuous Integration / ServerDockerImage (ubuntu-22.04-arm) (push) Has been cancelled
Joplin UI tests / Main (ubuntu-22.04) (push) Has been cancelled
Joplin UI tests / Main (windows-2025) (push) Has been cancelled
Joplin UI tests / Mobile (push) Has been cancelled
Close stale issues / ProcessStaleIssues (push) Has been cancelled
feat: Initial clean release of CHM
2026-11-04 11:29:39 +08:00

51 行
1.4 KiB
TypeScript

import { StateEffect, StateField, Transaction } from '@codemirror/state';
import { EditorView } from '@codemirror/view';
import { editorSettingsFacet } from './editorSettingsExtension';
// On MacOS: Tracks the meta key
// On other platforms: Tracks the ctrl key.
const ctrlOrMetaChangedEffect = StateEffect.define<boolean>();
const ctrlOrMetaPressedField = StateField.define<boolean>({
create: () => false,
update: (value: boolean, transaction: Transaction) => {
const toggleEffect = transaction.effects.find(effect => effect.is(ctrlOrMetaChangedEffect));
if (toggleEffect) {
return toggleEffect.value;
}
return value;
},
provide: (field) => [
EditorView.editorAttributes.from(field, on => ({
class: on ? '-ctrl-or-cmd-pressed' : '',
})),
...(() => {
const onEvent = (event: KeyboardEvent|MouseEvent, view: EditorView) => {
const editorSettings = view.state.facet(editorSettingsFacet);
const hasModifier = editorSettings.preferMacShortcuts ? event.metaKey : event.ctrlKey;
if (hasModifier !== view.state.field(ctrlOrMetaPressedField)) {
view.dispatch({
effects: [
ctrlOrMetaChangedEffect.of(hasModifier),
],
});
}
};
return [
EditorView.domEventObservers({
keydown: onEvent,
keyup: onEvent,
mouseenter: onEvent,
mousemove: onEvent,
}),
];
})(),
],
});
export default [
ctrlOrMetaPressedField,
];