สำหรับ 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)
หรือการแก้ไขสี่เหลี่ยม?)