무엇인가 : 현대적인 터미널 에뮬레이터에 복잡한 TUI를 촉진하는 라이브러리, 생생한 색상, 멀티미디어, 스레드 및 유니 코드를 최대 정도까지 지원합니다. 단순히 ncurses로 할 수없는 말을하지 않는 일을 할 수 있습니다. 더 빨리 똥처럼 빠릅니다. 그렇지 않은 것 : 소스 호환 X/Open Curses 구현 또는 기존 시스템의 NCURES를 대체합니다.
자세한 내용은 Dankwiki 및 Man Pages를 참조하십시오. 또한, 독소력 출력이 있습니다. 메일 링리스트를 구독하려면 notcurses [email protected]으로 이메일을 보내십시오 (이메일 내용은 중요하지 않음). 나는 무료 다운로드 (또는 페이퍼 백 구매)를 이용할 수있는 일관된 가이드 북을 썼습니다.
아직 문서화 된 많은 예제를 추가하지는 않았지만 SRC/ POC/ 및 SRC/ POCPP/에는 각각 많은 작은 C 및 C ++ 프로그램이 포함되어 있습니다. notcurses-demo 대부분의 기능을 포함합니다.
Docker에서 응용 프로그램을 사용하지 않는 경우 아래의 "환경 노트"를 참조하십시오.



