대화 상자의 --checklist 상자에 가로 스크롤 또는 \n(줄 바꿈) 설명을 입력할 수 있습니까?

대화 상자의 --checklist 상자에 가로 스크롤 또는 \n(줄 바꿈) 설명을 입력할 수 있습니까?

나는 대화 상자 버전을 사용하고 있습니다: 1.3-20210324

반면:

LIST_ITEMS=(
  "1." "A ... very ... very ... looooong ... Informationtext" "off"
  "2." "A ... very ... very ... looooong ... Informationtext" "off"
                            ...                                     )
dialog ... --checklist "checklistName" 0 0 0 "${LIST_ITEMS[@]}" 

결과:
클래식 대화 목록정보 텍스트완전히 보이지 않습니다.

누락된 대상:
가로로 스크롤하거나 줄 바꿈하는 방법이 필요합니다.정보 텍스트.

편집 1
@Thomas Dickey는 데이터 형식을 다시 지정한다고 언급했는데 어느 쪽이든 수평 공간이 충분하지 않기 때문에 이는 선택 사항이 아닙니다. 내 글에서 언급했듯이목표가 부족하다진짜 질문은 남아 있습니다. 어쨌든, 토마스님의 생각에 감사드립니다! 어떤 도움이라도 환영합니다. 미리 감사드립니다!

편집 2: 가능한 해결책
@LL3은 문제 해결 방법에 대한 두 가지 짧은 예를 제시했습니다. 감사합니다!

요약:
이 수정 날짜를 기준으로 현재 동의는 다음과 같습니다.

  • --check-list가로 스크롤 옵션 없음
  • --check-list한 줄로 계획

답변1

AFAIK 매니페스트 항목의 텍스트 는 한 번에 한 줄이어야 하며 Thomas Dickey 자신이 달리 제안하지 않았다는 점을 고려하면 이 텍스트에 포함된 이스케이프 시퀀스나 리터럴 개행 문자를 dialog처리하도록 지시할 방법이 없다고 생각합니다. .dialog\n

두 가지 편리한 대안 중 하나(또는 때로는 둘 다)를 사용하여 귀하와 같은 상황을 쉽게 처리하는 방법을 알려드릴 수 있습니다.

만약에매우 긴 정보 텍스트는 여전히 한 줄 창에 들어갈 수 있습니다. 옵션을 추가 --item-help하고 각 항목에 대한 추가 필드를 제공하면 표시되는 한 줄의 텍스트가 더 길어집니다. 이 추가 필드는 커서가 해당 필드 위에 있을 때 창 하단에 나타납니다.

따라서 다음과 같이 하면 됩니다.

LIST_ITEMS=(
   "1." "briefer text 1" "off" "A first ... very ... very ... looooong ... Informationtext"
   "2." "briefer text 2" "off" "A second ... very ... very ... looooong ... Informationtext"
)
dialog --item-help --checklist "checklistName" 0 0 0 "${LIST_ITEMS[@]}"

이러한 추가 필드는 여전히 한 줄이며 dialog항목의 기본 텍스트와 마찬가지로 창에 맞지 ​​않으면 자동으로 잘립니다.

매우 길거나 여러 줄로 된 텍스트의 경우 다음 개념 증명 예와 같이 요청 시 프로그래밍 방식으로 처리할 추가 대화 상자를 쉽게 설정할 수 있습니다.

#!/bin/bash --
# Note it is conventional practice to use lowercase names for variables,
# whereas uppercase names are left to standards and to shell's own use.
list_items=(
   "1." "A ... very ... very ... looooong ... Informationtext" "off"
   "2." "A ... very ... very ... looooong ... Informationtext" "off"
)
until choice=$(dialog --help-button --checklist "checklistName" 0 0 0 "${list_items[@]}" 2>&1 >/dev/tty); do
    case $? in
    (1) btn=Cancel && break;;
    (2) case $choice in
        ("HELP 1.") dialog --msgbox 'this is a long explanation\nfor option 1.\n' 0 0;;
        ("HELP 2.") dialog --msgbox 'option 2 takes\neven three\nseparate lines.' 0 0;;
        esac
    esac
done
printf -- %s\\n "Pressed ${btn:-OK}"

화타이

관련 정보