MCPcopy Create free account
hub / github.com/Exafunction/codeium-chrome / beforeMainKeyHandler

Method beforeMainKeyHandler

src/codemirror.ts:311–369  ·  view source on GitHub ↗
(
    doc: CodeMirror.Doc,
    event: KeyboardEvent,
    alsoHandle: { tab: boolean; escape: boolean }
  )

Source from the content-addressed store, hash-verified

309 // If true, consume the event.
310 // Otherwise, keep going with other logic.
311 beforeMainKeyHandler(
312 doc: CodeMirror.Doc,
313 event: KeyboardEvent,
314 alsoHandle: { tab: boolean; escape: boolean }
315 ): { consumeEvent: boolean | undefined; forceTriggerCompletion: boolean } {
316 let forceTriggerCompletion = false;
317 if (event.ctrlKey) {
318 if (event.key === ' ') {
319 forceTriggerCompletion = true;
320 } else {
321 return { consumeEvent: false, forceTriggerCompletion };
322 }
323 }
324 // Classic notebook may autocomplete these.
325 if ('"\')}]'.includes(event.key)) {
326 forceTriggerCompletion = true;
327 }
328 if (event.isComposing) {
329 this.clearCompletion('composing');
330 return { consumeEvent: false, forceTriggerCompletion };
331 }
332 switch (event.key) {
333 case 'Delete':
334 case 'ArrowDown':
335 case 'ArrowUp':
336 case 'ArrowLeft':
337 case 'ArrowRight':
338 case 'Home':
339 case 'End':
340 case 'PageDown':
341 case 'PageUp':
342 this.clearCompletion(`key: ${event.key}`);
343 return { consumeEvent: false, forceTriggerCompletion };
344 }
345 if (!event.metaKey && !event.ctrlKey && !event.altKey && !event.shiftKey) {
346 if (alsoHandle.tab && event.key === 'Tab' && this.acceptCompletion()) {
347 return { consumeEvent: true, forceTriggerCompletion };
348 }
349 if (alsoHandle.escape && event.key === 'Escape' && this.clearCompletion('user dismissed')) {
350 return { consumeEvent: true, forceTriggerCompletion };
351 }
352 }
353 const cursor = doc.getCursor();
354 const characterBeforeCursor =
355 cursor.ch === 0 ? '' : doc.getRange({ line: cursor.line, ch: cursor.ch - 1 }, cursor);
356 const anyTextMarkerUpdated = this.anyTextMarkerUpdated(
357 event.key,
358 cursor,
359 characterBeforeCursor
360 );
361 // We don't want caps lock to trigger a clearing of the completion, for example.
362 if (!anyTextMarkerUpdated && event.key.length === 1) {
363 this.clearCompletion("didn't update text marker and key is a single character");
364 }
365 if (event.key === 'Enter') {
366 this.clearCompletion('enter');
367 }
368 return { consumeEvent: undefined, forceTriggerCompletion };

Callers 3

beforeMainHandlerMethod · 0.80
keydownHandlerMethod · 0.80
addKeydownListenerMethod · 0.80

Calls 3

clearCompletionMethod · 0.95
acceptCompletionMethod · 0.95
anyTextMarkerUpdatedMethod · 0.95

Tested by

no test coverage detected