auto-pair.ts 904 B

12345678910111213141516171819202122232425262728293031
  1. import { keymap } from '@codemirror/view'
  2. import { Compartment, Prec, TransactionSpec } from '@codemirror/state'
  3. import { closeBrackets, closeBracketsKeymap } from '@codemirror/autocomplete'
  4. import { closePrefixedBrackets } from './close-prefixed-brackets'
  5. const autoPairConf = new Compartment()
  6. export const autoPair = ({
  7. autoPairDelimiters,
  8. }: {
  9. autoPairDelimiters: boolean
  10. }) => autoPairConf.of(createAutoPair(autoPairDelimiters))
  11. export const setAutoPair = (autoPairDelimiters: boolean): TransactionSpec => {
  12. return {
  13. effects: autoPairConf.reconfigure(createAutoPair(autoPairDelimiters)),
  14. }
  15. }
  16. const createAutoPair = (enabled: boolean) => {
  17. if (!enabled) {
  18. return []
  19. }
  20. return [
  21. closePrefixedBrackets(),
  22. closeBrackets(),
  23. // NOTE: using Prec.highest as this needs to run before the default Backspace handler
  24. Prec.highest(keymap.of(closeBracketsKeymap)),
  25. ]
  26. }