Caret square bracket bracket square A ^ [[A - Apa artinya?

13

Maaf jika ini sudah ditanyakan, tetapi saya tidak tahu bagaimana saya bisa mengetahui ini sendiri - ketika saya mencari "^ [[A" di mesin pencari apa pun, ia mengabaikan bagian "^ [[" secara bersamaan.

Pokoknya, pertanyaan saya: Terkadang di terminal (pada Mac) ketika saya menekan tombol panah, karakter "^ [[A", "^ [[B", "^ [[C" atau "^ [[D" muncul . Sepertinya saya ingat pernah bertemu tahun lalu ketika menggunakan (kemungkinan besar) DOS juga dan saya pikir itu terjadi lebih sering juga.

Mengapa ini terjadi dan apa artinya?

Phill
sumber

Jawaban:

20

Ini adalah kode pelarian ANSI . Yang ^[mewakili karakter ESC (melarikan diri), yang berikutnya [adalah tanda kurung siku kiri yang sebenarnya, dan surat itu menunjukkan fungsi kode melarikan diri. Bagian Esc[ini disebut CSI (Control Sequence Introducer). Jadi urutannya CSI Aberarti panah ke atas, atau CUU (CUrsor Up).

Bagaimanapun, skema ini sudah ada sejak zaman terminal display VT100 (diperkenalkan pada 1978). Beberapa urutan pelarian yang digunakan oleh VT100 distandarisasi oleh ANSI pada awal 1980-an dan tetap umum digunakan sejak saat itu.

Biasanya, ketika Anda menekan tombol panah, beberapa program (katakanlah shell) mendengarkan dan dapat menindaklanjutinya. Jadi ketika Anda menekan panah ke atas, itu akan menggulung kembali ke riwayat perintah Anda. Namun, jika suatu program sedang berjalan yang tidak memahami urutan pelolosan untuk tombol panah, maka biasanya program tersebut akan kembali digaungkan ke terminal seperti halnya tombol lain yang mungkin Anda tekan. Jadi itu sebabnya Anda terkadang melihat ^[[Aapakah Anda menekan tombol panah atas.

Greg Hewgill
sumber
Patut juga menunjukkan bahwa ^ adalah konvensi UNIX yang umum untuk menunjukkan "kontrol" di terminal. Misalnya, jika Anda menekan Ctrl + A dan itu harus diabaikan dengan cara yang sama itu akan ditampilkan sebagai "^ A". Ctrl + [sebenarnya adalah sinonim untuk karakter pelarian. Kebetulan, apa yang membuat ini terjadi? perangkat lunak mana yang memutuskan untuk mencetak tanda sisipan? Apakah emulator terminal itu sendiri, atau sesuatu yang tidak saya sadari?
Muzer
@Muzer kernel itu sendiri melakukan format caret dari karakter yang di-echo. Fitur ini dapat dimatikan denganstty -echoctl
Kernel? Menarik, saya tidak tahu itu berjalan sedalam itu (meskipun jika ditinjau kembali, itu seharusnya sudah jelas, karena itu bahkan terjadi pada tahap awal bootup!).
Muzer