이번에는 단축키 관련 내용들을 추가했습니다!!
이전에도 해봤던 내용이라 단순하게 생각했는데,
기존에 존재하는 에디터랑 사용하다보니 예상치 못한 변수들이 있었네요..
그 덕에 좋은 경험을 얻을 수 있었습니다!
여러 우여곡절 끝에 결국 직접 구현하는 방향을 선택했습니다.
이전에 관련된 기능을 라이브러리를 통해 쉽게 구현했던 기억이 있었기때문에,
이번에도 라이브러리를 당연히 사용하려고 계획했습니다.
무려 11일 전까지 유지보수되고 있는 라이브러리가 있네요!
그래서 이걸 사용했더니... 웬걸
동작하지 않았습니다.
이 때까지만 해도 뭔가 호환성이 잘 안 맞나? 싶어서
단순하게 다른 라이브러리를 찾아봤습니다!
음식도 우리가 아는 맛이 더 그립듯이
예전에 썼던 라이브러리를 보니까 이름이 살-짝 다른 라이브러리더라고여
유지보수된지 조금 시간이 흐르기는 했지만,
이전에도 잘 동작했으니 이번에도 이 라이브러리는 잘 동작할 것이라 생각했습니다.
그러나 이것 역시 잘 동작하지 않았고,
이 때 뭔가 다른 문제가 있을 거라는 생각을 하게 됐습니다.
보통의 단축키들은 up event에서 커맨드를 실행하고 있는데,
CodeMirror에서 up event 의 버블링을 막고 있었습니다.
CodeMirror 자체가 에디터기 때문에 자신들이 정의한 단축키 셋이 있었고,
이 때 사이드 이펙트를 막기 위해 자기 안에서 발생한 단축키 event에 대해서는
stopPropagation 처리를 하고 있었던 거였죠...
보통 hotkey 관련 라이브러리들은 내가 단축키를 실행하고자 하는 컴포넌트를
감싸는 형태로 제공되기 때문에,
child 컴포넌트에서 parent로 전달하지 않으면 아무런 소용이 없는 것이었습니다 ㅠ
뒤늦게 나마 이 사실을 알게 됐고 아 이건 구현할 수밖에 없겠구나 생각이 들어서
직접 구현을 하게 됐습니다.
먼저 ctrl 키와 맥 OS의 command 키를 구분하는 동작이 필요했습니다.
cmd는 KeyboardEvent의 metaKey로부터, ctrl은 ctrlKey로
구분할 수 있도록 돼있네요!
그리고 예전에 툴바 커맨드를 함수로 분리해놨기 때문에,
쉽게 연결하고 마무리할 수 있었습니다.
막상 알아보면 이렇게 간단한데 굳이 라이브러리를 사용할 필요가 있었나..?
라는 생각이 들게 되네요.
앞으로 구현할 일이 생기면 지금 경험을 토대로 더 수월하게 진행할 수 있을 거 같습니다!