2009-03-03 21 views
12

Emacs Lisp'te kullanabileceğim etkileşimli olmayan işlevlerin tam listesini nasıl alabilirim?Emacs lisp etkileşimli olmayan işlevlerin bir listesini nasıl alabilirim?

Etkileşimli olanlar, yardım sisteminde bulmak için yeterince kolay, ancak kullanabileceğim tüm diğer işlevlerin tam listesini istiyorum. Örneğin concat, car, cdr, vb. (Ve tercihen dokümantasyon ile).

Teşekkür

Ed

Düzenleme: Jouni için Yanıtlanmış teşekkürler. Onun cevabı biraz etrafında oynanan ve sonuçları sıralamak için aldım (ben doğru sıralama işlevi bulmak amacıyla yaptığı kod sonuçlarını kullanarak!)

(flet ((first-line (text) 
        (if text 
         (substring text 0 (string-match "\n" text)) 
        ""))) 
    (let ((funclist (list))) 
    (mapatoms 
    (lambda (x) 
     (and (fboundp x)      ; does x name a function? 
      (not (commandp (symbol-function x))) ; is it non-interactive? 
      (subrp (symbol-function x))   ; is it built-in? 
      (add-to-list 'funclist 
         (concat (symbol-name x) " - " (first-line (documentation x)) 
           "\n"))))) 
    (dolist (item (sort funclist 'string<)) 
     (insert item)))) 
+0

Soru ve cevap için teşekkürler. Emacs lisp öğrenirken çok kullanışlıdır. – aartist

cevap

13

İşte temel fikir - herhangi belirsiz kavramlara Emacs Lisp manual bakın.

(flet ((first-line (text) 
     (if text 
      (substring text 0 (string-match "\n" text)) 
      ""))) 
    (mapatoms 
    (lambda (x) 
    (and (fboundp x)       ; does x name a function? 
      (not (commandp (symbol-function x))) ; is it non-interactive? 
      (subrp (symbol-function x))   ; is it built-in? 
      (insert (symbol-name x) " - " (first-line (documentation x)) "\n"))))) 
+1

Vay, bu harika. Sadece bu kısa kod parçasından on yeni şey öğrendim. Teşekkürler. – Singletoned

0

sen daha kötü look at the website

+0

Yaptım, oldukça fazla, ama fonksiyonların bir listesini bulmak için görünmüyor. Kesinlikle her şeyin bir listesi olan bir sayfa var, ancak bir tane fonksiyonlar için değil. Ve emacs içine inşa edilmiş bir şey olacağını umuyordum. – Singletoned

0

yapabilirdi Boş bir girişle apropos komutunu deneyin.

+0

Bu her şeyi listeler ve C-h f bu açıdan daha iyi olurdu. – Singletoned

+0

Üzgünüm, her şeyi listelemez. Tamamen etkileşimli olmayan komutları içermez. – Singletoned

+0

apropos.el dosyasına bakın ve kendiniz yazın. – starblue

0

Nevermind. C-h f (fonksiyon tanımla) etkileşimli olmayan fonksiyonları da içerdiği halde, sadece etkileşimli olmayanları (özellikle sadece yerleşik olanları) görüntüleme/aramanın bir yolunu bulmakla ilgilenmekteyim.

1

"Tüm işlevler" yerine tüm sembolleri içeren olsa da obarray içeriğini kontrol edebilirsiniz.

Alternatif (CL uyumluluk paketinin bölgelerinde çeker) hile yapabilirsiniz şu:

(azaltmak (lambda (so-far sonraki) (if (fboundp sonraki) (eksileri sonraki yani- uzak) so-far)) obarray : başlangıç ​​değer nil)
4

apropos yerine apropos-command deneyin. Bu size sadece interaktif olanları değil, tüm fonksiyonları size verecektir. C-h a varsayılan olarak varsayılana bağlıdır, ancak çok fazla elisp korsanlığı yapıyorsanız, onu bir öncekine bağlamanızı öneririm.

İlgili konular