NotCurses는 단일 UNIX 사양의 일부로 번들로 연결된 X/Open Curses API를 포기합니다. 필요한 배경은 Thomas E. Dickey의 훌륭하고 권위있는 NCurses FAQ를 참조하십시오. 따라서, Notcurses는 드롭 인 저주 교체가 아닙니다.
가능한 한, NotCurses는 NCURSES와 함께 선적 된 TermInfo 라이브러리를 사용하여 휴대 성과 철저성으로 크게 도움이됩니다.
NotCurses는 워크 스테이션, 전화, 랩톱 및 태블릿의 대화식 사용자를위한 고급 기능을 열어줍니다. 기본적으로, 저주는 최소값을 가정하고 (노력으로) 단계를 밟을 수있게하는 반면, 필요할 때 최대 값을 가정하고 (자체적으로) 물을 뿌린다. 후자의 접근 방식은 아마도 일부 오래된 하드웨어에서 벗어날 수 있지만 이전의 접근 방식은 오래된 하드웨어처럼 보이는 새로운 소프트웨어를 초래합니다.
이 비표준 라이브러리를 사용하는 이유는 무엇입니까?
스레드 안전성과 병렬 프로그램에서의 효율적인 사용은 처음부터 설계 고려 사항이었습니다.
X/Open에 의해 체계화 된 해당보다 더 순서대로 표면 : 내보낸 식별자는 일반적인 네임 스페이스 충돌을 피하기 위해 접두사가 있습니다. 합리적이고 static inline 헤더 전용 코드가 사용되는 경우. 이것은 컴파일러 최적화를 용이하게하고 로더 시간을 줄입니다. NotCurses는 멀티미디어 기능없이 구축 할 수 있으며 의존성 세트가 훨씬 적습니다.
모든 API는 기본적으로 범용 문자 세트 (유니 코드)를 지원합니다. nccell API는 유니 코드의 확장 된 그래프 클러스터 개념을 기반으로합니다.
이미지, 글꼴, 비디오, 고 대비 텍스트, 스프라이트 및 투명 지역을 포함한 시각적 기능. 모든 API는 기본적으로 24 비트 색상을 지원하며 터미널에 필요한 경우 정량화됩니다.
Sixel, Kitty 및 Linux Framebuffer 콘솔을 사용하는 비트 맵 그래픽에 대한 휴대용 지원.
명백한 키보드 프로토콜을 지원합니다.
"TUI 모드"는 고성능, 비 스크롤, 전체 화면 응용 프로그램을 용이하게합니다. "CLI Mode"는 쉘 유틸리티의 스크롤 출력을 지원하지만 전체적으로 NotCurses의 전력을 제공합니다.
NCURSES 라이센스 인 몇 가지 행위에서 드라마와 달리 Apache2 라이센스가 있습니다 (후자는 "MIT-X11의 재조정"으로 요약되어 있음).
위의 대부분은 ncurses와 함께있을 수 있지만 ncurses를 위해 설계된 것은 아닙니다. 반면에, 산업 또는 중요한 응용 프로그램을 목표로하거나 시간 테스트 한 신뢰성 및 휴대 성으로부터 이익을 얻으려면 모든 방법으로 그 훌륭한 라이브러리를 사용해야합니다.
최소 버전은 일반적으로 내가 테스트 한 가장 오래된 버전을 나타냅니다. 여전히 오래된 버전을 사용하는 것이 가능할 수 있습니다. 성공에 대해 알려주세요!
건축 및 설치에 대한 자세한 내용은 install.md에서 확인할 수 있습니다.
C 이외의 언어를 사용하여 NotCurses와 함께 작동하려면 수많은 포장지를 사용할 수 있습니다. 일부는이 저장소에 포함되어 있고 다른 일부는 외부입니다.
| 언어 | 리드 (들) | 저장소 |
|---|---|---|
| 아다 | 제레미 그로스 | Jeremygrosser/Notcursesada |
| C ++ | Marek Habersack, Nick Black | 내부 |
| 다트 | 넬슨 페르난데스 | kascote/dart_notcurses |
| 줄리아 | DHEEPAK KRISHNAMURTHY | kdheepak/notcurses.jl |
| 님 | Michael S. Bradley, Jr. | Michaelsbradleyjr/nim-notcurses |
| 파이썬 | 닉 블랙 | 내부 |
| 파이썬 | IGO95862 | 내부 |
| 녹 | 호세 루이스 크루즈 | Dankamongmen/libnotcurses-sys |
| 급격한 변경 | Jakub Dundalek | Dundalek/NotCurses-Zig-Aexample |
NotCures의 일부로 9 개의 실행 파일이 설치됩니다.
ncls : 터미널에 멀티미디어를 표시하는 lsncneofetch : neofetch ripoffncplayer : 시각적 미디어 (이미지/비디오) 렌더링nctetris : 테트리스 클론notcurses-demo : 일부 데모 코드notcurses-info : 터미널 기능/진단을 탐지하고 인쇄합니다notcurses-input : 키 프레스를 디코딩하고 인쇄합니다notcurses-tester : 단위 테스트tfman : Swank 설명서 브라우저 결제에서 notcurses-demo 실행하려면 -p 인수를 통해 data 디렉토리를 제공하십시오. 데이터 파일이 필요한 데모는 그렇지 않으면 중단됩니다. notcurses-demo 에 사용 된 기본 지연은 -d 로 변경 될 수 있으며 부동 소수점 승수를 수용 할 수 있습니다. 1 미만의 값은 데모의 속도를 높이고 1보다 큰 값은 속도가 느려집니다.
notcurses-tester 마찬가지로 필요한 데이터 파일로 채워진 data -p 로 지정되어야합니다. 자체적으로 또는 make test 통해 실행할 수 있습니다.
-DUSE_PANDOC=on (기본값)을 사용하면 Man Pages와 XHTML 전체 세트가 doc/man 에서 구축됩니다. 다음 마크 다운 문서는 직접 포함됩니다.
TERM 및 다양한 터미널 에뮬레이터.당신이 (당연히) 큰 Pandoc 스택을 피하고 싶지만 여전히 수동 페이지를 즐기고 싶다면 각 릴리스와 함께 생성 된 Man/XHTML과 함께 Tarball을 게시합니다. 다운로드하고 적합한 것으로 간주되는 내용을 설치하십시오.
TERM 변수가 잘못되었거나 해당 Terminfo 정의가 오래되지 않으면 시간이 매우 나빠질 것입니다. 터미널에 적합한 TERM 값 만 사용하십시오. 이 변수가 정의되지 않았거나 지정된 TermInfo 항목을로드 할 수 없으면 시작을 거부하고 오늘 우주로 가지 않을 것입니다.
NotCurses는 시작시 터미널을 쿼리하여 결정된 터미널 (및 버전)을 기반으로 일부 고급 기능을 사용할 수 있습니다. 그러나 기본 기능은 terminfo에서 가져옵니다. 따라서 Kitty이지만 TERM=vt100 가지고 있다면 RGBA 비트 맵 그래픽을 그릴 수 있지만 (VT100의 꿈에도 불구하고) 대체 화면을 사용할 수는 없지만 (모든 키티 버전에서 지원 되었음에도 불구하고) 대체 화면을 사용할 수 없습니다 . 따라서 TERM 및 최신 Terminfo 데이터베이스는 여전히 중요합니다.
LANG 환경 변수가 UTF8 인코딩 된 로케일로 설정 되었으며이 로케일이 생성되었는지 확인하십시오. 이것은 일반적으로 "[language]_[Countrycode].UTF-8" , 즉 en_US.UTF-8 의미합니다. 첫 번째 부분 ( en_US )은 /usr/share/locales 의 디렉토리 또는 Symlink로 존재해야합니다. 일반적으로 /etc/locale.gen 편집하고 locale-gen 실행해야합니다. 데비안 시스템에서 이것은 dpkg-reconfigure locales 로 달성하고 원하는 로케일을 가능하게 할 수 있습니다. 기본 로케일은 /etc/default/locale 같은 곳에 저장됩니다.
터미널에 "모호한 폭 넓은 문자"의 기본 해석에 대한 옵션이있는 경우 (실제로 유니 코드의 기술적 인 용어 임) 좁지 않고 넓게 설정되어 있는지 확인하십시오 (작동하지 않으면 좁아 지도록 설정하십시오).
터미널이 setaf 및 setbf (대부분의 최신 터미널)를 통해 3x8 비트 RGB 색상을 지원하지만 RGB 나 Tc TermInfo 기능을 내보내지 않으면 COLORTERM 환경 변수를 truecolor 또는 24bit 내보낼 수 있습니다. 일부 터미널은 24 비트 사양을 허용하지만 더 적은 색상으로 매핑합니다. RGB는 대부분의 최신 터미널이 식별 될 때마다 무조건 활성화됩니다.
글리프 너비와 실제로 글리프가 표시 될 수 있는지 여부는 글꼴 구성에 부분적으로 의존적입니다. 이상적으로는 글꼴 구성에는 모든 유니 코드 EGC에 대한 글리프가 있으며 각 Glyph의 너비는 EGC의 Posix 기능의 wcswidth() 결과와 일치합니다. 그렇지 않은 경우, 누락 된 문자에 대해 공백 또는 � (U+FFFD, 교체 문자)를 얻을 수 있으며 라인의 후속 캐릭터가 잘못 배치 될 수 있습니다.
여러 터미널이 블록 문자를 글꼴에서로드하는 대신 직접 블록 문자를 그립니다. 이것은 일반적으로 바람직합니다. 사분면과 육교는 당신의 디자인 미덕을 보여주는 곳이 아닙니다. 환경의 캐릭터 렌더링을 검사하려면 notcurses-info 실행하십시오. 원하는 출력은 다음과 같은 모습을보아야합니다.
상황이 깨지거나 부족한 것처럼 보이면 환경 노트 섹션에 문의 하십시오 ! 올바른 TERM 와 LANG 정의가 필요하며 COLORTERM 원할 수 있습니다.
NCOPTION_CLI_MODE 플래그를 사용하십시오 (여러 실제 플래그에 대한 별칭; 자세한 내용은 notcurses_init(1) 참조). 당신은 여전히 명시 적으로 렌더링해야합니다.-DUSE_MULTIMEDIA=none 으로 빌드하십시오.notcurses_core_init() () / ncdirect_core_init() () 대신 notcurses_init() 또는 ncdirect_init() 사용하고 -lnotcurses-core 와 연결하십시오. 응용 프로그램은 몇 밀리 초 더 빨리 시작될 것입니다. 더 중요한 것은 최소한의 NotCures 설치와 관련이 있다는 것입니다.notcurses-demo (및 다른 몇 가지 프로그램)를 구축 할 수 있습니다. -DUSE_CXX=off 사용하십시오.TERM 값을 사용하면 많은 하드웨어 터미널이 지원됩니다. 일반적으로 TermInfo 데이터베이스 항목이 필수 지연을 나타내는 경우, NotCures는 현재 해당 터미널을 올바르게 지원하지 않습니다. Notcurses는 후자의 Sixel 그래픽을 포함하여 VT320 및 VT340을 구동 할 수 있다고 알려져 있습니다.NCBLIT_PIXEL 요청 된 경우에도 터미널이 긍정적으로 지원을 표시하지 않는 한 NotCures는 비트 맵 프로토콜을 사용하지 않습니다. 마찬가지로, Sextants ( NCBLIT_3x2 )는 Unicode 13 지원없이 사용되지 않습니다. ncvisual_blit() NCVISUAL_OPTION_NODEGRADE 제공되지 않는 한 (실패) 사용 가능한 최상의 블리터를 사용합니다 (실패).screen 에서 절대 쓰레기처럼 보입니다.screen RGB 색상을 지원하지 않습니다 (적어도 4.08.00 기준). COLORTERM 정의되어 있으면 시간이 나빠질 것입니다. --enable-colors256 으로 컴파일 된 screen 있는 경우 TERM=screen-256color 과 달리 TERM=screen -256Color를 내보내십시오.mosh 에서 절대 쓰레기처럼 보입니다.NC_ENTER NCTYPE_RELEASE 이벤트를 즉시 얻을 수 있으며 각 키 프레스는 일반적으로 적어도 두 개의 입력을 초래한다는 것을 의미합니다.NCKEY_RESIZE 표시되지 않습니다.SIGWINCH 마스킹하지 못했고 해당 스레드는 notcurses_getc_blocking() 이라는 스레드 대신 신호를 받고 있습니다. 결과적으로 poll() 이 중단되지 않습니다. 스레드를 생성하기 전에 pthread_sigmask() 에게 전화하십시오.main() 에서 돌아올 때 NotCurses 소멸자가 실행되도록하려면 어떻게해야합니까?NotCurses 가 main() 로 스코핑된다고 가정합니다).ncplane_move_yx() 사용하여 화면을 오프 스크린으로 이동시키고 ncplane_move_below() 가있는 불투명 평면 아래에서 이동하거나 ncplane_reparent() 로 파일을 오프 파일로 이동하십시오.ncplane_box_yx() 가없는 이유는 무엇입니까? 당신은 직교성을 싫어합니까?ncplane_box() 와 친구들은 이미 너무 많은 논쟁을 가지고 있습니다. 당신은 괴물입니다.graphics/qr-code-generator 설치 했음에도 불구하고 BSD에서 QRCodeGen을 찾지 못했습니다.cmake -DCMAKE_REQUIRED_INCLUDES=/usr/local/include 시도하십시오. 이것은 bsd.port.mk 에 의해 통과됩니다.LANG 환경 변수는 정의 또는 잘못 정의되었거나 필요한 로케일이 컴퓨터에 존재하지 않습니다 ( NCOPTION_INHIBIT_SETLOCALE 명시 적으로 제공했을 수도 있지만 setlocale(3) 이라고도하지 않을 수도 있습니다.nccell 사용할 때는 항상 ncplane 가 필요합니다. 후자는 왜 전자에 대한 포인터를 가지고 있지 않습니까?nccell 가능한 한 작게 유지되어야하며, 유효한 nccell 에 대한 참조가 있으면 거의 항상 ncplane 에 편리합니다.valgrind /Asan에서 NotCurses 프로그램을 운영했으며 libtinfo.so 의 메모리 누출을 보여줍니다.notcurses-demo 달렸지만 내 테이블 번호는 NotCurses 배너 번호와 일치하지 않습니다. Charlatan.notcurses-demo 실제 데모를 넘어 여러 프레임을 렌더링합니다.notcurses_stop() / ncdirect_stop() 호출을 요청하십시오 (기본적으로 NotCurses는 대부분의 치명적인 신호가 정확히이를 수행하도록 핸들러를 설치합니다).ncdirect_readline() 여전히 존재하지만 실제로는 LibreAdline 없이도 작동하지만 물론 LibreAdline은 아닙니다. 어쨌든 ncreader 와 함께 CLI 모드를 사용하는 것이 좋습니다.pkg-config --static --libs notcurses (또는 --libs notcurses-core )를 사용하여 발견하십시오.-P on 로 mintty 시작하거나 시작하기 전에 MSYS=enable_pcon 내보내십시오.COLORTERM=24bit 수동으로 내보낼 수 있습니까?SendEnv COLORTERM .ssh/config 에 추가하고 원격 서버의 sshd_config 에 AcceptEnv COLORTERM . 예, 원격 서버에 루트가 필요할 것입니다. 나를 비난하지 마십시오. 나는 그것을하지 않았다.ncvisual_from_rgba() 사용하여 RGBA 메모리에서 ncvisual 로드 할 수 있습니다.NCSTYLE_REVERSE 없습니까?ncchannels_reverse() 사용하여 앞면 및 배경색을 올바르게 반전시킬 수 있습니다.ncsubproc 위젯을 사용하여 하위 프로세스를 평면으로 스트리밍 할 수 있습니다.notcurses_refresh() 성공적으로 반환 한 후 notcurses_init() 를 호출하십시오.“우리의 미술은 개발되었고, 그들의 유형과 용도는 현재와 매우 다른시기에, 사물에 대한 행동의 힘이 우리와 비교할 때 중요하지 않은 사람들에 의해 확립되었습니다. 그러나 우리의 기술의 놀라운 성장, 그들이 달성 한 적응성 및 정밀도, 그들이 만들고있는 아이디어와 습관은 고대의 아름다운 공예에서 심오한 변화가 임박하고 있음 을 확실하게 만듭니다.” - Paul Valéry