สำหรับ MacBook Pro ที่ใช้ OS X Lion 10.7.4 ดูเหมือนว่ามีปัญหาเกี่ยวกับคีย์บอร์ด ฉันสังเกตเห็นปัญหานี้เป็นครั้งแรกเมื่อฉันพยายามใช้การเชื่อมโยงปุ่มเริ่มต้นเพื่อดำเนินการmark-sexpและquery-replace-regexpใน emacs ซึ่งถูกผูกไว้ตามลำดับC-M-@และC-M-%ตามค่าเริ่มต้น เมื่อฉันใช้ emacs มากฉันก็คิดถึงคุณสมบัติที่ทรงพลังทั้งสองนี้มาก
เนื่องจากฉันไม่เคยมีประสบการณ์เกี่ยวกับประเภทเทอร์มินัล ฯลฯ ฉันจึงทำการดีบักอย่างง่าย ๆ ภายใน emacs
C-M-fและC-M-bทำงานตามที่คาดไว้ ดังนั้นการควบคุมและตัวเลือกทำงานร่วมกันได้ดีM-%,M-<และM->การทำงานตามที่คาดไว้ ดังนั้นตัวเลือกและเปลี่ยนทำงานร่วมกันได้ดีC-S-backspaceไม่สำเร็จ. (แต่ฉันไม่เคยลองคำสั่งนี้มาก่อนครั้งแรกที่ฉันพบมันในวันนี้เมื่อฉันพบมันในคู่มือ emacs) แต่C-@ทำงานได้ตามที่คาดไว้ ดังนั้นการควบคุมและการเปลี่ยนแปลงอาจทำงานร่วมกันได้ดี- ถ้าฉันไม่ผิดคำสั่ง
digit-argumentที่ถูกผูกไว้C-9,C-8ฯลฯ ปุ่มเหล่านี้ไม่ทำงานเช่นกัน ฉันได้ตรวจสอบให้แน่ใจว่าใน System Preferences.app ฉันได้ปิดใช้งานคีย์เหล่านี้เพื่อทำการสลับช่องว่าง
ในการตั้งค่า Terminal.app ฉันได้เลือก "ใช้ตัวเลือกเป็นเมตาคีย์" เนื่องจากมันทำให้การพิมพ์ปุ่มลัด emacs ง่ายขึ้น ฉันพยายามปิดการใช้งานตัวเลือกนี้และใช้ ESC แต่ก็ยังไม่มีประโยชน์ ความคิดใด ๆ
PS ฉันเปิดตัว X11.app และในหน้าต่าง xterm ฉันเริ่ม emacs ใช้ ESC เป็นเมตาดาต้าC-M-%และC-M-@ทำงานได้อย่างสมบูรณ์ ใน Emacs เวอร์ชัน Cocoa ทั้งสองทำงานได้อย่างสมบูรณ์แบบเช่นกัน ดังนั้นฉันคิดว่ามันเป็นข้อผิดพลาด Terminal.app หรืออาจจะมีการตั้งค่าหรือสวิตช์การกำหนดค่าฉันสามารถปรับแต่งเพื่อให้งานนี้ใน Terminal.app?
และนี่คือผลลัพธ์ของstty -aเชลล์ emacs หวังว่ามันจะมีประโยชน์ ...
bash-3.2$ stty -a
speed 9600 baud; 0 rows; 0 columns;
lflags: icanon isig iexten -echo echoe -echok echoke -echonl echoctl
-echoprt -altwerase -noflsh -tostop -flusho -pendin -nokerninfo
-extproc
iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel -iutf8
-ignbrk brkint -inpck -ignpar -parmrk
oflags: opost -onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow
-dtrflow -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
eol2 = <undef>; erase = <undef>; intr = ^C; kill = <undef>;
lnext = ^V; min = 1; quit = ^\; reprint = ^R; start = ^Q;
status = ^T; stop = ^S; susp = ^Z; time = 0; werase = ^W;
bash-3.2$
คำสั่งเดียวกันโดยตรงจากเชลล์:
$ stty -a
speed 9600 baud; 24 rows; 80 columns;
lflags: icanon isig iexten echo echoe -echok echoke -echonl echoctl
-echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
-extproc
iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel iutf8
-ignbrk brkint -inpck -ignpar -parmrk
oflags: opost onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow
-dtrflow -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
eol2 = <undef>; erase = ^?; intr = ^C; kill = ^U; lnext = ^V;
min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
stop = ^S; susp = ^Z; time = 0; werase = ^W;
$
(ด้านข้างแสดงความคิดเห็น: ดูเหมือนแปลกที่ไวยากรณ์สำหรับการป้องกันรหัสสี่ช่องว่างก่อนที่ผู้ใช้ StackExchange ทั้งหมดคาดว่าจะทราบวิธีการใช้. paste(1), sed(1)หรือการแก้ไขสี่เหลี่ยม?)