새 버퍼에서 명령 출력 열기

3999 단어 postgreskakouneunix
, 정보 창에서 선택한 쿼리를 열도록 조정했습니다. 해당 게시물의 맨 아래에서 언급했듯이 이 지나치게 단순한 접근 방식에는 몇 가지 문제가 있으며 그 중 하나는 정보 창의 제한 사항입니다.

오늘은 쿼리 출력을 쿼리가 실행될 때 사용자를 위해 열릴 자체 스크래치 버퍼로 이동하여 플러그인을 조정할 것입니다. 추가 보너스로 데이터베이스뿐만 아니라 모든 외부 명령에 대해 동일하게 작동하도록 플러그인을 일반화할 것입니다.

먼저 플러그인을 검토해 보겠습니다.

def eval-query \
  -override \
  -docstring "Evaluate current selection using given connection." \
  -params 1 \
  -shell-script-candidates %{
    cat .eval-query.json \
      | jq -r '.connections|keys|@sh' \
      | sed s/\'//g \
      | tr -s " " "\n"
  } \
%{
  info -title "Query output" %sh{
    psql `cat .eval-query.json | jq .connections.$1 | cut -d\" -f 2` \
      -c "${kak_selection}" 2>&1
  }
}


여기서 중요한 정보는 info 명령입니다. 정보 대화 상자를 표시하는 대신 출력을 캡처하여 |를 사용하여 set-register 레지스터에 넣습니다. 다음은 수정된 명령 본문입니다.

set-register | %sh{
  cmd=`cat .eval-query.json | jq .connections.$1 | cut -d\" -f 2`
  eval "$cmd "${kak_selection}" 2>&1"
}


우리는 | 레지스터를 사용했는데, 이는 :doc registers가 서브쉘을 생성하는 명령에 의해 사용되어야 한다고 명시했기 때문입니다. 이게 100% 코셔인지는 잘 모르겠으니 더 잘 아시는 분은 댓글 남겨주세요!

다음으로 eval-query-output이라는 새 스크래치 버퍼를 열고 레지스터의 내용을 거기에 붙입니다. 이것은 매우 간단합니다.

edit -scratch *eval-query-output*
exec 'geA<ret><esc>"|p;'

edit 명령은 익숙할 것입니다. 새 버퍼를 엽니다. -scratch는 kakoune에게 파일과 연결하는 것에 대해 신경 쓰지 않는다고 말합니다. 마지막으로 execute-keys(줄여서 exec)를 사용하여 파일의 끝으로 이동하고 새 줄을 추가한 다음 | 레지스터의 내용을 붙여넣습니다.

그리고 그게 다야! 아래에서 실제로 확인하십시오.



쿼리를 실행하는 메커니즘이 매우 일반적이기 때문에 이 플러그인을 사용하여 쿼리 결과에 제한되지 않고 새 버퍼에서 무엇이든 쉽게 열 수 있습니다. 단순히 connectionscommands로 이름을 바꾸고 구성 파일을 업데이트하면(또한 "버퍼 평가"를 위해 플러그인 이름을 beval로 변경했습니다) 가능성이 무한해집니다!

새 버퍼에서 디렉토리 목록을 열 수 있는 고급ls 명령을 추가해 보겠습니다.

{
  "commands": {
    "ls": "ls -lah"
  }
}




마지막으로 eval 키를 추가하여 원하는 명령을 실행할 수 있습니다.

{
  "commands": {
    "eval": "eval"
  }
}




현재 우리가 기본적으로 가지고 있는 것은 | 스테로이드(그리고 덜 잘 설계된)입니다. 계속해서 이것을 리팩토링하여 "파이프에서 버퍼로"기능을 독립 실행형으로 분리해 보겠습니다.

def eval-to-buffer \
  -override \
  -docstring "Evaluate current selection into scratch buffer." \
  -params 1..1000 \
%{
  set-register | %sh{ eval "$@ 2>&1" }

  # Open our output buffer
  edit -scratch *command-output*

  # Put output into the buffer
  exec '%"|pd'
}

def beval \
  -override \
  -docstring "Evaluate current selection using named command into scratch buffer." \
  -params 1 \
  -shell-script-candidates %{ cat .beval.json | jq -r '.commands|keys|@sh' | sed s/\'//g | tr -s " " "\n" } \
%{
  eval-to-buffer %sh{
    cmd=`cat .beval.json | jq .commands.$1 | cut -d\" -f 2`
    echo "$cmd \"${kak_selection}\""
  }
}


이제 프로젝트별 구성은 출력을 버퍼로 파이핑하는 메커니즘과 독립적입니다. 둘 다 서로 다른 상황에서 유용하기 때문입니다.

물론 추가 개선이 있지만 지금은 여기에 남겨두겠습니다. 읽어 주셔서 감사합니다!

좋은 웹페이지 즐겨찾기