2011-09-15 6 views
1

Emacs 24を最新のyasnippetと自動補完を使用して使用しています。今、emacsのユーザーとアンドロイドの開発者として、私はお気に入りのエディタを使用して、アンドロイド開発のいくつかのタスクを自動化したいと思います。 私はelispについてほとんど何も知らない。GNU/Emacsの特定のファイルを編集するために自動補完モードとyasnippetモードが同時に動作するようにします。

私の最初の作業は、カスタムスニペットを使用してAndroidManifest.xmlにuses-sdkタグを追加することです。ヤスニッペでOKですが、私はインタラクティブにアンドロイド特定のタグを提案して自動完成するためにオートコンプリートを使用したいと思います。問題は、AndroidManifest.xmlのメジャーモードがnxmlであり、すべてのnxmlモード関連バッファにアンドロイド仕様を提案したくないということです。結果として、スニペット定義のバッファ名に条件を使用します。今、nxml-mode-hookにカスタムフックを追加したいのですが、自動補完モードを有効にできませんでした。

マイスニペット:

#contributor : Me, Myself and I 
#name : <uses-sdk ... /> 
#condition : (string= (buffer-name) "AndroidManifest.xml") 
# -- 
<uses-sdk android:minSdkVersion="$0" /> 

無残に失敗したの.emacs一部:

;; yasnippet 
(add-to-list 'load-path "~/.emacs.d/yasnippet") 
(require 'yasnippet) 
(setq yas/trigger-key (kbd "C-c <kp-multiply>")) 
(yas/initialize) 
;; Develop in ~/emacs.d/mysnippets, but also 
;; try out snippets in ~/Downloads/interesting-snippets 
(setq yas/root-directory '("~/.emacs.d/snippets" 
          "~/.emacs.d/external-snippets")) 
;; Map `yas/load-directory' to every element 
(mapc 'yas/load-directory yas/root-directory) 

;; auto-complete 
(add-to-list 'load-path "~/.emacs.d/auto-complete") 
(require 'auto-complete-config) 
(add-to-list 'ac-dictionary-directories "~/.emacs.d/auto-complete/ac-dict") 

(setq-default ac-sources '(ac-source-yasnippet ac-source-abbrev ac-source-dictionary ac-source-words-in-same-mode-buffers)) 
(add-hook 'emacs-lisp-mode-hook 'ac-emacs-lisp-mode-setup) 
(add-hook 'c-mode-common-hook 'ac-cc-mode-setup) 
(add-hook 'ruby-mode-hook 'ac-ruby-mode-setup) 
(add-hook 'css-mode-hook 'ac-css-mode-setup) 
(add-hook 'auto-complete-mode-hook 'ac-common-setup) 
(global-auto-complete-mode t) 

;; android specific settings 
;; AndroidManifest.xml 
(defun ac-android-manifest-nxml-setup() 
    "" 
    (when (string= (buffer-name) "AndroidManifest.xml") 
    (setq ac-sources '(ac-source-yasnippet ac-source-abbrev ac-source-dictionary ac-source-words-in-same-mode-buffers)))) 
(add-hook 'nxml-mode-hook 'ac-android-manifest-nxml-setup) 

意図したとおりスニペットは動作しますが、私は自動車を有効にした場合、完了は自動補完が動作しませんがM-x auto-complete-modeを使用してください。

ご協力いただきますようお願い申し上げます。

+0

でうまく動作しますか?スニペットに問題はありますか?あなたが「スニペットは意図どおりに機能する」と言ったので、そうではないようです。その場合、なぜこの質問にスニペットを言いますか?そして、「自動補完は機能しますが、補完はしません」とはどういう意味ですか?補完はうまくいくのですか?そして、あなたはまた、この声明に「オートコンプリートモードを有効にするのに失敗しました。」という質問を振りかざしました。*それは本当の問題ですか?たぶん、もう少し文章を使うことができます。あなたが求めるものを明確にする。 – Cheeso

+0

また、指定されたテンプレートでファイルを埋めたい場合は、その名前に基づいて自動的に名前をつけることができます。http://www.emacswiki.org/emacs/DefaultContent – Cheeso

+0

yasnippetを自動完成したいので、私は言います。私の意味は、オートコンプリートモードを手動で有効にするとオートコンプリートがうまく動作することです。問題は、nxmlモードでフックを使って自動補完を自動的に有効化できなかったことです。私はファイルテンプレートが必要でないことを確認します(これはトピックではありませんが、アンドロイドプロジェクトはAndroidManifestファイルを初期化します、私は活動、許可などのテンプレートを作成します) – Renaud

答えて

0

あなたが解決しようとしている問題を明確にすることができます

;; auto-complete 
(add-to-list 'load-path "~/.emacs.d/auto-complete") 
(require 'auto-complete-config) 
(add-to-list 'ac-dictionary-directories "~/.emacs.d/auto-complete/ac-dict") 
(ac-config-default) 

;; android specific settings 
;; AndroidManifest.xml 
(defun ac-android-manifest-nxml-setup() 
    (when (string= (buffer-name) "AndroidManifest.xml") 
    (setq ac-sources '(ac-source-yasnippet 
         ac-source-abbrev 
         ac-source-dictionary 
         ac-source-words-in-same-mode-buffers)) 
    ((lambda() (auto-complete-mode 1))))) 
(add-hook 'nxml-mode-hook 'ac-android-manifest-nxml-setup) 
+0

ac-sourcesを適合させる必要があります... – Renaud

関連する問題