มันคืออะไร : ห้องสมุดที่อำนวยความสะดวก TUIs ที่ซับซ้อนบนอีมูเลเตอร์เทอร์มินัลสมัยใหม่รองรับสีที่สดใสมัลติมีเดียเธรดและ Unicode ในระดับสูงสุดเท่าที่จะเป็นไปได้ สิ่งต่าง ๆ สามารถทำได้ด้วย notcurses ที่ไม่สามารถทำได้ด้วย ncurses นอกจากนี้ยังเร็วเหมือนอึ สิ่งที่ไม่ใช่ : การใช้งาน X/Open Curses ที่เข้ากันได้กับแหล่งที่มาหรือการแทนที่ NCURSES ในระบบที่มีอยู่
สำหรับข้อมูลเพิ่มเติมดู Dankwiki และหน้า Man นอกจากนี้ยังมีเอาต์พุต Doxygen ในการสมัครรับข้อมูลทางไปรษณีย์ให้ส่งอีเมลไปที่ [email protected] (เนื้อหาอีเมลไม่สำคัญ) ฉันเขียนหนังสือคู่มือที่สอดคล้องกันซึ่งมีให้ดาวน์โหลดฟรี (หรือการซื้อปกอ่อน)
ฉันยังไม่ได้เพิ่มตัวอย่างเอกสารจำนวนมาก แต่ SRC/ POC/ และ SRC/ POCPP/ มีโปรแกรม C และ C ++ ขนาดเล็กจำนวนมากตามลำดับ notcurses-demo ครอบคลุมการทำงานส่วนใหญ่ของ notcurses
หากคุณใช้แอปพลิเคชัน Notcurses ใน Docker โปรดปรึกษา "หมายเหตุสภาพแวดล้อม" ด้านล่าง



