Mevcut komutta hangi mevcut komut bu gibi dosya adını alır?
Maalesef bunun için hazır bir komut yok, ancak birini aşağıdaki gibi yapabiliriz:
(defun name-of-the-file ()
"Gets the name of the file the current buffer is based on."
(interactive)
(insert (buffer-file-name (window-buffer (minibuffer-selected-window)))))
Sihir, minibuffer tarafından seçilen pencere fonksiyonundadır; minibuffer etkinleştirilmeden önce son tamponu seçerek doğru olanı yapar. Aksi takdirde, sadece buffer-file-name kullanmak bize dosya adını minibuffer'a getirmez. İlginç bir şekilde, aynı işlev dosya adını eklemek için normal bir arabellek veya minibuffer'da kullanılabilir. Özel bir tedaviye gerek yoktur.
Varsayılan anahtar bağlaması nedir?
Hiçbiri yoktur, ancak uygun olanı seçebilir ve aşağıdaki gibi atayabilirsiniz:
(global-set-key (kbd "C-c f") 'name-of-the-file)
Yukarıdaki lisp kodu satırlarını init.el dosyanıza koyun.
Bu, en önemsiz durumlarda çalışır, ancak bu işlevi çağırırken aktif olduğunuz modlarla hangi çakışmaların olabileceğini tahmin etmek zordur.
Tampon, sıfırlama tamponu gibi geçerli bir dosya adını ziyaret etmiyorsa ne olur? Sonra bu hata yankı alanında gösterilir:
name-of-the-file: Wrong type argument: char-or-string-p, nil
Kısayolu çağırmadan önce uygun bir dosya adına sahip geçerli bir arabellek seçmek bu tür hataları önler.
Yukarıdaki gibi başka çözümler de vardır, ancak bunlar genellikle herhangi bir çatışma için istisnaları veya geçersiz kılmaları nasıl ele aldıkları konusunda farklılık gösterir. Örneğin, bazıları bu işlevi yalnızca belirli modlarda kullanılabilir hale getirmek için mod kancaları kullanır.
M-n
. Her yerde çalışmaz, ancak birçok yerde çalışır. Ayrıca, selamladığınız için, biraz daha etkileşimli olan lgrep ve rgrep'i beğenebilirsiniz.