Programlanabilir Tamamlama
Önceki VIII. Oylum - Komut Satırının Düzenlenmesi Sonraki
Programlanabilir Tamamlama
complete yerleşiği kullanılarak etkinleştirilen bir tamamlama belirtiminin (compspec) bir komutun bir argümanı için sözcük tamamlamasında kullanılmaya çalışılması halinde, programlanabilir tamamlama araçları çağrılmış olur.
Önce komut ismi saptanır. Bu komut için bir tamamlama belirtimi tanımlanmışsa, bu, sözcüğün olası tamamlamalarını üretir. Komut tam dosyayolu belirtilerek verilmişse ilk olarak bu dosyayoluna göre bir tamamlama belirtimi aranır. Tam dosyayolu için bir tamamlama belirtimi bulunmuyorsa, son / işaretinden sonraki kısım için bir tamamlama belirtimi bulunmaya çalışılır.
Bir tamamlama belirtimi bir kere bulunduktan sonra, onunla, uygun sözcüklerin bir listesi üretilir. Bir tamamlama belirtimi yoksa, Readline Sizin Yerinize Yazsın bölümünde bahsedilen öntanımlı Bash tamamlaması uygulanır.
İlk olarak, tamamlama belirtimi tarafından belirtilen eylemler kullanılır ve sadece sözcük ile başlayan tamamlamalar döndürülür. Dosyaismi veya dizin ismi tamamlaması için -f ya da -d seçeneği kullanıldığında, FIGNORE kabuk değişkeni uyuşanları süzmek için kullanılır.
Sonra, -G seçeneği ile bir dosyaismi yorumlama kalıbı verilerek tamamlamalar üretilir. Sözcüklerin üretildiği kalıbın tamamlanması istenen sözcükle eşleşmemesi gerekir. Eşleşenleri süzmekte GLOBIGNORE kabuk değişkeni değil, FIGNORE kabuk değişkeni kullanılır.
Sonra da -W seçeneğine argüman olarak dizgenin belirtildiği varsayılır. IFS özel değişkenindeki karakterler ayraç olarak kullanılarak dizge önce ayrıştırılır. Kabuk tarafından tırnaklama uygulanır. Her sözcüğe kaşlı ayraç yorumlaması, yaklaşık yorumlaması, parametre yorumlaması, komut ikamesi ve aritmetik yorumlama uygulanır. Sonuçlara sözcüklere ayırma uygulanır. Yorumlama sonuçları tamamlanması istenen sözcüğün önek olduğu sözcüklerdir ve eşleşen sözcükler olası tamamlamalardır.
Bu eşleşmeler üretildikten sonra, -F ve -C seçenekleri ile bir kabuk işlevi ya da bir komut çağrılır ve COMP_LINE ile COMP_POINT değişkenlerine değerleri atanır. Bir kabuk işlevi çağrılmışsa ayrıca COMP_CWORD ve COMP_WORDS değişkenleri de atanır. İşlev veya komut çağrıldığında, ilk argüman argümanları tamamlanacak olan komutun ismidir, ikinci argüman tamamlanan sözcüktür ve üçüncü argüman komut satırındaki tamamlanması istenen sözcüğü önceleyen sözcüktür. Tamamlanması istenen sözcüğe karşılık üretilen tamamlamalara süzme uygulanmaz; işlev ya da komut üretilen eşleşmelerle serbestçe tamamlanır.
Bir işlev ilk olarak` -F seçeneğine belirtilerek çağrılır. İşlev, eşleşmeleri üretmek için compgen yerleşiği dahil, her kabuk aracını kullanabilir. Olası tamamlamaları COMPREPLY dizi değişkenine yerleştirmelidir.
Sonra, komut ikamesine eşdeğer bir ortam içinde bir komut -C seçeneğine belirtilerek çağrılır. Bu, komut tamamlamalarının listesini her biri bir satırda standart çıktıya basmalıdır. Gerekliyse, tersbölü bir satırsonunu öncelemekte kullanılabilir.
Tüm olası tamamlamalar üretildikten sonra -X seçeneğine belirtilen bir süzgeç listeye uygulanır. Süzgeç dosyayolu yorumlaması için kullanılan bir kalıptır; kalıptaki bir & karakteri tamamlanması istenen sözcük metni ile değiştirilir. Kalıba uyan tamamlamalar listeden kaldırılacaktır. ! ile başlayan bir kalıp zıt eşleme yapar; bu durumda, kalıba uymayan tamamlamalar listeden kaldırılacaktır.
Son olarak, -P ve -S seçenekleri ile belirtilen bir önek ve bir sonek tamamlama listesinin her üyesine eklenir ve sonuç Readline tamamlama koduna olası tamamlamaların listesi olarak döndürülür.
Eğer öncelikle uygulanan eylemler bir eşleşme üretmezse ve tamamlama belirtimi tanımlanırken complete ile -o dirnames seçeneği verilmişse, dizin ismi tamamlanmaya çalışılır.
Eğer tamamlama belirtimi tanımlandığında -o plusdirs seçeneği complete komutuna sağlanmışsa dizin ismi tamamlanmaya çalışılır ve eşleşenler diğer eylemlerin sonuçlarına eklenir.
Öntanımlı olarak, bir tamamlama belirtimi varsa, onun ürettiği her ne varsa olası tamamlamaların bir tam kümesi olarak tamamlama koduna döner. Öntanımlı Bash tamamlamaları uygulanmaz ve Readline'ın öntanımlısı olan dosyaismi tamamlaması kapatılır. Eğer tamamlama belirtimi tanımlıyken complete yerleşiği -o bashdefault seçeneği ile çalıştırılmışsa ve tamamlama balirtimi bir eşleşme üretmiyosa öntanımlı Bash tamamlamaları uygulanmaya çalışılır. Tamamlama belirtimi tanımlıyken -o default seçeneği ile çalıştırılmışsa ve tamamlama belirtimi (ve eğer uygulanmışsa öntanımlı Bash tamamlamaları) hiç eşleşme üretememişse, Readline'ın öntanımlı tamamlaması uygulanacaktır.
Bir tamamlama belirtimi dizin ismi tamamlaması istendiğini belirtiyorsa programlanabilir tamamlama işlevleri Readline'ı dizinlere sembolik bağ olan ve mark-symlinked-directories Readline değişkeninin değerine bakmaksızın mark-directories Readline değişkeninin değerine konu olan isimleri tamamlamak için / eklemeye zorlar.
Önceki Üst Ana Başlık Sonraki
Readline vi Kipi Başlangıç Programlanabilir Tamamlama Yerleşikleri
Bir Linux Kitaplığı Sayfası