react-hotkeys icon indicating copy to clipboard operation
react-hotkeys copied to clipboard

[BUG] Key combinations such as [ "d d" ] seem to store the 2nd "d" so next time you press "d" it first the ["d d"] combination

Open v-bbrady opened this issue 4 years ago • 1 comments

Describe the bug Hello, I have a number of required key combinations that use the same key twice. For example, ["d d"]. The first time I click "d d". It functions as expected. However when I hit "d" a single time after that it fires the ["d d"] combination. I believe it is storing the 2nd d somewhere so when a single "d" is pressed it fires the combination. Does anyone have any ideas on how to clear this memory? Or another solution.

`import { EditorCellType } from "../types"; import { CellType } from "@nteract/commutable"; import { ICellProps } from "./ConnectedCell";

/**

  • todo */ export const keyMap = { CHANGE_CELL_TYPE_TO_MARKDOWN: ["m"], CHANGE_CELL_TYPE_TO_CODE: ["y"], PASTE_CELL_BELOW: ["v"], COPY_CELL: ["c"], CUT_CELL: ["x"], INSERT_ABOVE: ["a"], INSERT_BELOW: ["b"], DELETE_CELL: ["d d"], INTERRUPT_KERNEL: ["i", "i"], // should be i i RESTART_KERNEL: ["0", "0"], // should be 0 0 FOCUS_EDITOR: ["enter"], UNFOCUS_EDITOR: ["escape"], EXECUTE_CELL: ["control+enter"], FOCUS_ABOVE: ["up", "k"], FOCUS_BELOW: ["down", "j"], EXECUTE_CELL_INSERT_BELOW: ["alt+enter"], TOGGLE_OUTPUT: ["o"], TOGGLE_LINE_NUMBERS: ["l"], TOGGLE_OUTPUT_SCROLLING: ["shift+o"], SCROLL_DOWN: ["space"], SCROLL_UP: ["shift+space"], SAVE_NOTEBOOK: ["s"] };

/**

  • todo */ export function getHandlers(props: any) { return { TOGGLE_OUTPUT_SCROLLING: () => onKeyToggleOutputScrolling(props), CHANGE_CELL_TYPE_TO_CODE: () => onKeyChangeCellTypeToCode(props), CHANGE_CELL_TYPE_TO_MARKDOWN: () => onKeyChangeCellTypeToMarkdown(props), COPY_CELL: () => onKeyCopyCell(props), PASTE_CELL_BELOW: () => onKeyPasteCellBelow(props), CUT_CELL: () => onKeyCutCell(props), INSERT_ABOVE: () => onKeyInsertCellAbove(props), INSERT_BELOW: () => onKeyInsertCellBelow(props), DELETE_CELL: () => onKeyDeleteCell(props), INTERRUPT_KERNEL: () => onKeyInterruptKernel(props), RESTART_KERNEL: () => onKeyRestartKernel(props), EXECUTE_CELL: () => onKeyExecuteCell(props), EXECUTE_CELL_INSERT_BELOW: () => onKeyExecuteCellThenInsertCellBelow(props), FOCUS_EDITOR: () => onKeyFocusEditor(props), FOCUS_ABOVE: () => onKeyFocusAbove(props), FOCUS_BELOW: () => onKeyFocusBelow(props), TOGGLE_OUTPUT: () => onKeyToggleCellOutputVisibility(props), SAVE_NOTEBOOK: (e: KeyboardEvent) => onKeySaveNotebook(e, props) }; }

function onKeySaveNotebook(e: KeyboardEvent, props: ICellProps) { e.preventDefault(); props.saveNotebook(); }

function onKeyToggleCellOutputVisibility(props: ICellProps) { props.toggleCellOutputVisibility(); }

function onKeyRestartKernel(props: ICellProps) { if (!props.settings.readOnly) { props.restartKernel(); } }

function onKeyDeleteCell(props: ICellProps) { props.deleteCell(); }

function onKeyInterruptKernel(props: ICellProps) { props.interruptKernel(); }

function onKeyChangeCellTypeToCode(props: ICellProps) { const cellType: CellType = props.settings.cellType; if (cellType !== EditorCellType.code) { props.changeCellType(EditorCellType.code); } }

function onKeyChangeCellTypeToMarkdown(props: ICellProps) { const cellType: CellType = props.settings.cellType; if (cellType !== EditorCellType.markdown) { props.changeCellType(EditorCellType.markdown); } }

function onKeyInsertCellBelow(props: any) { const cellType: CellType = props.cellType; const contentRef: string = props.contentRef; props.insertCellBelow(contentRef, cellType); }

function onKeyInsertCellAbove(props: any) { const cellType: CellType = props.cellType; const contentRef: string = props.contentRef; props.insertCellAbove(contentRef, cellType); }

function onKeyCopyCell(props: ICellProps) { props.copyCell(); }

function onKeyPasteCellBelow(props: ICellProps) { props.pasteCellBelow(); }

function onKeyCutCell(props: ICellProps) { props.cutCell(); }

function onKeyToggleOutputScrolling(props: ICellProps) { props.toggleOutputExpansion(); }

function onKeyFocusBelow(props: any) { props.focusBelowCell(); }

function onKeyFocusAbove(props: any) { props.focusAboveCell(); }

function onKeyExecuteCell(props: ICellProps) { // tslint:disable no-console console.log('rowboat'); props.executeCell(); }

function onKeyExecuteCellThenInsertCellBelow(props: any) { const cellType: CellType = props.cellType; const contentRef: string = props.contentRef; props.executeCell(); props.insertCellBelow(contentRef, cellType); }

function onKeyFocusEditor(props: ICellProps) { props.focusEditor(); } `

Expected behavior I am expecting the key combination to only fire when "d" and then "d" is pressed even after using "d d" once.

Platform (please complete the following information):

  • 2.0.0
  • Chrome
  • Windows

v-bbrady avatar Jun 11 '20 18:06 v-bbrady

Is this related to #255?

Harjot1Singh avatar Jul 12 '20 21:07 Harjot1Singh