버튼 1개와 입력 필드 1개를 표시하는 yad 명령을 만들고 싶습니다. 사용자가 버튼을 클릭하면 미리 정의된 텍스트가 표준 출력으로 반환되기를 원합니다. 사용자가 입력 필드에 무언가를 쓰고 Enter를 누르거나 다른 버튼을 클릭하면 입력 필드 텍스트가 stdout으로 반환됩니다.
이런 일을 어떻게 하시겠습니까?
답변1
그래서 당신은 다음과 같은 것을 원합니다 :
Default
기본값을 인쇄 하고 stdout
대화 상자를 닫습니다.
스크립트로 래핑하지 않고도 가능한지 확실하지 않습니다. 종료 상태를 사용하여 어떤 버튼을 눌렀는지 감지하고 적절한 조치를 취할 수 있습니다. 인쇄할 수는 있지만 stdout
내가 아는 한 프로세스를 종료하지 않고 대화 상자를 닫을 수 있는 방법은 없습니다. 입력을 캡처하면 버튼을 누를 때마다 추가 필드가 생성됩니다.
가장 좋은 절충안은 --entry-text
다음과 같이 기본값이 있는 옵션을 사용하는 것입니다.
yad \
--entry \
--text "Enter value" \
--entry-text="foo" \
--button=gtk-ok
다음과 같은 것을 제공합니다:
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를 웹킷으로 컴파일해야 합니다. 내 것은 그렇지 않습니다.