Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2010-09-13

このブログのKMRCLのエントリーをSLIMEから検索する(2)

| 00:30 | このブログのKMRCLのエントリーをSLIMEから検索する(2) - わだばLisperになる を含むブックマーク はてなブックマーク - このブログのKMRCLのエントリーをSLIMEから検索する(2) - わだばLisperになる

anything.elとの連携は、日付をまたいで次のエントリーにしよう(LISP365のため)と思っていたのですが、そんな風にぼーっとしている間に d:id:kitokitoki さんに光速でanything.elのソースを作って頂けました!

同じものを載せるわけにも行かないので、ちょっと機能を追加しましたw

  1. (setq anything-c-source-なんとか)というのがどうも馴染めないのでdefanythingというマクロを書きました。
  2. Googleソースコード検索もおまけで付けました

defanythingは、define-anything-c-sourceのようにanything-c-sourceに限定した方が良いかもしれないですね。

anything側で絞りこまないで外に丸投げする方法が分からなかったので、anything-inputの中身を読むようにしたんですが、これで良いんでしょうか。

thing-at-pointで拾えないときは候補に出ないんですよね…。まあ良いか。

こうなったら

等、あらゆる物を検索対象にしたいですね。

;; Emacs lisp
(defmacro unless-defined (def name args &rest body)
  (unless (fboundp name)
    `(,def ,name ,args ,@body)))

(unless-defined defun mkstr (&rest args)
  "writes args into a string and returns that string"
  (apply #'concat (mapcar (lambda (x) (format "%s" x))
                          args)))
(unless-defined defun symb (&rest args)
  "creates a new symbol from args"
  (intern (apply #'mkstr args)))

(unless-defined defun cl-symbol-name (symbol-or-name)
  (let* ((name (format "%s" symbol-or-name))
         (pos (search ":" name :from-end t)))
    (substring name (if pos (1+ pos) 0))))

(defmacro* defanything ((name type) &rest source)
  `(setq ,(symb "anything-" type "-" name)
         ',(mapcar (lambda (x) (cons (car x) (cadr x)))
                   source)))

(defun google-code-search-lisp-lookup (symbol-name)
  "シンボルをGoogle Codeで検索(lisp決め打ち)"
  (interactive)
  (browse-url
   (format "http://www.google.com/codesearch?q=%s\\++lang:%s+file:\\.%s$&hl=ja&num=20"
           symbol-name "lisp" "lisp")))

(eval-after-load "anything"
  '(progn
     (defanything (hyperspec c-source)
       (name "Lookup Hyperspec")
       (candidates (lambda ()
                     (let ((symbols () ))
                       (mapatoms #'(lambda (sym) (push (symbol-name sym) symbols))
                                 common-lisp-hyperspec-symbols)
                       symbols)))
       (action (("Show Hyperspec" . hyperspec-lookup))))

     (defanything (cltl2 c-source)
       (name "Lookup CLtL2")
       (candidates (lambda ()
                     (let ((symbols () ))
                       (mapatoms #'(lambda (sym) (push (symbol-name sym) symbols))
                                 cltl2-symbols)
                       symbols)))
       (action (("Show CLTL2" . cltl2-lookup))))

     (defanything (g000001-kmrcl c-source)
       (name "Lookup G000001-KMRCL")
       (candidates (lambda ()
                     (let ((symbols () ))
                       (mapatoms #'(lambda (sym) (push (symbol-name sym) symbols))
                                 g000001-kmrcl-symbols)
                       symbols)))
       (action (("Show G000001-KMRCL" . g000001-kmrcl-lookup))))

     (defanything (google-code-search-lisp-lookup c-source)
       (name "Google Code Search (LISP)")
       (candidates (lambda () (list anything-input))) ;anything-input
       (action (("Google Code Search (LISP)" . google-code-search-lisp-lookup))))
     
     (defun anything-cl-lookup ()
       (interactive)
       (anything (list anything-c-source-hyperspec 
                       anything-c-source-google-code-search-lisp-lookup
                       anything-c-source-cltl2
                       anything-c-source-g000001-kmrcl )
                 (cl-symbol-name (thing-at-point 'symbol))))))

(define-key slime-mode-map [(control ?c) (control ?d) ?l] 'anything-cl-lookup)

ゲスト



トラックバック - http://cadr.g.hatena.ne.jp/g000001/20100913