Mull: note-taking with a language server / vscode extension
Mull: 언어 서버와 VS Code 확장으로 쓰는 노트 위키
Mull은 여러 페이지를 하나의 일반 텍스트 파일에 담아 링크로 연결하는 위키 도구입니다. 언어 서버와 Visual Studio Code, Cursor 확장 기능으로 자동 완성, 진단, 서식 정리와 페이지 간 이동을 제공하며, 파일과 페이지의 연결 상태도 검사합니다.
- 주제
에디터 노트
Mull의 구성 원리는 파일과 페이지를 링크 그래프에 묶어 관리하는 데 있습니다. Home에서 모든 페이지에 도달해야 하고, 저장소 안의 파일도 위키에서 참조해야 한다는 제약이 링크 누락을 찾아내지만, 파일과 디렉터리를 위키에 연결하지 않으면 안 되는 규칙은 자료와 위키를 함께 정리하는 부담으로 이어집니다. 댓글에서 확인된 편집기 호환성은 언어 서버가 대부분 기능을 제공하고 Helix에서도 실행할 수 있다는 점입니다. 다만 활성 페이지 외의 내용을 흐리게 표시하는 기능은 확장에 속합니다. 자체 마크업을 택한 이유는 작성자의 읽기 취향이며, Markdown 호환성 여부는 댓글에서 답이 나오지 않았습니다. 포털과 스크립트 블록은 페이지 내용을 동기화하거나 정해진 변환을 자동화하는 기능으로 설명되지만, 자료에는 충돌 처리나 스크립트 실행의 제한 조건이 나오지 않습니다.
AI 요약
Mull은 .mull 파일 하나에 여러 위키 페이지를 저장하고, 대괄호 링크로 페이지를 연결하는 도구입니다. 각 페이지는 # 제목으로 시작하며, 모든 페이지는 Home에서 링크를 따라 도달할 수 있어야 합니다. 폴더 계층 대신 링크만으로 페이지를 정리하고, 파일을 저장하거나 명령을 실행하면 링크 관계에 맞춰 페이지 순서를 정돈합니다.
페이지와 파일 관리
Visual Studio Code와 Cursor 확장은 구문 강조, 링크 자동 완성, 미리 보기, 진단, 서식 정리, 리팩터링 등을 지원합니다. F12로 링크된 페이지를 열고 Shift + F12로 해당 페이지를 가리키는 링크를 찾을 수 있습니다. 파일은 위키 파일 옆의 <위키 이름>_files 디렉터리에 둡니다. 위키에 연결된 파일이 실제로 있는지 검사하며, 디렉터리 링크는 그 안의 모든 파일을 연결한 것으로 처리합니다. 빈 디렉터리는 따로 링크해야 합니다.
포털은 다른 페이지 내용을 복사해 삽입하고, 서식을 정리할 때 원본과 내용을 동기화합니다. 포털 안에서 편집하거나 원본 페이지를 편집하면 변경 사항이 다른 위치에도 반영됩니다. sort 블록에서는 사용자가 준비한 스크립트를 실행해 내용을 정렬합니다. 예시로 sort 명령을 실행하는 셸 스크립트를 만들고 실행 권한을 준 뒤, ::: sort 블록 안에 목록을 넣습니다. 스크립트 블록에서 사용한 스크립트는 별도 링크가 없어도 연결된 파일로 간주합니다.
언어 서버와 실행
Mull은 언어 서버를 제공하므로 편집기 확장 기능 없이도 mull language-server를 실행해 연결할 수 있습니다. 다만 활성 페이지 외의 내용을 흐리게 표시하는 기능처럼 확장에 의존하는 기능도 있습니다. 명령줄에서는 mull check --path wiki.mull로 위키가 유효하고 서식이 정돈됐는지, 스크립트 실행 결과를 포함해 검사합니다. format은 위키 서식을 정리하고 스크립트를 실행하며, page는 특정 페이지 내용을 출력합니다. 바이너리만으로도 명령줄이나 CI에서 사용할 수 있고, 확장은 바이너리를 이용해 편집 경험을 제공합니다.
Lobsters 반응
- @strongoose — 정말 멋진 아이디어네요! 확장 기능이어야 하는 기능이 있는지, 범용 언어 서버로는 안 되는 기능이 무엇인지 궁금합니다. Helix에 연결할 수 있을지도 궁금하네요.
- @lettuce — 활성 페이지, 즉 커서가 있는 페이지를 제외한 나머지를 흐리게 표시해 한 페이지에 시선을 집중시키는 기능이 한 예입니다. 이런 기능은 드물고, 대부분은 언어 서버가 제공하므로 다른 언어 서버 클라이언트에서도 대다수 기능을 쓸 수 있습니다.
- @elijahpotter — Harper LSP와 함께 쓰면 잘 맞을 것 같네요.
- @lknuth — 그것도 좋은 도구네요. ltex-ls-plus와는 어떻게 다른가요? 제가 알기로 ltex-ls-plus도 완전히 로컬에서 실행됩니다.
- @lknuth — 제가 구상 중인 아이디어와 아주 비슷하고 잘 만든 것 같네요. Markdown + 위키 링크 대신 자체 마크업을 선택한 이유가 있나요? Markdown과 호환되나요?
- @lettuce — 주로 미적인 취향입니다. [[Link]]보다 [Link]가 읽기 좋다고 느낍니다.
- @giann — LSP를 구현했나요? 그렇다면 VS Code 말고 다른 편집기나 IDE, 특히 Helix에서도 쓸 수 있겠네요.
- @lettuce — 구현했습니다. 편집기에서
mull language-server를 실행하도록 설정하면 됩니다. Helix에서 시험해 보지는 않았지만, 사용해 보시면 결과를 알려주세요. GitHub에 이슈를 남겨도 좋습니다.
- @lettuce — 구현했습니다. 편집기에서
원문: Lobsters / 번역·요약: Trawling