Notcurses ละทิ้ง X/Open Curses API ที่รวมเป็นส่วนหนึ่งของข้อกำหนด UNIX เดียว สำหรับภูมิหลังที่จำเป็นบางอย่างให้ปรึกษา Thomas E. Dickey ที่ยอดเยี่ยมและเป็นผู้มีสิทธิ์ NCurses FAQ ดังนั้น notcurses จึงไม่ได้เปลี่ยนคำสาปแบบดรอปอิน
เมื่อใดก็ตามที่เป็นไปได้ Notcurses ใช้ประโยชน์จากห้องสมุด TermInfo ที่ส่งมาพร้อมกับ NCurses ซึ่งได้รับประโยชน์อย่างมากจากความสามารถในการพกพาและความทั่วถึง
Notcurses เปิดฟังก์ชั่นขั้นสูงสำหรับผู้ใช้แบบโต้ตอบบนเวิร์กสเตชันโทรศัพท์แล็ปท็อปและแท็บเล็ตอาจเป็นค่าใช้จ่ายของอาคารอุตสาหกรรมและค้าปลีกบางแห่ง โดยพื้นฐานแล้วคำสาปจะถือว่าขั้นต่ำและช่วยให้คุณ (ด้วยความพยายาม) ก้าวขึ้นไปในขณะที่ notcurses ถือว่าสูงสุดและขั้นตอนลง (โดยตัวเอง) เมื่อจำเป็น วิธีการหลังอาจแบ่งฮาร์ดแวร์รุ่นเก่า แต่วิธีการเดิมส่งผลให้ซอฟต์แวร์ใหม่ดูเหมือนฮาร์ดแวร์เก่า
ทำไมต้องใช้ห้องสมุดที่ไม่ได้มาตรฐานนี้
ความปลอดภัยของด้ายและการใช้งานที่มีประสิทธิภาพในโปรแกรมคู่ขนานได้รับการพิจารณาการออกแบบตั้งแต่ต้น
พื้นผิวที่เป็นระเบียบมากกว่าที่ประมวลโดย X/Open: ตัวระบุที่ส่งออกจะถูกนำหน้าเพื่อหลีกเลี่ยงการชนเนมสเปซทั่วไป ในกรณีที่มีการใช้รหัสส่วนหัว static inline คงที่เท่านั้น สิ่งนี้อำนวยความสะดวกในการเพิ่มประสิทธิภาพคอมไพเลอร์และลดเวลาโหลด Notcurses สามารถสร้างได้โดยไม่ต้องใช้ฟังก์ชั่นมัลติมีเดียซึ่งต้องการชุดการพึ่งพาน้อยกว่าอย่างมีนัยสำคัญ
APIs ทั้งหมดสนับสนุนชุดอักขระสากล (Unicode) nccell API นั้นใช้แนวคิดคลัสเตอร์กราฟที่ขยายออกไปของ Unicode
คุณสมบัติภาพรวมถึงรูปภาพ, ฟอนต์, วิดีโอ, ข้อความที่มีความคมชัดสูง, สไปรต์และภูมิภาคที่โปร่งใส APIs ทั้งหมดสนับสนุนสี 24 บิตซึ่งลดปริมาณลงตามความจำเป็นสำหรับเทอร์มินัล
การรองรับแบบพกพาสำหรับกราฟิก bitmapped โดยใช้ Sixel, Kitty และแม้แต่คอนโซล Linux Framebuffer
รองรับโปรโตคอลแป้นพิมพ์ที่ไม่คลุมเครือ
"โหมด TUI" ช่วยอำนวยความสะดวกในการใช้งานประสิทธิภาพสูงและไม่เลื่อนและเต็มหน้าจอ "โหมด CLI" รองรับเอาต์พุตการเลื่อนสำหรับยูทิลิตี้เชลล์ แต่ด้วยพลังเต็มรูปแบบของ notcurses
มันได้รับอนุญาตจาก Apache2 อย่างครบถ้วนซึ่งตรงข้ามกับละครในการกระทำหลายอย่างที่เป็นใบอนุญาต NCurses (หลังสรุปว่า "เป็นการคืนค่า MIT-X11")
ส่วนใหญ่ข้างต้นสามารถมีกับ ncurses แต่พวกเขาไม่ใช่สิ่งที่ NCurses ถูก ออกแบบ มา ในทางกลับกันหากคุณกำลังกำหนดเป้าหมายแอปพลิเคชันอุตสาหกรรมหรือที่สำคัญหรือต้องการได้รับประโยชน์จากความน่าเชื่อถือที่ผ่านการทดสอบตามเวลาและการพกพาคุณควรใช้ห้องสมุดที่ดีทั้งหมด
โดยทั่วไปแล้วเวอร์ชันขั้นต่ำระบุเวอร์ชันที่เก่าแก่ที่สุดที่ฉันได้ทดสอบด้วย อาจเป็นไปได้ที่จะใช้เวอร์ชันเก่า แจ้งให้เราทราบถึงความสำเร็จใด ๆ !
ข้อมูลเพิ่มเติมเกี่ยวกับอาคารและการติดตั้งมีอยู่ใน Install.md
หากคุณต้องการใช้ภาษาอื่นที่ไม่ใช่ C เพื่อทำงานกับ Notcurses มีการห่อหุ้มจำนวนมาก มีหลายแห่งที่รวมอยู่ในที่เก็บนี้ในขณะที่พื้นที่อื่นเป็นภายนอก
| ภาษา | ตะกั่ว | ที่เก็บ |
|---|---|---|
| อาดา | Jeremy Grosser | Jeremygrosser/Notcursesada |
| C ++ | Marek Habersack, Nick Black | ภายใน |
| โผ | เนลสันเฟอร์นันเดซ | kascote/dart_notcurses |
| จูเลีย | Dheepak Krishnamurthy | kdheepak/notcurses.jl |
| ไม่มีความสุข | Michael S. Bradley, Jr. | Michaelsbradleyjr/nim-notcurses |
| งูหลาม | นิคแบล็ก | ภายใน |
| งูหลาม | igo95862 | ภายใน |
| สนิม | José Luis Cruz | Dankamongmen/libnotcurses-sys |
| ซิก | Jakub Dundalek | Dundalek/notcurses-zig-example |
มีการติดตั้ง Nine Executables เป็นส่วนหนึ่งของ Notcurses:
ncls : ls ที่แสดงมัลติมีเดียในเทอร์มินัลncneofetch : neofetch ripoffncplayer : แสดงภาพสื่อภาพ (รูปภาพ/วิดีโอ)nctetris : โคลน tetrisnotcurses-demo : รหัสสาธิตบางอย่างnotcurses-info : ตรวจจับและพิมพ์ความสามารถของเทอร์มินัล/การวินิจฉัยnotcurses-input : ถอดรหัสและพิมพ์คีย์กดnotcurses-tester : การทดสอบหน่วยtfman : เบราว์เซอร์คู่มือ Swank ในการเรียกใช้ notcurses-demo จากการชำระเงินให้ให้ไดเรกทอรี data ผ่านอาร์กิวเมนต์ -p การสาธิตที่ต้องการไฟล์ข้อมูลจะยกเลิกเป็นอย่างอื่น ความล่าช้าพื้นฐานที่ใช้ใน notcurses-demo สามารถเปลี่ยนแปลงได้ด้วย -d โดยยอมรับตัวคูณจุดลอยตัว ค่าที่น้อยกว่า 1 จะเพิ่มความเร็วในการสาธิตในขณะที่ค่าที่มากกว่า 1 จะชะลอตัวลง
notcurses-tester นั้นต้องการ data ที่มีไฟล์ข้อมูลที่จำเป็นต้องระบุด้วย -p มันสามารถเรียกใช้ด้วยตัวเองหรือผ่าน make test
ด้วย -DUSE_PANDOC=on (ค่าเริ่มต้น) ชุดหน้าผู้ชายและ XHTML เต็มรูปแบบจะถูกสร้างขึ้นจาก doc/man เอกสาร Markdown ต่อไปนี้รวมโดยตรง:
TERM และอีมูเลเตอร์เทอร์มินัลต่างๆหากคุณ (เข้าใจ) ต้องการหลีกเลี่ยงสแต็ค Pandoc ขนาดใหญ่ แต่ยังคงเพลิดเพลินกับหน้าด้วยตนเองฉันเผยแพร่ tarball กับ Man/XHTML ที่สร้างขึ้นพร้อมกับการเปิดตัวแต่ละครั้ง ดาวน์โหลดและติดตั้งเนื้อหาตามที่คุณเห็นว่าเหมาะสม
หากตัวแปร TERM ศัพท์ของคุณไม่ถูกต้องหรือคำจำกัดความของ TermInfo นั้นล้าสมัยคุณจะมีช่วงเวลาที่เลวร้ายมาก ใช้ เฉพาะ ค่า TERM ที่เหมาะสมสำหรับเทอร์มินัลของคุณ หากตัวแปรนี้ไม่ได้กำหนดหรือ Notcurses ไม่สามารถโหลดรายการ TermInfo ที่ระบุได้มันจะปฏิเสธที่จะเริ่มต้นและคุณจะไม่ไปที่ว่างในวันนี้
Notcurses สอบถามเทอร์มินัลในการเริ่มต้นทำให้สามารถใช้คุณสมบัติขั้นสูงบางอย่างตามเทอร์มินัลที่กำหนด (และแม้แต่เวอร์ชัน) อย่างไรก็ตามความสามารถขั้นพื้นฐานนั้นนำมาจาก TermInfo ดังนั้นถ้าคุณมีพูดคิตตี้ แต่ TERM=vt100 คุณจะสามารถวาดกราฟิกบิตแมป RGBA (แม้จะมีสิ่งต่าง ๆ แต่เป็นความฝันสำหรับ VT100) แต่ ไม่สามารถ ใช้หน้าจอสำรอง (แม้จะได้รับการสนับสนุนจากทุกรุ่นคิตตี้) ดังนั้น TERM และฐานข้อมูล TermInfo ที่ทันสมัยจึงยังคงมีความสำคัญ
ตรวจสอบให้แน่ใจว่าตัวแปรสภาพแวดล้อม LANG ของคุณถูกตั้งค่าเป็นสถานที่ที่เข้ารหัส UTF8 และสถานที่นี้ถูกสร้างขึ้น ซึ่งมักจะหมายถึง "[language]_[Countrycode].UTF-8" , เช่น en_US.UTF-8 ส่วนแรก ( en_US ) ควรมีอยู่เป็นไดเรกทอรีหรือ symlink ใน /usr/share/locales สิ่งนี้มักจะต้องมีการแก้ไข /etc/locale.gen และเรียกใช้ locale-gen ในระบบ Debian สิ่งนี้สามารถทำได้ด้วย dpkg-reconfigure locales และเปิดใช้งานสถานที่ที่ต้องการ สถานที่เริ่มต้นจะถูกเก็บไว้ที่ใดที่หนึ่งเช่น /etc/default/locale
หากเทอร์มินัลของคุณมีตัวเลือกเกี่ยวกับการตีความเริ่มต้นของ "อักขระความกว้างที่คลุมเครือ" (นี่เป็นคำศัพท์ทางเทคนิคจาก Unicode) ให้แน่ใจว่ามันถูกตั้งค่าให้ กว้าง ไม่ แคบ (ถ้าไม่ได้ผล
หากเทอร์มินัลของคุณรองรับสี RGB 3x8bit ผ่าน setaf และ setbf (เทอร์มินัลที่ทันสมัยที่สุด) แต่การส่งออกความสามารถของ RGB หรือ Tc TermInfo คุณสามารถส่งออกตัวแปรสภาพแวดล้อม COLORTERM เป็น truecolor หรือ 24bit โปรดทราบว่าเทอร์มินัลบางตัวยอมรับข้อกำหนด 24 บิต แต่แมปให้มีสีน้อยลง RGB เปิดใช้งานอย่างไม่มีเงื่อนไขเมื่อใดก็ตามที่มีการระบุเทอร์มินัลที่ทันสมัยส่วนใหญ่
ความกว้างของร่ายมนตร์และแน่นอนว่าสัญลักษณ์สามารถแสดงได้ทั้งหมดนั้นขึ้นอยู่กับการกำหนดค่าตัวอักษรหรือไม่ ตามหลักการแล้วการกำหนดค่าฟอนต์ของคุณมีสัญลักษณ์สำหรับทุก Unicode EGC และความกว้างของ Glyph แต่ละอันตรงกับผลลัพธ์ wcswidth() ของฟังก์ชัน POSIX สำหรับ EGC หากไม่เป็นเช่นนั้นคุณจะได้รับช่องว่างหรือ� (U+FFFD ตัวอักษรทดแทน) สำหรับอักขระที่หายไปและอักขระที่ตามมาในบรรทัดอาจถูกวางผิดที่
มันคุ้มค่าที่จะรู้ว่าเทอร์มินัลหลายตัววาดตัวละครบล็อกโดยตรงแทนที่จะโหลดจากตัวอักษร นี่เป็นที่ต้องการโดยทั่วไป Quadrants และ Sextants ไม่ใช่สถานที่แสดงให้เห็นถึงความสามารถในการออกแบบของคุณ ในการตรวจสอบการเรนเดอร์ของตัวละครการวาดภาพของคุณให้เรียกใช้ notcurses-info ผลลัพธ์ที่ต้องการควรมีลักษณะเช่นนี้:
หากสิ่งต่าง ๆ แตกหักหรือดูเหมือนจะขาดความดแจ่มใส โปรด ปรึกษาส่วนบันทึกสิ่งแวดล้อม! คุณ ต้องการ TERM และคำจำกัดความ LANG ถูกต้องและอาจต้องการ COLORTERM
NCOPTION_CLI_MODE (นามแฝงสำหรับธงจริงหลายตัวดู notcurses_init(1) สำหรับข้อมูลเพิ่มเติม) คุณยังต้องแสดงผลอย่างชัดเจน-DUSE_MULTIMEDIA=nonenotcurses_core_init() หรือ ncdirect_core_init() แทน notcurses_init() / ncdirect_init() และเชื่อมโยงกับ -lnotcurses-core แอปพลิเคชันของคุณจะเริ่มเร็วขึ้นไม่กี่มิลลิวินาที ที่สำคัญกว่านั้นจะเชื่อมโยงกับการติดตั้ง notcurses ขั้นต่ำnotcurses-demo (และอาจเป็นโปรแกรมอื่น ๆ สองสามรายการ) ใช้ -DUSE_CXX=offTERM ที่ถูกต้องรองรับเทอร์มินัลฮาร์ดแวร์จำนวนมาก โดยทั่วไปหากรายการฐานข้อมูล TERMINFO บ่งชี้ถึงความล่าช้าที่จำเป็น NOTCURSES จะไม่สนับสนุนเทอร์มินัลนั้นอย่างถูกต้อง เป็นที่ทราบกันดีว่า Notcurses สามารถขับ VT320 และ VT340 รวมถึงกราฟิก Sixel ในช่วงหลังNCBLIT_PIXEL ในทำนองเดียวกัน sextants ( NCBLIT_3x2 ) จะไม่ถูกใช้โดยไม่มีการสนับสนุน Unicode 13 ฯลฯ ncvisual_blit() จะใช้ blitter ที่ดีที่สุดที่มีอยู่เว้นแต่ NCVISUAL_OPTION_NODEGRADE (ในกรณีนี้จะล้มเหลว)screenscreen ไม่รองรับสี RGB (อย่างน้อย ณ 4.08.00); หากคุณมี COLORTERM ที่กำหนดไว้คุณจะมีช่วงเวลาที่ไม่ดี หากคุณมี screen ที่รวบรวมด้วย --enable-colors256 ลองส่งออก TERM=screen-256color เมื่อเทียบกับ TERM=screenmoshNC_ENTER NCTYPE_RELEASE ทันทีและโดยทั่วไปแล้วแต่ละคีย์จะส่งผลให้อินพุตอย่างน้อยสองอินพุตNCKEY_RESIZE จนกว่าฉันจะกดปุ่มอื่นSIGWINCH ในบางเธรดและเธรดนั้นได้รับสัญญาณแทนเธรดที่เรียกว่า notcurses_getc_blocking() เป็นผล poll() ไม่ถูกขัดจังหวะ โทร pthread_sigmask() ก่อนวางไข่เธรดใด ๆNotCurses destructor ทำงานเมื่อฉันกลับมาจาก main() ได้อย่างไรNotCurses ของคุณถูกกำหนดขอบเขตเป็น main() )ncplane_move_yx() ให้ย้ายไปอยู่ใต้ระนาบทึบแสงด้วย ncplane_move_below() หรือย้ายออกไปด้วย ncplane_reparent()ncplane_box_yx() ? คุณเกลียด orthogonality คุณหมองคล้ำหรือไม่?ncplane_box() และเพื่อนมีข้อโต้แย้งมากเกินไปคุณมอนสเตอร์graphics/qr-code-generatorcmake -DCMAKE_REQUIRED_INCLUDES=/usr/local/include สิ่งนี้ถูกส่งผ่านโดย bsd.port.mkLANG ของคุณนั้นอยู่ในระดับต่ำกว่าหรือกำหนดอย่างไม่ถูกต้องหรือสถานที่ที่จำเป็นไม่ได้อยู่ในเครื่องของคุณ (เป็นไปได้ที่คุณจะจัดหา NCOPTION_INHIBIT_SETLOCALE อย่างชัดเจน แต่ไม่เคยเรียกว่า setlocale(3) ซึ่งในกรณีนี้ไม่ได้ทำ)ncplane เมื่อใช้ nccell ทำไมหลังไม่ถือตัวชี้ไปที่อดีต?nccell ยังต้องมีขนาดเล็กที่สุดเท่าที่จะเป็นไปได้และคุณมักจะมี ncplane ที่มีประโยชน์หากคุณได้รับการอ้างอิงถึง nccell ที่ถูกต้องอยู่ดีvalgrind /Asan และมันแสดงให้เห็นถึงการรั่วไหลของหน่วยความจำจาก libtinfo.so สิ่งที่เกิดขึ้น?notcurses-demo แต่หมายเลขตารางของฉันไม่ตรงกับหมายเลขแบนเนอร์ Notcurses คุณ Charlatannotcurses-demo แสดงผลหลายเฟรมนอกเหนือจากการสาธิตจริงnotcurses_stop() / ncdirect_stop() บนเส้นทางที่ออกทั้งหมดรวมถึงสัญญาณที่ร้ายแรง (โปรดทราบว่าโดยค่าเริ่มต้น Notcurses ติดตั้งตัวจัดการสำหรับสัญญาณที่ร้ายแรงที่สุดที่จะทำสิ่งนี้)ncdirect_readline() ยังคงมีอยู่และตอนนี้ใช้งานได้จริงแม้จะไม่มี Libreadline แม้ว่ามันจะไม่ใช่ Libreadline ที่แน่นอน ไม่ว่าในกรณีใดคุณอาจจะดีกว่าโดยใช้โหมด CLI กับ ncreaderpkg-config --static --libs notcurses (หรือ --libs notcurses-core ) เพื่อค้นหาพวกเขาmintty ด้วย -P on อาร์กิวเมนต์หรือส่งออก MSYS=enable_pcon ก่อนที่จะเปิดตัวCOLORTERM=24bit ทุกที่หรือไม่?SendEnv COLORTERM ลงใน .ssh/config และ AcceptEnv COLORTERM เป็น sshd_config บนเซิร์ฟเวอร์ระยะไกล ใช่สิ่งนี้อาจต้องใช้รูทบนเซิร์ฟเวอร์ระยะไกล อย่าโทษฉันผู้ชาย ฉันไม่ได้ทำncvisual จากหน่วยความจำ RGBA โดยใช้ ncvisual_from_rgba()NCSTYLE_REVERSE ?ncchannels_reverse() เพื่อกลับสีด้านหน้าและพื้นหลังได้อย่างถูกต้องncsubprocnotcurses_refresh() หลังจาก notcurses_init() ส่งคืนสำเร็จ“ ศิลปกรรมของเราได้รับการพัฒนาประเภทและการใช้งานของพวกเขาได้รับการจัดตั้งขึ้นในบางครั้งที่แตกต่างจากปัจจุบันโดยผู้ชายที่มีอำนาจในการกระทำสิ่งต่าง ๆ ไม่มีนัยสำคัญเมื่อเปรียบเทียบกับของเรา แต่การเติบโตที่น่าทึ่งของเทคนิคของเราความสามารถในการปรับตัวและความแม่นยำที่พวกเขาบรรลุความคิดและนิสัยที่พวกเขากำลังสร้างทำให้เป็นความมั่นใจว่า การเปลี่ยนแปลงที่ลึกซึ้งกำลังเกิดขึ้นในงานฝีมือโบราณของความสวยงาม ” - Paul Valéry