Linux'ta sqlite kabuk kullanırken garip klavye


9

Bir linux kutusu bağlı çukur macun kullanıyorum. Bash ile kullanmak, klavyem iyi performans gösteriyor, ancak sqlite shell (sqlite3 programı) kullanırken anahtarlarım çıldırıyor:

del=^[[3~
up=^[[A
left=^[[D
right=^[[C
down=^[[B

İşte benim env (ilgili bölüm):

TERM=linux
SHELL=/bin/bash
SHLVL=1
INPUTRC=/etc/inputrc

Anahtarlarımı normalde sqlite üzerinde, pencerelerde yaptığım gibi kullanmak istiyorum.

benim inputrc:

# do not bell on tab-completion
#set bell-style none

set meta-flag on
set input-meta on
set convert-meta off
set output-meta on

# Completed names which are symbolic links to
# directories have a slash appended.
set mark-symlinked-directories on

$if mode=emacs

# for linux console and RH/Debian xterm
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[5~": beginning-of-history
"\e[6~": end-of-history
"\e[3~": delete-char
"\e[2~": quoted-insert
"\e[5C": forward-word
"\e[5D": backward-word
"\e[1;5C": forward-word
"\e[1;5D": backward-word

# for rxvt
"\e[8~": end-of-line

# for non RH/Debian xterm, can't hurt for RH/DEbian xterm
"\eOH": beginning-of-line
"\eOF": end-of-line

# for freebsd console
"\e[H": beginning-of-line
"\e[F": end-of-line
$endif

Yanıtlar:


9

(FYI: bunlar çoğu terminalde bu tuşlar tarafından oluşturulan normal dizilerdir, bunları yorumlamak bir terminale veya programa / kitaplığa bağlıdır. Ctrl+ Tuşlarına vbasarak Endveya sonra karakter tuşuna veya başka bir karakter olmayan tuşa basarak bunu bir terminalde gösterebilirsiniz. ctrl-V, tam olarak ele alınacak bir sonraki tuşa basmayı ayarlar.)

sqlite3İkili dosya kullanmıyor readlineveya readline yapılandırması ( inputrc) bozuk gibi görünüyor (yine bashde iyi çalışıyorsa daha az olasıdır ).

Readline'ın aşağıdakilerle kullanılıp kullanılmadığını onaylayabilir / reddedebilirsiniz, eğer sizde değilse which sqlite3tam yolla değiştirin PATH.

ldd `which sqlite3` 

Eğer görürseniz libreadline.soya da benzer, o zaman gerekir böylece kontrol çalışması INPUTRCortam değişkeni, ~/.inputrcve /etc/inputrc. Bir var ince statik olarak (bağlı olan şans libreadline.aonay denemede kadar),:

strings -a `which sqlite3`| grep -i inputrc

Dizeleri ise INPUTRC, ~/.inputrcya /etc/inputrcmevcut o taleb statik olarak bağlantılı olduğunu ve çalışması gerekir gibi görünüyor.

(En iyi ihtimalle sadece bazı temel sürümleri alabilir ve bilgileri ( pragma compile_optionsdestekleniyorsa) derleyebilirsiniz sqlite3, ancak özelliklerin tam setini alamazsınız, bu yüzden ikili dosyaya gitmemiz gerekir.)

Ne okuma ne lddde stringsokuma çizgisi göstermezse, ikilinin desteklenmediği neredeyse kesindir.

Aksi takdirde şu yanıtı kontrol edin: Ubuntu'da readline destekli SQLite

sqlite3İkili programınızda readline desteğiniz yoksa aşağıdakilerden birini kullanarak silebilirsiniz :

rlwrap sqlite3
socat READLINE EXEC:"sqlite3"

Her ikisi de komut satırında bir geçmiş dosyası belirtmenize izin verir.

Ayrıca, bashreadline'ın beklendiği gibi çalıştığından ve yapılandırıldığından emin olmak için readline bağlarınızı kontrol edebilirsiniz :

bind -p | egrep '\[[ABCD3].?":'

Benim sistemde ( bash-3.xiçinde çalışan rxvt) alıyorum:

"\M-[3~": delete-char
"\M-[D": backward-char
"\M-[C": forward-char
"\M-[B": next-history
"\M-[A": previous-history

\M"meta" olduğundan kaçmaya eşdeğerdir , bu nedenle " \M-" a " \e" gördüğünüz yerde de çalışmalıdır. Yazdırıldığında, kaçış^[ (control- [) olarak temsil edilir .


Bu olasılığı dışlamak için bir göz atabilirseniz, inputrc'yi ekledim
— kurast

ve benim sqlite ldd libreadline göstermiyor
— kurast

1
Bu muhtemelen daha sonra realdine destek var, ya (sürüm yükseltme varsa çek uyumluluk sorunları) paket yükseltme veya kullanım vermez rlwrapbir çözüm olarak. Yanıt güncellendi.
— mr.spuratic

İkili dosyam statik olarak bağlı değil ve aynı zamanda bağlama çıktım seninki gibi Ancak, yüklememde rlwrap veya socat yok ve bunları yüklemek için kök erişimim yok.
— kurast
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.