Yad: 버튼이나 입력 필드를 통해 텍스트 선택

Yad: 버튼이나 입력 필드를 통해 텍스트 선택

버튼 1개와 입력 필드 1개를 표시하는 yad 명령을 만들고 싶습니다. 사용자가 버튼을 클릭하면 미리 정의된 텍스트가 표준 출력으로 반환되기를 원합니다. 사용자가 입력 필드에 무언가를 쓰고 Enter를 누르거나 다른 버튼을 클릭하면 입력 필드 텍스트가 stdout으로 반환됩니다.

이런 일을 어떻게 하시겠습니까?

답변1

그래서 당신은 다음과 같은 것을 원합니다 :

OPS 대화

Default기본값을 인쇄 하고 stdout대화 상자를 닫습니다.

스크립트로 래핑하지 않고도 가능한지 확실하지 않습니다. 종료 상태를 사용하여 어떤 버튼을 눌렀는지 감지하고 적절한 조치를 취할 수 있습니다. 인쇄할 수는 있지만 stdout내가 아는 한 프로세스를 종료하지 않고 대화 상자를 닫을 수 있는 방법은 없습니다. 입력을 캡처하면 버튼을 누를 때마다 추가 필드가 생성됩니다.

가장 좋은 절충안은 --entry-text다음과 같이 기본값이 있는 옵션을 사용하는 것입니다.

yad \
    --entry \
    --text "Enter value" \
    --entry-text="foo" \
    --button=gtk-ok

다음과 같은 것을 제공합니다:

yad 기본 입력 예

Cancel데이터 작업을 하는 경우 종료 키를 확인하고 대화 상자를 닫을 수 있으므로 ×(예: 장면 중단) 버튼 추가는 선택 사항입니다.

이것이 가장 깨끗한 방법일 수 있지만 누가 알겠습니까? 또한 사용자는 전체 텍스트를 작성하지 않고도 쉽게 기본값을 변경할 수 있습니다.


종료 코드 사용 yad:

input=$(yad \
        --entry \
        --text "Enter text or press Default to use ‘foo’" \
        --button=Default:1 \
        --button=gtk-ok:0)

case $? in
1) input=foo ;;
252) echo 'Aborting'; exit 1;;
esac

printf 'INPUT: %s\n' "$input"

종료 상태 분석

252종료 상태는 또는 Esc 키를 통해 대화 상자를 닫을 때 획득됩니다.×

를 누르면 input비어 있는지 확인할 수 있습니다.OK


또 다른 방법은 쉘 호출을 사용하는 것이지만 내가 아는 한 텍스트가 에코된 후에 대화를 닫을 수 있는 방법은 없으며 프로세스를 종료하는 것이 유일한 방법입니다(인용문 참고). Yad YAD_PID런타임 내보내기:

--button="Default":'sh -c "echo foo; kill YAD_PID;"'

# or

--form \
--input="Default":btn 'sh -c "echo foo; kill YAD_PID;"'

이 경우 함수를 사용할 수도 있습니다(bash 스크립트가 bash를 사용하는 경우 참고). 예:

foo() {
    echo foo
    kill $YAD_PID
}

export -f foo

yad \
    --button="Default":'bash -c foo'

가능하다면 HTML확실히 또 다른 옵션이지만 Yad를 웹킷으로 컴파일해야 합니다. 내 것은 그렇지 않습니다.

관련 정보