ฉันคิดว่าทุบตีจะสะดุดความผิดปกติบางอย่างในวิธีการจัดการตัวละครที่เน้นเสียง คุณอาจต้องการที่จะคว้าข้าวโพดคั่วมาบ้างเพราะนี่จะเป็นเรื่องทางเทคนิคสักหน่อย ...
Unicode อนุญาตให้อักขระที่เน้นเสียงบางตัวสามารถแสดงได้หลายวิธี: เป็น "จุดรหัส" ที่แสดงถึงอักขระที่เน้นเสียงหรือเป็นชุดของจุดรหัสที่แสดงถึงตัวอักษรที่ไม่ได้รับการเน้นเสียงตามด้วยสำเนียง ตัวอย่างเช่น "ä" สามารถแสดงเป็น precomposed เป็น U + 00E4 (UTF-8 0xc3a4, อักษรตัวเล็กละติน 1 พร้อม diaeresis) หรือแยกย่อยเป็น U + 0061 U + 0308 (UTF-8 0x61cc88, ละตินอักษรตัวเล็ก + การรวม diaeresis )
HFS OS X + ของระบบแฟ้มที่ต้องใช้ชื่อไฟล์ทั้งหมดจะถูกเก็บไว้ใน UTF-8 เป็นตัวแทนของพวกเขาแบบฟอร์มการย่อยสลายอย่างเต็มที่ ในชื่อไฟล์ HFS + ต้องเข้ารหัส "ä" เป็น 0x61cc88 และต้องเข้ารหัส "ö" เป็น 0x6fcc88
ฉันค่อนข้างแน่ใจว่าสิ่งที่เกิดขึ้นที่นี่คือเมื่อคุณพิมพ์ "Näyttökuva.png" ที่บรรทัดคำสั่งจะเป็นการ "พิมพ์" อักขระในรูปแบบที่กำหนดไว้ล่วงหน้า เมื่อไฟล์ถูกสร้างขึ้นระบบไฟล์จะสลายตัวอักขระสำหรับการจัดเก็บ ทุกอย่างเรียบร้อยดี แต่เมื่อคุณพยายามใช้การกรอกข้อมูลในแท็บเริ่มต้นด้วย "Nä" ฉันคิดว่า bash ไม่สามารถย่อยสลาย "ä" ก่อนค้นหาการจับคู่และแน่นอนว่ามันไม่พบอะไรเลย
เพื่อแสดงให้เห็นถึงความแตกต่างนี่คือตัวอย่างของการเข้ารหัสที่ใช้เมื่อฉันพิมพ์ "Näyttökuva.png" ที่บรรทัดคำสั่งเปรียบเทียบกับสิ่งที่ใช้เมื่อฉันจัดเก็บเป็นชื่อไฟล์และใช้การเติมแท็บเพื่อเติมลงใน:
$ printf Näyttökuva.png | xxd # This time I pasted the it in from this web page
0000000: 4ec3 a479 7474 c3b6 6b75 7661 2e70 6e67 N..ytt..kuva.png
$ touch Näyttökuva.png # Also pasted from the web
$ printf Näyttökuva.png | xxd # This time I tab-completed it after N
0000000: 4e61 cc88 7974 746f cc88 6b75 7661 2e70 Na..ytto..kuva.p
0000010: 6e67 ng
ตอนนี้สำหรับเรื่องของตัวละครที่หลงทางเมื่อลบและเติมแท็บใหม่ฉันสงสัยว่ามันเกี่ยวข้องกันมาก โดยเฉพาะฉันคิดว่า bash คือ "การลบ" หนึ่งรหัสจุดต่อการกดปุ่มลบ แต่การลบหนึ่งอักขระจากหน้าต่างเทอร์มินัลต่อการกด เนื่องจากหนึ่งในอักขระที่ถูกลบ ("ö" ในเวลานี้) ประกอบด้วยจุดโค้ดสองจุด แต่มีเพียงอักขระเดียวเท่านั้นจอแสดงผลเทอร์มินัลจึงไม่ซิงค์กัน ลองแท็บเติมชื่อไฟล์ทั้งหมดแล้วลบกลับไปที่ "Näytt" จากนั้นทำการเติมแท็บใหม่: ทุบตีดูเหมือนว่าจะคิดว่ามีเพียงไดอะเรซิสที่รวมกันเท่านั้นที่ถูกลบไม่ใช่ทั้งหมด "ö" ดังนั้นจึงเพิ่มการรวมไดอะเรีย แต่คราวนี้มันติดกับ "t":
$ echo Näytẗkuva.png
Näyttökuva.png
โปรดทราบว่าเมื่อฉันกด Return จริงทุบตีมีชื่อไฟล์ทั้งหมดที่นั่น; มันเป็นเพียงจอแสดงผลเทอร์มินัลที่สับสน
TL; DR bash มีข้อบกพร่องบางอย่างในการจัดการอักขระเน้นเสียงที่แยกทิ้ง
แก้ไข: หลังจาก mulling บางฉันคิดว่าทางออกเต็มเพียงอย่างเดียวคือการแก้ไขทุบตี (/ รอให้นักพัฒนาเพื่อแก้ไข) อาจมีวิธีป้อนอักขระในรูปแบบย่อยสลาย แต่ฉันไม่รู้ว่าจะเป็นอย่างไร แต่ฉันพบวิธีแก้ไขบางส่วน:
ลากแล้วปล่อยไฟล์จาก Finder วางในรูปแบบที่ถูกต้อง เนื่องจาก Finder ได้รับชื่อไฟล์จากระบบไฟล์มันจะย่อยสลายไปแล้วดังนั้นจึงใช้งานได้
คุณสามารถเติมแท็บอักขระเน้นเสียงได้ ตัวอย่างเช่นหากคุณพิมพ์ "Na" และแท็บแท็บนั้นจะตรงกับ "Näyttökuva.png" เพราะการสลายตัวที่ยอมรับได้ของ "ä" เริ่มต้นด้วย "a" แต่ถ้าคุณมีไฟล์ชื่อ "Narwal.gif" ในไดเรกทอรีเดียวกันนั่นจะไม่เป็นประโยชน์มาก ...
ฉันยังไม่ได้ทดสอบสิ่งนี้ แต่ถ้าคุณผูกแท็บกับเมนูให้เสร็จสมบูรณ์แทนที่จะให้สมบูรณ์มันควรให้คุณแท็บผ่านการจับคู่ที่เป็นไปได้เพื่อให้คุณสามารถเลือกอันที่คุณต้องการแม้ว่าคุณจะไม่สามารถพิมพ์ตัวอักษรถัดไปได้ (หรือคุณสามารถผูกมันไว้กับการกดแป้นที่แตกต่างกันดังนั้นคุณสามารถใช้มันเมื่อคุณต้องการเท่านั้น)
สำหรับการแก้ไขปัญหาที่จอแสดงผลเทอร์มินัลหลุดจากการซิงค์คุณสามารถผูกบางสิ่งกับการวาดเส้นปัจจุบัน - มันจะไม่ป้องกันปัญหาที่จะเกิดขึ้น แต่มันจะให้วิธีในการซิงโครไนซ์จอแสดงผลอีกครั้ง
$ echo -e "N\xC3\xA4*" | ls
(สะท้อนให้Nä*
)Näyttökuva.png
ผลการ ปัญหายังมีอยู่กับเชลล์ตัวอื่นใน Mac OS; และด้วยเช่น zshls N
ได้รับการกรอกอัตโนมัติเพื่อls Na<0308>ytto<0308>kuva.png