Neovim을 통한 파이 메뉴 구현

4318 단어 Neovimtech
Neovim에서 파이 메뉴를 구현하는 플러그인 piemenu.nvim을 만들었습니다.
https://github.com/notomo/piemenu.nvim

파이 메뉴?


항목을 원형으로 배열한 메뉴.
각도에서 항목을 선택할 수 있습니다.
세상에 존재하는 파이 메뉴의 행동을 확인하고 싶을 때
3DCG 소프트웨어의 Blender에는 add-on으로 존재하므로 참고할 수 있습니다.
또 참고https://github.com/payne911/PieMenu했다.
프레젠테이션 페이지가 있고 게임에서 사용하는 예가 있는gif가 있어서 즐거웠어요.

모티프


가볍게 듀엣할 때 건반 위에 두 손을 얹는 게 귀찮아요.
나는 개인적으로 마우스만 들고 있는 장면을 비교적 좋아한다.
그러나 네오비엠은 컨텍스트 메뉴가 없어 마우스만으로는 완성할 수 없다.
(당연히 키보드로 조작된 편집기)
그럼 메뉴 표시줄 기능:help menus을 사용하는 게 어때요?
GUI에 의존할 뿐 아니라 특별히 설치된 Neovim의 GUI도 볼 수 없습니다.
현재 상황neovim-qt도 없다.https://github.com/equalsraf/neovim-qt/issues/395
워낙 작은 요소를 노려 클릭을 잘 못하기 때문에 마음대로 선택할 수 있는 UI를 원한다.
파이 메뉴라면 메뉴에 분배되는 각도 범위 내에서 클릭할 수 있어 마음대로 선택할 수 있다.
또한 이전에 제작된 제스처 플러그인gesture.nvim과도 잘 어울린다
마우스 제스처의 동작으로 파이 메뉴를 사용하면 마우스에만 있는 행동폭을 쉽게 늘릴 수 있다.

이루어지다


Neovim 고유의 기술은 거의 없습니다.
다만 편집기 영역에 포함된 범위의 원주는 메뉴를 잘 설정하기가 어렵다.
그러나 칸을 원형으로 만들기 위해서는 칸의 종횡비가 2:1인 것을 고려할 필요가 있다.
그다음에 이음매 얘기로.
piemenu.nvim에 메뉴를 등록해서 수락한 이름을 표시하기 위해서입니다.
(아래 예제에서example
require("piemenu").register("example", {
  menus = {
    {
      text = "📚 help",
      action = function()
        vim.cmd("help " .. vim.fn.expand("<cword>"))
      end,
    },
  },
})

require("piemenu").start("example")
gesture.nvim에서 전역 또는 버퍼 로컬 자세를 등록할 수 있습니다
piemenu.nvim이면 자유로운 이름 공간으로 등록하면 확장성이 높습니다.
예를 들어 파일 형식에서 사용하고자 하는 메뉴가 반드시 하나만 있는 것은 아니다.

감상

  • 평소에 애니메이션이나 삼각함수를 사용할 기회가 없었기 때문에 신선하고 즐거웠다
  • Neovim이 마우스hover를 원하는 이벤트https://github.com/neovim/neovim/issues/9534
  • 좋은 웹페이지 즐겨찾기