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.