Last active
August 29, 2015 14:16
-
-
Save fujimisakari/c6b70e80fc9f84206ad6 to your computer and use it in GitHub Desktop.
EmacsでiOS開発(objective-c)するための環境構築 ref: http://qiita.com/fujimisakari/items/a6ff082f0e8eddc09511
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; iOS SDKへのPATH | |
(defvar xcode:sdk "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk") | |
;; TABスペースは利用せず、半角スペースを4つにする(デフォルトのままでは2になってました) | |
(add-hook 'objc-mode-hook | |
'(lambda() | |
(setq c-basic-offset 4) | |
(setq tab-width 4) | |
(setq indent-tabs-mode nil))) | |
;; .hファイルもobjc-modeで開くけるようにする | |
(add-to-list 'magic-mode-alist | |
`(,(lambda () | |
(and (string= (file-name-extension buffer-file-name) "h") | |
(re-search-forward "@\\<interface\\>" | |
magic-mode-regexp-match-limit t))) | |
. objc-mode)) | |
;; FoundationやUIKit等のFrameworkの.hファイルを検索対象に含めるようにする | |
(setq xcode:frameworks (concat xcode:sdk "/System/Library/Frameworks")) | |
(setq cc-search-directories (list xcode:frameworks)) | |
(defadvice ff-get-file-name (around ff-get-file-name-framework | |
(search-dirs | |
fname-stub | |
&optional suffix-list)) | |
"Search for Mac framework headers as well as POSIX headers." | |
(or | |
(if (string-match "\\(.*?\\)/\\(.*\\)" fname-stub) | |
(let* ((framework (match-string 1 fname-stub)) | |
(header (match-string 2 fname-stub)) | |
(fname-stub (concat framework ".framework/Headers/" header))) | |
ad-do-it)) | |
ad-do-it)) | |
(ad-enable-advice 'ff-get-file-name 'around 'ff-get-file-name-framework) | |
(ad-activate 'ff-get-file-name) | |
;; 対になってる.hファイルと.mファイルをトグルできるようにする | |
(require 'find-file) ;; for the "cc-other-file-alist" variable | |
(nconc (cadr (assoc "\\.h\\'" cc-other-file-alist)) '(".m" ".mm")) | |
(define-key c-mode-base-map (kbd "C-c '") 'ff-find-other-file) | |
;; .hと.mを左右に並べて開く | |
(defun open-header-and-method-file () | |
(interactive) | |
(other-window-or-split) | |
(ff-find-other-file)) | |
(define-key objc-mode-map (kbd "C-c ;") 'open-header-and-method-file) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ brew install clang-format |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ cd ~/ios_project | |
$ find . -name "*.[hm]" -follow -print | /usr/local/bin/gtags --gtagslabel=pygments-parser -f - ./ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(require 'gtags) | |
;; ファイル保存時にGTAGSを更新する | |
(setq gtags-auto-UPDATE t) | |
;; 相対pathで表示 | |
(setq gtags-path-style 'relative) | |
;; (setq gtags-path-style 'absolute) | |
;; *GTAGS SELECT* のバッファは1つだけ生成する | |
(setq gtags-select-buffer-single t) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;;; flymakeでシンタックスチェック | |
(defvar flymake-objc-compiler (executable-find "clang")) | |
(defvar flymake-objc-compile-default-options (list "-D__IPHONE_OS_VERSION_MIN_REQUIRED=30200" "-fsyntax-only" "-fobjc-arc" "-fblocks" "-fno-color-diagnostics" "-Wreturn-type" "-Wparentheses" "-Wswitch" "-Wno-unused-parameter" "-Wunused-variable" "-Wunused-value" "-isysroot" xcode:sdk)) | |
(defvar flymake-last-position nil) | |
(defcustom flymake-objc-compile-options '("-I.") | |
"Compile option for objc check." | |
:group 'flymake | |
:type '(repeat (string))) | |
(defun flymake-objc-init () | |
(let* ((temp-file (flymake-init-create-temp-buffer-copy | |
'flymake-create-temp-inplace)) | |
(local-file (file-relative-name | |
temp-file | |
(file-name-directory buffer-file-name)))) | |
(list flymake-objc-compiler (append flymake-objc-compile-default-options flymake-objc-compile-options (list local-file))))) | |
(defun flymake-display-err-minibuffer () | |
(interactive) | |
(let* ((line-no (flymake-current-line-no)) | |
(line-err-info-list | |
(nth 0 (flymake-find-err-info flymake-err-info line-no))) | |
(count (length line-err-info-list))) | |
(while (> count 0) | |
(when line-err-info-list | |
(let* ((file (flymake-ler-file (nth (1- count) line-err-info-list))) | |
(full-file (flymake-ler-full-file | |
(nth (1- count) line-err-info-list))) | |
(text (flymake-ler-text (nth (1- count) line-err-info-list))) | |
(line (flymake-ler-line (nth (1- count) line-err-info-list)))) | |
(message "[%s] %s" line text))) | |
(setq count (1- count))))) | |
(defun flymake-display-err-minibuffer-safe () | |
(ignore-errors flymake-display-err-minibuffer)) | |
;; もともとのパターンにマッチしなかったので追加 | |
(setq flymake-err-line-patterns | |
(cons | |
'("\\(.+\\):\\([0-9]+\\):\\([0-9]+\\): \\(.+\\)" 1 2 3 4) | |
flymake-err-line-patterns)) | |
;; 拡張子 m と h に対して flymake を有効にする設定 | |
(add-hook 'objc-mode-hook | |
(lambda () | |
(push '("\\.m$" flymake-objc-init) flymake-allowed-file-name-masks) | |
(push '("\\.h$" flymake-objc-init) flymake-allowed-file-name-masks) | |
;; 存在するファイルかつ書き込み可能ファイル時のみ flymake-mode を有効にします | |
(if (and (not (null buffer-file-name)) (file-writable-p buffer-file-name)) | |
(flymake-mode t)))) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(require 'clang-format) | |
;; 以下で整形スタイルを設定できます(defult: "file") | |
(setq clang-format-style "Google") | |
;; キーバインド指定 | |
(define-key objc-mode-map (kbd "C-c ") 'clang-format-region) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; quickrunにclangでの実行環境を追加しておきます | |
(add-to-list 'quickrun-file-alist '("\\.m$" . "objc/clang")) | |
(quickrun-add-command "objc/clang" | |
'((:command . "clang") | |
(:exec . ("%c -fobjc-arc -framework Foundation %s -o %e" "%e")) | |
(:remove . ("%e"))) | |
:default "objc") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(require 'helm-xcdoc) | |
(setq helm-xcdoc-command-path "/Applications/Xcode.app/Contents/Developer/usr/bin/docsetutil") | |
(setq helm-xcdoc-document-path "~/Library/Developer/Shared/Documentation/DocSets/com.apple.adc.documentation.AppleiOS8.1.iOSLibrary.docset") | |
(define-key objc-mode-map (kbd "C-c d") 'helm-xcdoc-search-other-window) | |
(require 'popwin) | |
(push '("*eww*") popwin:special-display-config) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; 'emaXcode設定 | |
(require 'emaXcode) | |
(setq xcode:foundation (concat xcode:sdk "/System/Library/Frameworks/Foundation.framework/Headers/")) | |
(setq xcode:uikit (concat xcode:sdk "/System/Library/Frameworks/UIKit.framework/Headers/")) | |
(setq emaXcode-yas-objc-header-directories-list (list xcode:foundation xcode:uikit)) | |
;; auto-complete設定 | |
(ac-config-default) | |
;;ac-auto-startが整数値の場合、文字列の長さがac-auto-start以上になると自動補完開始 | |
(setq ac-auto-start 3) | |
;; yasnippet設定 | |
(require 'yasnippet) | |
(setq yas-snippet-dirs | |
'("~/.emacs.d/share/snippets")) | |
(yas-global-mode 1) | |
;; (必須)最初にロードしておく | |
(yas-load-directory "~/.emacs.d/share/snippets") | |
;; ロードしていない場合、*.[mh]を開く時に始めてsnippetのloadが走ります。 | |
;; 情報源(ac-source-emaXcode-yasnippet)の作成はsnippetのloadの前に | |
;; 行なわれますので空の情報源になってしまいます |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ brew install global --with-exuberant-ctags --with-pygments |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ sudo pip install pygments |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ vim ~/.ctags | |
--langdef=objc | |
--langmap=objc:.m.h | |
--regex-objc=/^[[:space:]]*[-+][[:space:]]*\([[:alpha:]]+[[:space:]]*\*?\)[[:space:]]*([[:alnum:]]+):[[:space:]]*\(/\1/m,method/ | |
--regex-objc=/^[[:space:]]*[-+][[:space:]]*\([[:alpha:]]+[[:space:]]*\*?\)[[:space:]]*([[:alnum:]]+)[[:space:]]*\{/\1/m,method/ | |
--regex-objc=/^[[:space:]]*[-+][[:space:]]*\([[:alpha:]]+[[:space:]]*\*?\)[[:space:]]*([[:alnum:]]+)[[:space:]]*\;/\1/m,method/ | |
--regex-objc=/^[[:space:]]*\@property[[:space:]]+.*[[:space:]]+\*?(.*);$/\1/p,property/ | |
--regex-objc=/^[[:space:]]*\@implementation[[:space:]]+(.*)$/\1/c,class/ | |
--regex-objc=/^[[:space:]]*\@interface[[:space:]]+(.*)[[:space:]]+:.*{/\1/i,interface/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ cd ~/ios_project | |
$ ln -s /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks frameworks |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment