GNU Okuma Hattı - GNU Readline

GNU Okuma Hattı
Heckert GNU white.svg
Orijinal yazar(lar) Brian Fox
Geliştirici(ler) Chet Ramey
İlk sürüm 1989 ; 32 yıl önce ( 1989 )
kararlı sürüm
8.1 / 7 Aralık 2020 ; 10 ay önce ( 2020-12-07 )
depo
Yazılmış C
Tip Kütüphane
Lisans GNU Genel Kamu Lisansı
İnternet sitesi tiswww .case .edu / php / chet / taleb / rltop .html

GNU Readline , Bash gibi bir komut satırı arabirimine sahip etkileşimli programlar için satır düzenleme ve geçmiş özellikleri sağlayan bir yazılım kitaplığıdır . Şu anda Chet Ramey tarafından GNU Projesinin bir parçası olarak sürdürülmektedir .

Kullanıcıların metin imlecini hareket ettirmesine, komut geçmişinde arama yapmasına , bir öldürme halkasını (kopyala/yapıştır panosunun daha esnek bir versiyonu) kontrol etmesine ve bir metin terminalinde sekme tamamlamayı kullanmasına olanak tanır . Bir platformlar arası kitaplık olarak readline, çeşitli sistemlerdeki uygulamaların aynı satır düzenleme davranışı sergilemesine izin verir.

Düzenleme modları

Readline, klavye girişinin editör komutları olarak nasıl yorumlanacağını belirleyen hem Emacs hem de vi düzenleme modlarını destekler. Bkz vi ve Emacs arasında Editör savaş # Farklar .

Emacs klavye kısayolları

Emacs düzenleme modu anahtar bağlantıları , metin düzenleyici Emacs'tan alınır .

Bazı sistemlerde, kısayol başka bir kısayolla çakıştığı için Escyerine kullanılmalıdır . Örneğin, pres + içinde XFCE terminal emülatörü penceresinde imleci bir kelime ileri hareket etmez, ama bu öykünücüsü'nın ayarlarında devre dışı bırakılmadığı sürece terminal penceresinin menüsündeki "Dosya" harekete geçirir. AltAltAltf

  • Tab ↹ : İmleç konumundan itibaren otomatik tamamlama .
  • Ctrl+ a : İmleci satır başlangıcına taşır (tuşuna eşdeğer Home).
  • Ctrl+ b : İmleci bir karakter geri hareket ettirir (tuşuna eşdeğer ).
  • Ctrl+ c : Sinyal gönderir SIGINT ile uçbirimsiler geçerli görev, iptal eder ve onu kapatır için.
  • Ctrl+d
    • Mevcut kabuğu kapatan (bir seçenek tarafından devre dışı bırakılmadığı sürece) bir EOF işaretçisi gönderir (komuta eşdeğerdir exit). (Yalnızca geçerli satırda metin yoksa)
    • Geçerli satırda metin varsa, geçerli karakteri siler (daha sonra anahtarın eşdeğeri Delete).
  • Ctrl+ e : ( end ) imleci satır sonuna taşır ( tuşuna eşdeğerdir End).
  • Ctrl+ f : İmleci bir karakter ileri götürür (tuşuna eşdeğer ).
  • Ctrl+ g : Geri aramayı iptal edin ve orijinal satırı geri yükleyin.
  • Ctrl+ h : Önceki karakteri siler (geri al ile aynı).
  • Ctrl+ i : Sekme tuşuna eşdeğerdir.
  • Ctrl+ j : Giriş tuşuna eşdeğerdir.
  • Ctrl+ k : İmleçten sonraki satır içeriğini siler ve panoya kopyalar .
  • Ctrl+ l : Ekran içeriğini temizler (komuta eşdeğer clear).
  • Ctrl+ n : ( next ) sonraki komutu geri çağırır (key ile eşdeğer ).
  • Ctrl+ o : Geçmişten bulunan komutu yürütür ve düzenleme için geçmişten geçerli satıra göre sonraki satırı getirir.
  • Ctrl+ p : ( önceki ) önceki komutu geri çağırır ( tuşuna eşdeğerdir ).
  • Ctrl+ r : (ters arama) belirtilen karakterleri içeren son komutu geri çağırır. İkinci Ctrl+ r, aramaya karşılık gelen bir sonraki ön komutu hatırlatır
  • Ctrl+ s : Geriye doğru aramanın bir sonraki daha yakın tarihli komutuna geri dönün (bu komut aynı zamanda XOFF'unu da başlattığından, onu bir terminalden çalıştırmamaya dikkat edin). Bu XOFF ayarını değiştirdiyseniz, geri dönmek için Ctrl+ qdüğmesini kullanın .
  • Ctrl+ t : Önceki iki karakterin yerini değiştirin.
  • Ctrl+ u : İmleçten önceki satır içeriğini temizler ve panoya kopyalar .
  • Ctrl+ v : Bir sonraki giriş aynı zamanda bir kontrol dizisiyse, harfi harfine yazın (örn. * Ctrl+ v Ctrl+ h"^H", değişmez bir geri al.)
  • Ctrl+ w : İmleçten önceki sözcüğü siler ve panoya kopyalar .
  • Ctrl+ x Ctrl+ e : $EDITOR programındaki mevcut satırı veya tanımlanmamışsa vi'yi düzenler.
  • Ctrl+ x Ctrl+ r : inputrc dosyasının içeriğini okuyun ve orada bulunan tüm bağlamaları veya değişken atamaları dahil edin.
  • Ctrl+ x Ctrl+ u : Artımlı geri alma, her satır için ayrı ayrı hatırlanır.
  • Ctrl+ x Ctrl+ v : Geçerli Bash örneği hakkında sürüm bilgilerini görüntüleyin.
  • Ctrl+ x Ctrl+ x : İmleci eski konumuyla değiştirir. (Cx, çünkü x'in bir kesişme şekli vardır).
  • Ctrl+ y : ( yank ) pano içeriğini imleç konumundan ekler .
  • Ctrl+ z : SIGTSTP sinyalini , onu askıya alan geçerli göreve gönderir . Arka planda yürütmek için bir girilebilir bg. Geri getirmek için arka plan veya askıya alma fg ['process name or job id']( ön plan ) verilebilir.
  • Ctrl+ _ : Artımlı geri alma, her satır için ayrı ayrı hatırlanır.
  • Alt+ b : ( geri ) imleci bir kelime geri hareket ettirir.
  • Alt+ c : İmlecin altındaki karakteri büyük harf yapar ve kelimenin sonuna gider.
  • Alt+ d : İmleçten sonra sözcüğü keser.
  • Alt+ f : ( ileri ) imleci bir kelime ileri taşır.
  • Alt+ l : İmlecin bulunduğu konumdan geçerli kelimenin sonuna kadar her karakterin büyük/küçük harf durumunu küçültür.
  • Alt+ r : Değişiklikleri iptal eder ve satırı geçmişte olduğu gibi geri getirir.
  • Alt+ u : İmleç konumundan geçerli kelimenin sonuna kadar her karakteri büyük harf yapar.
  • Alt+ . : Önceki komuta son argümanı ekleyin (önceki geçmiş girişinin son kelimesi).

GNU Readline'ın lisansı olarak GPL seçimi

GNU Readline, GNU Genel Kamu Lisansı (GPL) kapsamında lisanslanan ücretsiz bir yazılım kitaplığı olmasıyla dikkat çekmektedir . Özgür yazılım kitaplıkları çok daha sık olarak GNU Kısıtlı Genel Kamu Lisansı (LGPL) altında lisanslanır , örneğin GNU C Kitaplığı , GNU gettext ve FLTK . LGPL lisanslı bir kitaplığa bağlanmayı seçen bir uygulama geliştiricisi, uygulama için herhangi bir lisansı kullanabilir. Ancak Readline gibi GPL lisanslı bir kitaplığa bağlantı, elde edilen birleşik uygulamanın tamamının dağıtıldığında GPL kapsamında lisanslanmasını ve GPL'nin 5. bölümüne uymasını gerektirir.

Bu lisans, yazılımı GPL'ye geçmeye teşvik edeceği umuduyla FSF tarafından seçildi. GNU Readline'ın copyleft koşullarına uymak için lisansını değiştiren bir uygulamanın önemli bir örneği , Common Lisp'in bir uygulaması olan CLISP'dir . Aslen 1987 yılında yayımlanan bu CLISP orijinal yazarlarından biri Bruno Haible ve aralarında bir e-posta alışverişi sonra, 1992 yılında GPL lisansı değiştirildi Richard Stallman Stallman CLISP içinde taleb bağlanması Haible için gerekli anlamına geliyordu iddia ettiği, re -readline kullanan CLISP uygulamasını dağıtmak isterse, GPL kapsamında CLISP lisansı alır.

Başka bir yanıt, bunu bazı projelerde kullanmamak, metin girişinin düzenleme için ilkel Unix terminal sürücüsünü kullanmasını sağlamak olmuştur.

Alternatif kitaplıklar

Komut satırı düzenleme işlevini uygulamak isteyen ancak GPL olmayan bir lisansla yayımlanmak isteyen yazılım projeleri tarafından kullanılabilecekleri için diğer lisanslarla birlikte alternatif kitaplıklar oluşturulmuştur.

  • Birçok BSD sistemi, BSD lisanslı bir libedit'e sahiptir . MariaDB ve PHP , kullanıcının derleme sırasında GNU Readline ile mi yoksa libedit ile mi bağlanacağını seçmesine izin verir. MacOS sitesindeki libreadline aslında bir takoz olarak bilinen bir düzenleme libedit fazla editline .
  • linenoise , satır düzenleme işlevleri sağlayan küçük bir C kütüphanesidir.
  • Haskeline , Haskell için okuma satırı benzeri bir kütüphanedir. Esas olarak Glasgow Haskell Derleyicisi için yazılmıştır , ancak satır düzenleme hizmetlerine ihtiyaç duyan diğer Haskell projelerinde de mevcuttur.

Basit kod

Aşağıdaki kod olan C ve geçirilerek taleb kütüphaneye karşı bağlı olmalıdır -lreadline derleyici bayrak:

#include <stdlib.h>
#include <stdio.h>
#include <readline/readline.h>
#include <readline/history.h>

int main()
{
    // Configure readline to auto-complete paths when the tab key is hit.
    rl_bind_key('\t', rl_complete);

    while (1) {
        // Display prompt and read input
        char* input = readline("prompt> ");

        // Check for EOF.
        if (!input)
            break;

        // Add input to readline history.
        add_history(input);

        // Do stuff...

        // Free buffer that was allocated by readline
        free(input);
    }
    return 0;
}

bağlamalar

Readline için dil bağlamaları sağlayan C olmayan programlama dilleri şunları içerir:

  • Python'un yerleşik readlinemodülü;
  • Node.js'nin yerleşik readlinemodülü;
  • Ruby'nin yerleşik readlinemodülü;
  • Perl'in üçüncü taraf (CPAN) Term::ReadLinemodülü, özellikle Term::ReadLine::GnuGNU ReadLine için.

Readline alternatifleri için destek, bu bağlamalar arasında farklılık gösterir.

Notlar

Referanslar

Dış bağlantılar