Paper Plane xUI (PPx)의 ListFile과 peco의 관계

6038 단어 PPxGitPeco
peco에서는 표준 출력에 일람을 선택해 표준 출력에 낼 수 있어 대화적인 필터 처리라고 할 수 있습니다.
여기에서는 (각각을 사용해 느낀 나 나름의) 용도의 차이를 해설하고 싶습니다.

peco의 예



스크립트로 대화식 처리



예를 들어, 뭔가 스크립트를 실행하는 동안 대화식 처리를 넣고 싶다면 peco의 차례입니다.
※동작 확인은 cygwin의 mintty상에서 하고 있어 peco를 동작시키기 위해winpty를 인스톨 하고 있습니다.

peco_test.sh
#!/bin/sh

while : ;do
  echo Paper Plane xUIを使いますか?
  sleep 2
  select=`echo -e "Hai\nYes\nNo" | peco`

  case $select in
  Hai|Yes)
    echo Welcome Paper Plane xUI!
    break
    ;;
  *)
    echo そんな、ひどい
    sleep 1
    ;;
  esac
done

위와 같이, 매우 간편하게 선택사항을 만들 수 있습니다.게다가 입력이 아니므로 코너 케이스의 고려도 어느 정도 하지 않아도 좋고, 예를 들면 Yes의 경우에 "[Yy]([Ee][Ss])?" 라고 하는 입력 체크를 하지 않아도 좋다 됩니다, 또, 복수 선택의 때도 *에 가게 되어 있습니다.

상기의 경우는 선택사항 때문에, cho 명령 쪽이 적절할까 생각합니다만, 일례로서 소개합니다.

git 브랜치를 선택하고 checkout



다음은 리눅스 커맨드와의 제휴시에 peco를 사용하는 경우입니다.
$ git checkout `git branch | peco`

그렇다면 브랜치 목록에서 선택하여 checkout을 할 수 있습니다 1. 합니다.

PPx 예



PPx에서는 후자의 「git로, 선택한 브랜치를 checkout」와 같은 부분에 이용할 수 있습니다, 전자의 스크립트내의 대화적인 처리는 peco(나 cho)가 좋을 것입니다.

PPx에서 git 브랜치를 선택하고 checkout



우선, 단순히 커멘드의 실행 결과를 ListFile에 토출하는 커멘드군을 준비합니다.이것은 간단합니다만, 범용적입니다.

Shift + s로 명령 실행 결과를 ListFile화합니다.


여기서 git branch 실행



분기 목록이 항목으로 표시됩니다.

이 중에서 엔트리를 선택해 checkout을 하기 위해서, Paper Plane xUI (PPx)를 git의 프런트 엔드로 사용 에서 준비한 checkout 메뉴를, 커서상의 엔트리가 초기치가 되도록 조금 개조합니다.

Shift + g, o의 초기 값 변경


이제 선택한 항목에 checkout할 수 있습니다.

도구 구성



entry.js



선택한 첫 번째 엔트리를 반환합니다.

entry.js
//! script

for (var items = new Enumerator(PPx.Entry); !items.atEnd(); items.moveNext()) {
    PPx.Result = items.item().Name;
    break;
}

PPx 설정



차이만입니다 2 .

※자신의 설정이 사라지지 않도록, 적용전에 백업을 취하거나 추가 혼잡을 해 주세요
※GitExtensions나 스크립트의 패스는 자신의 환경에 맞추어 주세요

PPX.CFG
KC_main = { ; PPcメイン窓
\S  ,
    *set dummy='command実行'
    *set CIN_LSTFILE=%'temp'\cin2listfile.tmp
    *set CMD=%"コマンド?"%{command%}
    %Obsq %'CMD' | ruby %0\script\shell\tolistfile.rb | nkf -Lw -s > %'CIN_LSTFILE'
    *jumppath %'CIN_LSTFILE'
}

M_menuCustomGit2    = { ** comment **
git check&out <target>  = 
    *set ENTRY=%*script(%0\script\entry.js)
    *set ARG=%"git checkout <target>(入力1/2)"%{%'ENTRY'%}
    %"git checkout <target>(Enterで実行2/2)"%{%}
    %OB git checkout %'ARG'
}

끝에



몸도 뚜껑도 없습니다만, 이번과 같이 이용 빈도가 높은 경우는 전용 메뉴를 준비해도 좋을까 생각합니다, 이쪽이 ListFile를 중계하지 않고, 1 액션으로 끝나기 때문에 부드럽습니다.

PPx.CFG
M_menuCustomGit2    = { ** comment **
git check&out <branch> <PECO>   = %OB git branch | peco | xargs git checkout
}



현재 브랜치에 "*"가 남아 있지만, 제 경우에는 후보 밖의 표식으로 남기도록 합니다

「Shift+g」는 엔트리 이외의 자신 룰이 있습니다만 「Shift+g, o」로 엔트리를 초기치로 하고 있습니다. 이것은 초기치의 「.」는 곧 입력할 수 있고, 최초의 하나 밖에 사용되지 않기 때문에 「Ctrl+g」와는 다른, 무엇보다 사용하기 편하다고 하는 일로 이렇게 했습니다. 

좋은 웹페이지 즐겨찾기