でらうま倶楽部

バカってゆうか、ゲームを作る事しか能の無いプログラマの、面白おかしな日々を綴ってみる実験。

iOSアプリを「OpenGL ES3.0」必須にする

コード書いとる??

年明けから絶賛製作中のアプリですが、絶賛製作中です。

利用しているFramework Cinder 0.9.1 がOpenGL ES3.0必須なので、「それどうやってXcodeで設定するんだ?」と思って色々調べた結果をメモ書き。

UnityとかUE4とか使ってる人には多分関係ない。


GameCenter対応とかiCloud対応ならXcodeのCapabilitiesにて設定できますが、そこに「OpenGL ES3.0必須」という項目が無い。

39


そこでAppleのドキュメントを調べてみたらここに書いてありました。公式ドキュメント大事。

Info.plistにRequired device capabilitiesを追加、さらに子供の要素で文字列 opengles-3 を追加すれば良い。

08


これで手持ちのiPhone5ではアプリを起動できなくなりましたw

26


ではまた次回!!

spacemacs だと Flycheck の導入が一瞬で終わるのだ

photo

コード書いとる??

spacemacsのlayerにあるsyntax-checkingがめっちゃ便利なので導入方法のメモ。
とくにJSONにて!!

emacsにはプログラムの書き間違いをその場で指摘してくれるパッケージFlycheckがあります。
対応言語はなんと40種類!! アホか!!(褒め言葉)

んで、spacemacsにはそのFlaycheckをサクッと導入するためのLayerが用意されていて、init.el内のdotspacemacs-configuration-layersに書き足すだけで使えるようになる。神か!!

んで、ワシが使いたいのはJSON編集時!! もーカンマの書き間違いが多くって、困っちゃってたのだ。これがFlycheckを使えばその場でミスが見つかるという寸法。

init.elでは以下のように設定を書き足した。

(setq-default dotspacemacs-configuration-layers
              '(
                (syntax-checking :variables syntax-checking-enable-by-default nil)
                ))

(defun dotspacemacs/user-config ()
  (defun json-mode-hooks ()
    (flycheck-mode))
  (add-hook 'json-mode-hook 'json-mode-hooks)
  )

こんな感じにエラー個所がわかります。

53

これでもうカンマを忘れたり、余計なカンマをつけたままにしたりしない!!

スッキリ。

emacs の which-key に便利すぎる機能が追加されていた件。

photo

コード書いとる??

先日which-keyを更新したら「SPCキー押し下げで表示されるpopupがエラーで出なくなる」という不具合に遭遇しました。
不具合はコミュニティーの力であっちゅーまに解決されたのですが、ついでにwhich-keyの更新履歴を眺めていたら、なんと便利な機能が追加されていたのでメモ書き。

変数 which-key-enable-extended-define-key をnil以外にすると、ショートカットキー登録時に説明文を一緒に登録できるという機能です。

(define-key some-map "f" '("foo" . long-name-for-command-foo))

いやこれめっちゃ欲しかった!! which-key-replacement-alist にゴニョゴニョ追加するのがしんどかったので、この対応は素晴らしい!!

spacemacs だとこんな感じに登録できます。

(spacemacs/set-leader-keys "f" '("foo" . long-name-for-command-foo))

emacs lisp最高!!

ではまた次回。

spacemacs で自動的にモード(evil-state)を切り替える

photo

コード書いとる?

気づけば2018年ももう一週間ほど過ぎていますね。みなさんどんな年末年始をお過ごしでしたか?
私は「年初めひとりゲームジャム」と称して試作版ゲームを作っておりました。

さて spacemacs を使っていて気になっていた事がひとつありまして。

emacs純正のcalculatorは手軽で16進数の計算もサクッとできるしで愛用しています。spacemacsではこんな感じにキーを割り当てていました。

(spacemacs/set-leader-keys "ac" 'calculator)

ところがこれだと電卓起動時はnormal-stateなので、いざ計算しようと思ったらinsert-stateかemacs-stateにしないといけません。めんどい!!

マジか…他のはどうしてるんだ?!と思ってネットを調べてみたら…見つかりました!!

モード起動時にevilのstateを切り替える変数がありました。さすがだ。
  • evil-emacs-state-modes
    モード起動時にemacs-stateにする
  • evil-normal-state-modes
    モード起動時にnormal-stateにする
  • evil-insert-state-modes
    モード起動時にinsert-stateにする
結果これで丸く収まりました。
(spacemacs/set-leader-keys "ac" 'calculator)
(add-to-list 'evil-insert-state-modes 'calculator-mode)

スッキリ!!

emacs でのマウス操作を封印する

photo

コード書いとる?

emacs でのマウス操作を封印するパッケージ disable-mouse が少し新しくなりました。

「や、マウスホイールの操作は残しておきたいんですよね…」
とIssueを投げたら速攻で対応していただきました。

設定時にこんな感じにしておきます。

  (setq disable-mouse-wheel-events nil)
  (global-disable-mouse-mode)

ではまた次回!! 

Invalid function:helm-build-sync-source で困ったら

photo

コード書いとる?

spacemacs最高ですね。

先日パッケージを更新したらちょいちょいこんなエラーが出るように…

Invalid function:helm-build-sync-source

結果helmでの検索一覧から何かしらアクションを起動できなくてつらい…

helmの過去のIssueをみるに「helmを再インストール(再コンパイル)すれば治るよ!」との事ですが、どうやらそれだけではダメっぽい。

結局「spacemacs終了→ .emacs.d/elpa削除 → spacemacs起動 → 全パッケージ再インストール」で治りました。

スッキ…リ?

emacs から SuperCollider を直接起動する

15
コード書いとる?


いちいちSuperColliderを起動して SuperDart.start とかするのが面倒なので、自動化しました。

1. emacs のマクロを導入
 
2. 以下の内容のテキストファイル startup.scd を用意

SuperDirt.start

3. init.el に追加

(with-eval-after-load "tidal"
  (require 'sclang)
  ;; sclangへのパス(必要であれば) 
  ;;(setq sclang-command "hoge/sclang")
  ;; sclang起動時に読み込んで実行する startup.scd ファイルのパス
  (setq sclang-command-arguments "hoge/startup.scd")
  (define-key tidal-mode-map (kbd "C-c s s") 'sclang-start)
  (define-key tidal-mode-map (kbd "C-c s q") 'sclang-quit))

4. emacsにて適当にTidalCyclesのファイルを作成(hoge.tidal)
 
12

5. sclang-start (C-c s s)を実行

39


6. tidal-start (C-c C-s)を実行

50


7. Enjoy it!!

ではまた次回!!

TidalCycles と spacemacs とライブコーディング

15

コード書いとる?

何かで見かけた「ライブコーディング」の記事が妙に引っかかってて、ちょっと調べてみたら TidalCycles に行き当たって、早速 spacemace で扱えるようにした導入メモ。

導入にはここが大変参考になりました! 多謝。

ちなみに macOS での導入方法です。 それ以外のOSの人、申し訳ない!!

1. Homebrew を導入
2. 
Haskellのビルド、パッケージ管理を担うstackを導入
ターミナルからコマンドを呼び出す 
brew install haskell-stack
stack setup 

~/.stack/global-project/stack.yml のresolverを以下のように変更
resolver: nightly-2017-07-31

3. 色々導入 
ターミナルからあれこれ動かす。 
stack setup
stack install apply-refact hlint stylish-haskell hasktags hoogle
stack install tidal
brew cask install supercollider 

4. SuperColliderを起動
左カラムのテキストエディタに以下をコピペ
include("SuperDirt")

Command + Enter をキーボードから入力しコード実行。
しばらく待ち、右下のコンソールにSuperDirt installedと表示されれば完了

5. spacemacsでの設定

dotspacemacs-configuration-layers に haskell を追加
dotspacemacs-additional-packages に tidal を追加
dotspacemacs/user-config に以下を追加
(setq tidal-interpreter "/usr/local/bin/stack")
(setq tidal-interpreter-arguments
      (list "repl"
            "--ghci-options=-XOverloadedStrings"
            ))

spacemacsを再起動。自動的にhaskellとtidalのパッケージのダウンロードが始まる。

6. SuperColliderを起動
テキストエリアに以下を貼り付け
SuperDirt.start

Command + Enter をキーボードから入力しコード実行。
 
アプリ右下のServerラベル右のエリアの文字が緑色になっていることを確認する

7. 試しに音を鳴らす
spacemacsにて test.tial などと適当にバッファを作る。 設定がうまくできてれば Haskell Tidal mode になっている。
 
C-c C-s で Haskellを起動

バッファに
d1 $ sound "bd bd bd bd" 

と入力して C-c C-c で演奏開始!!

Happy TidalCycles time!!

macOS はキーボードショートカットがかなり自由だった話。

コード書いとる??

長らく使っているmacOSでようやく使い方を心得た機能のメモ書き。

キーボードショートカットの割り当てですが、なんとシステム環境設定内の「キーボード」で変更できるんですね。

Mission Controlのキー設定は以前から変更していたのですが、まさかアプリケーションごとに細かく変更可能できるなんて!!

photo1


アプリケーション固有のキーボードショートカットを追加するには「+」ボタンを押す。

photo2


設定ダイアログが出てくる。

photo3


ショートカットを追加するアプリケーションを選び、メニュー表記とキーボードショートカットを順次入力。

photo4


おおおお!

photo5


もちろん既存のキーボードショートカットの置き換えもできます。便利!

「このアプリはキーボードショートカットの変更ができなくて不便だ…」て思っててすいません。OSでサポートしてるんならアプリでの実装は必要ないよね…

ではまた次回!!

spacemacs が起動しなくなった場合の回避策

photo

コード書いとる?

朝寒くておきづらい…と思っていたら12月ですよ。師走ですよ師走。
「走って授業しなさい」とでもいうのでしょうか。

さて大のお気に入りの spacemacs ですが、最新のパッケージにすると起動しないという不具合が発生しています。

これは各種パッケージのstable版を使うよう設定ファイルで指定すれば解決します。

(defun dotspacemacs/user-init ()
  ;; 新しいリリースまでパッケージはstableを使う
  (push '("melpa-stable" . "stable.melpa.org/packages/") configuration-layer--elpa-archives)
  (push '(use-package . "melpa-stable") package-pinned-packages) 

  ;; 以下設定が続く
  )

うっかり最新版のパッケージを導入してにっちもさっちもいかなくなってしまった場合は、設定ファイルに前述のコードを追加したのち、一旦 .emacs.d を削除。spacemacsを再導入してみてください。

ではまた次回!!

Emacs の iedit が想像以上に便利!!

コード書いとる?

遅ればせながら iedit を知りました。

Emacs 用のプラグインで、バッファ内でマッチしたキーワードをまとめて編集できる素晴らしい機能です!!

もちろん spacemacs では専用のキーバインドが割り当てられていて、これが快適快適!!

こんな感じでテキストがあったとしましょう。

photo1

「hoge」にカーソルを合わせて SPC s e

photo2

「hoge」がハイライトされます。

photo3

この状態でハイライトされた箇所を編集すると、ほかのハイライトされた箇所もまとめて編集される!! 対話的一括置換!

photo4

一番のお気に入りは「Vキーでハイライト箇所だけ表示」これ便利すぎっしょ!!

photo5

ただし、現在の状態だと iedit の関数名がいくつか変更されていて、Vで検索箇所だけ表示のトグルが使えません。

work-around としてinit.elに以下の一文を追加すれば使えるようになります。

(fset 'iedit-toggle-unmatched-lines-visible 'iedit-show/hide-unmatched-lines)

ではまた次回!!

macOS High Sierra でアプリの音声を録音する

Soundflower
コード書いとる?

「アプリのサウンドを録音したい!」

ちょいちょい必要な時があって、そういう時にだいたい設定を忘れててゲンナリするので、あらかじめメモ書き。


macOS標準添付QuickTimeの機能のひとつ「画面収録」は、拙作アプリのプレイ動画を収録する時にとても重宝しています。

なーのーでーすーがー!! アプリの音が収録できない。

それをなんとかするのがソフトウェアの力なのに…とネットを調べて見つけたのが「SoundFlower」というソフトでした。

このソフトが仮想オーディオ出入力デバイスを生成し、アプリはこのデバイス経由で音声の出入力ができるようになります。

すると「アプリ→音声出力→仮想オーディオデバイス→音声入力→アプリ」ということが実現できてQuickTimeの画面収録でアプリの音声も収録できてイェッフウウ!! となるわけです。

ソフトの導入に関してはこちらが詳しいです。

なーのーでーすーがー!! SoundFlowerを使うと画面収録中の音声が聞こえない(涙)

他のアプリを導入するのもなんかめんどくさいと思って再び調べてみたら、なんとmacOS標準添付のアプリ「Audio MIDI設定」で実現できる事が判明。早速試してみました。


まずはアプリを開く。
 
photo1


メニュー左下「+」を押して「複数出力装置を作成」を選ぶ

photo2


「内蔵出力」と「SoundFlower」へ同時に出力するよう設定

photo3


「システム環境設定→サウンド」での出力先を「複数出力装置」にする

photo4


以上!!! 簡単です!


オマケ

photo5


サウンドでの入力元を「SoundFlower」に変更するとDTM系ソフトでアプリのサウンドが直接録音できてこれも何かと便利!!


ではまた次回。

spacemacs でマウス入力を無視したい

photo

コード書いとる?

spacemacs 超便利です。

なのですが、トラックパッドに手が触れてカーソル位置が勝手に移動してしまう事故が多発するので、マウス入力を概ね無視する設定を調べました。

本来なら disable-mouse でサクッとマウス入力を無視するようにできるのですが… spacemacs の場合はさらに以下の処理が必要でした。



うむ!

ではまた次回!!

macOS High Sierra での Processing 3.3.6 の動作不具合

test
コード書いとる?

macOS High SierraにバージョンアップしたらProcessingのメニューバーが表示されなくなりました… アプリの終了すらままなりません(涙) 

こりゃさすがに不便でしょ!ってんで調べたら公式のGitHubリポジトリに報告が上がってました。まあみんな困ってますよね。

とりあえずの対策はターミナルを起動して以下のコマンドを実行する。

defaults write org.processing.app AppleLanguages '(en)'

スッキリ!

ではまた次回。

spacemacs で helm が動作しない場合の work-around

photo

コード書いとる?

spacemacs を導入した時に helm のコマンドを使おうとしてエラーが発生する場合は
.spacemacs の dotspacemacs/user-config に

(require 'helm-bookmark)

を追加すると良いです。

ではまた次回!

素の Emacs のモードラインにバッファのテキストが BOM 付きかどうかを表示する

photo

コード書いとる?

spacemace への移行は順調に進んでます。これヤバいです。これまでのキーバインドは何だったんだというくらい、ショートカットキー操作が快適です。

画面下部に「今なら使えるキーバインドはコレ!」って表示されるのとか最高です。

で、先日モードラインにバッファの文字コードをちょっと詳しく出せるようになって喜んでいたんですが、せっかくなので素のEmacsでもできないか試行錯誤してみました。

1. init.el に以下の関数を追加


2. mode-line-format のどこか適当なところに以下を追加(customize-variable を使うと楽)

(:eval (my-mode-line-bom-info))

元の内容の mode-line-mule-info の後ろがオススメ

3. Emacsを再起動!


オマケ

モードラインに表示される「改行コードの種類」は以下の変数を書き換えると変更できるよ!

eol-mnemonic-dos
eol-mnemonic-mac
eol-mnemonic-unix
eol-mnemonic-undecided

ではまた次回!

spacemacs でようやくモードラインに文字コードと改行とBOMを分けて表示

コード書いとる?

拙者はもう3週間くらい、仕事の合間にspacemacsの調整です。spacemacsの合間に仕事とも言います。

photo


んで、ようやくバッファの文字コードを「文字コード」「改行コード」「BOMの有無」に分離してモードラインに表示できるようになりました。長かった…

はじめサクッと書いたマクロが微妙に怪しい。右側の表示が少し見切れる。これ、ずっと調べていたら East Asian Ambiguous Width問題 にぶち当たりました。いやこれは気づかんやろ…

というわけで、プラグインを導入してマクロもちょこっと書き換え。
 
最後に spaceline で文字数を数える箇所を length → string-width に書き換えてオッケィ!

ではまた次回。

spacemacs のモードラインで文字コードを少し見やすく

test

コード書いとる?

XcodeとVisualStudioの両方でビルド可能なC++のソースコードは、文字コードがutf-8(BOM付き)じゃないとダメ。

んで、spacemacsに乗り換えたらテキストファイルがBOM付きかどうかモードラインに表示されない。

ので、色々調べてマクロを書きました。元々の関数を書き換えるひどい実装ですが動いてます。動けば正義! dotspacemacs/user-config に追加してください。
 

でもpowerlineが文字幅を計算する箇所が正しく動作していない感じ… まあいっか!

ではまた次回。

spacemacs 乗り換え中

photo

コード書いとる?

先日から乗り換え始めた spacemace の設定作業などが落ち着いてきました。

まだまだ日本語の情報が少ないので設定例をメモ書き。

dotspacemacs-configration-layers
dotspacemacs-configuration-layers
'(
  helm
  emacs-lisp
  c-c++
  markdown
  org
  ;; shellはemacs標準添付のshellを使う
  (shell :variables shell-default-shell 'shell
                    shell-default-height 40)
  version-control
  )
 
dotspacemacs-additional-packages '(
                                   ;; scratchバッファを永続化
                                   persistent-scratch
                                   ;; 自動保存
                                   auto-save-buffers-enhanced
                                   )

;; 一度インストールしたパッケージは削除しない
dotspacemacs-install-packages 'used-but-keep-unused

dotspacemacs/user-init
(defun dotspacemacs/user-init ()
  ;; Info用のパスを再設定
  (setq Info-default-directory-list (list (expand-file-name "info" dotspacemacs-directory)
                                          (expand-file-name "../info" data-directory)))
  ;;カスタマイズ変数を別ファイルから読み込む
  ;; TIPS:init.elが勝手に太るのを阻止
  (setq custom-file (expand-file-name "custom.el" dotspacemacs-directory))
  (when (file-exists-p custom-file)
    (load custom-file))
  )


dotspacemacs/user-config
(defun dotspacemacs/user-config ()
  ;; 手動で加えるマクロ置き場
  (add-to-list 'load-path (expand-file-name "~/.spacemacs.d/lisp"))
  ;; diredの挙動をWindowsと揃える
  (load-library "ls-lisp")

  ;; macOSのファイル名をutf-8で扱うためのworkaround
  (require 'ucs-normalize)
  (set-file-name-coding-system 'utf-8-hfs)
  (setq locale-coding-system   'utf-8-hfs)
  ;; git grep が utf-8-hfs に対応していないためのworkaround
  (defun my-shell-quote-argument (shell-quote-argument str)
    (funcall shell-quote-argument (ucs-normalize-NFD-string str)))
  (advice-add 'shell-quote-argument :around 'my-shell-quote-argument)

  ;; Rictyだとpowerlineのシンボルに想定外のフォントが使われてしまうためのworkaround
  (set-fontset-font t 'symbol (font-spec :name "Hiragino Sans-16"))
  ;; マイナーモードの表示変更 
  (spacemacs|diminish view-mode " Ⓥ" " V")
  (spacemacs|diminish centered-cursor-mode " ㊀" " -")

  ;; スクラッチバッファの永続化ON
  (persistent-scratch-setup-default)

  ;; shellを閉じる時のクエリを抑止
  (defun shell-mode-hooks ()
    (set-process-query-on-exit-flag (get-buffer-process (current-buffer)) nil)
    )
  (add-hook 'shell-mode-hook 'shell-mode-hooks)
  ;; shell-popでshellを表示する時に、設定を無視して画面上部に表示されてしまうwork-around
  (push (cons "\\*shell\\*" display-buffer--same-window-action) display-buffer-alist)

  ;; alt+arrowでwindowを移動
  (windmove-default-keybindings 'alt)

  ;; LISP構文の間違いを警告するfont-lockを無効にする
  (defadvice lisp--match-hidden-arg (around lisp--match-hidden-arg-wrapper)
    (if (not (and (boundp 'use-my-lisp--match-hidden-arg) 'use-my-lisp--match-hidden-arg))
        ad-do-it))
  (ad-activate 'lisp--match-hidden-arg)
  (defun lisp-interaction-mode-hooks ()
    (set (make-local-variable 'use-my-lisp--match-hidden-arg) t))
  (add-hook 'lisp-interaction-mode-hook 'lisp-interaction-mode-hooks)

  ;; 行末の空白を色分けしない
  (setq spacemacs-show-trailing-whitespace nil)
  ;; buffer切り替えでorg-agendaを無視しない
  (push "\\*Org\.\+\\*" spacemacs-useful-buffers-regexp)

  ;; normal-modeになったら強制的に英語入力へ
  (defun my-evil-normal-state-entry-hook ()
    (mac-select-input-source "com.apple.inputmethod.Kotoeri.Roman"))
  (add-hook 'evil-normal-state-entry-hook 'my-evil-normal-state-entry-hook)
  (add-hook 'focus-in-hook 'my-evil-normal-state-entry-hook)

  ;; 指定ファイルを自動保存
  (require 'auto-save-buffers-enhanced)
  (setq auto-save-buffers-enhanced-include-regexps '("\\.\\(hpp\\|cpp\\|c\\|h\\|m\\|mm\\|pl\\|cgi\\|json\\|param\\|vsh\\|fsh\\)$"))
  (setq auto-save-buffers-enhanced-interval 1)
  (setq auto-save-buffers-enhanced-quiet-save-p t)
  (auto-save-buffers-enhanced t)

  ;; カーソル移動を見た目で行うworkaround
  (define-key evil-normal-state-map (kbd "<remap> <evil-next-line>")     'evil-next-visual-line)
  (define-key evil-normal-state-map (kbd "<remap> <evil-previous-line>") 'evil-previous-visual-line)
  (define-key evil-motion-state-map (kbd "<remap> <evil-next-line>")     'evil-next-visual-line)
  (define-key evil-motion-state-map (kbd "<remap> <evil-previous-line>") 'evil-previous-visual-line)

  ;; vc-modeのキーバインド追加
  (spacemacs/set-leader-keys "gl" 'vc-print-log)
  (spacemacs/set-leader-keys "gL" 'vc-print-root-log)
  (spacemacs/set-leader-keys "g=" 'vc-diff)
  (spacemacs/set-leader-keys "gD" 'vc-root-diff)
  (spacemacs/set-leader-keys "gg" 'vc-annotate)
  (spacemacs/set-leader-keys "gd" 'vc-dir)
  (spacemacs/set-leader-keys "gt" 'vc-create-tag)
  (spacemacs/set-leader-keys "gp" 'projectile-vc)

  ;; diffでwhitespace非表示のworkaround
  (remove-hook 'diff-mode-hook 'whitespace-mode)
  (remove-hook 'diff-mode-hook 'spacemacs//set-whitespace-style-for-diff)
  ;; helmを使う時のwork-around
  ;; SOURCE: https://github.com/syl20bnr/spacemacs/issues/9549
  (require 'helm-bookmark)

  ;; GCの閾値を初期値に戻す
  (setq gc-cons-threshold (* 8 1024 1024))
  )

custom-set-faces
(custom-set-faces
 ;; モードライン左端の表示設定を変更
 '(spacemacs-emacs-face ((t (:background "SkyBlue2" :foreground "#202020" :inherit (quote mode-line)))))
 '(spacemacs-evilified-face ((t (:background "LightGoldenrod3" :foreground "#202020" :inherit (quote mode-line)))))
 '(spacemacs-hybrid-face ((t (:background "SkyBlue2" :foreground "#202020" :inherit (quote mode-line)))))
 '(spacemacs-iedit-face ((t (:background "firebrick1" :foreground "202020#" :inherit (quote mode-line)))))
 '(spacemacs-iedit-insert-face ((t (:background "firebrick1" :foreground "#202020" :inherit (quote mode-line)))))
 '(spacemacs-insert-face ((t (:background "chartreuse3" :foreground "#202020" :inherit (quote mode-line)))))
 '(spacemacs-lisp-face ((t (:background "HotPink1" :foreground "#202020" :inherit (quote mode-line)))))
 '(spacemacs-motion-face ((t (:background "plum3" :foreground "#202020" :inherit (quote mode-line)))))
 '(spacemacs-normal-face ((t (:background "DarkGoldenrod2" :foreground "#202020" :inherit (quote mode-line)))))
 '(spacemacs-replace-face ((t (:background "chocolate" :foreground "#202020" :inherit (quote mode-line)))))
 '(spacemacs-visual-face ((t (:background "gray" :foreground "#202020" :inherit (quote mode-line)))))
 )

後はキーバインドを覚えるだけ!

ではまた次回。

spacemacsに乗り換えているお話

photo

コード書いとる?

気がついたら emacs から spacemacs に乗り換えてる真っ最中です。 公式サイトに掲げられている The best editor is neither Emacs nor Vim, it's Emacs and Vim! という一文に引き寄せられました。

かわいいよ spacemacs かわいいよ

という訳で設定内容とか注意点を共有。

乗り換え方法 
  1. .emacs.d 以下を別のフォルダに退避。 設定ファイルが ~/.emacs な人はこれも退避
  2. GitHub にある spacemacs のリポジトリをクローン
    git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d 
  3. emacs を起動
    「キーバインドはvim風にする? 標準的なプラグインは導入する?」
    と選択を迫られた後、自動的に必要なプラグインが導入される 
  4. ハイどうぞ!
あとは公式ドキュメントを読み進めながら操作方法などを覚えていけばよいです。

設定ファイル
~/.spacemacs にいろんな設定を書きます。 ~/.spacemacs.d/init.el に変更してもよいです。
  • dotspacemacs/layers
    いくつかのプラグインをひとまとめにしてキーバインドを設定し直した layer という機能を列挙する
  • dotspacemacs/init
    各種設定項目。spacemacs特有の設定もあるので一通り目を通しておくのが良い 
  • dotspacemacs/user-init
    dotspacemacs/init の直後に実行してほしい手続きを書く。layerの初期化手続きより前に実行される 
  • dotspacemacs/user-config
    ひとしきりspacemacsの初期化が終わった後に実行される。自分でプラグインを導入したり変数に値を拘束したりする処理はここに書く 
  • custom-set-variables
    カスタマイズ機能を使った設定内容が書いてある 
  • custom-set-faces
    カスタマイズ機能を使った設定内容が書いてある 
自分の設定例 
  • dotspacemacs-configuration-layers に適当なlayerを追加
  • scratchバッファの永続化
    dotspacemacs-additional-packages に persistent-scratch を追加して
    dotspacemacs/user-config に (persistent-scratch-setup-default) を追加
  • Font設定
    dotspacemacs-default-font '("Ricty"
                                :size   18
                                :weight normal
                                :width  normal
                                :powerline-scale 1.1)
    
  • モードラインの表示が崩れる不具合のwork-around
    dotspacemacs/user-config に以下を追加
    ;; Rictyだとpowerlineのシンボルに想定外のフォントが使われてしまうためのwork-around
    (set-fontset-font t 'symbol (font-spec :name "Hiragino Sans-16"))
    
  • 起動時にアプリ画面サイズをデスクトップ画面いっぱいにする
    dotspacemacs-maximized-at-startup t
  • Diredの挙動をWindowsと揃える
    dotspacemacs/user-config に (load-library "ls-lisp") を追加
  • git grep が utf-8-hfs に対応していないためのwork-around
    dotspacemacs/user-config に 以下を追加
    (defun my-shell-quote-argument (shell-quote-argument str)
      (funcall shell-quote-argument (ucs-normalize-NFD-string str)))
    (advice-add 'shell-quote-argument :around 'my-shell-quote-argument)
    
  • macOS はファイル名の文字コードが特殊なので dotspacemacs/user-config に 以下を追加
    (require 'ucs-normalize)
    (set-file-name-coding-system 'utf-8-hfs)
    (setq locale-coding-system   'utf-8-hfs)
    
  • shellのlayer設定を変更
    dotspacemacs-configuration-layers の shell に設定を追加
    (shell :variables shell-default-shell 'shell
                      shell-default-height 40)
    
  • バッファを閉じる時や spacemacs 終了時に「このプロセスを終了してもいいよね?」と聞いてこなくする
    dotspacemacs/user-config に以下を追加
    (defun shell-mode-hooks ()
      (set-process-query-on-exit-flag (get-buffer-process (current-buffer)) nil))
    (add-hook 'shell-mode-hook 'shell-mode-hooks)
 
あとはチマチマとこれまでの設定を移植しつつ vim のキーバインドに慣れつつといった感じ!!

コントロールキーから始まる大量のキーバインドから解放されました。

スッキリ!! 
記事検索
電子書籍発売中

「チュートリアル形式で始めるOpenAL」
サウンド怖くない。C++による8つのチュートリアルで始めるOpenALプログラミング。さああなたも、自作アプリに魅力的な音効を添えてみませんか??
⇒Kindle版 ⇒iBooks版


「iPhoneアプリ『ういろう』のレシピ」
ゲームってどうやって作ってるの?? 拙アプリ『ういろう』の製作過程を本にまとめました。もちろんソースコードつき
⇒Kindle版 ⇒iBooks版


『チュートリアル形式で始めるOpenGL[2D編]』
OpenGL怖くない。C++による16のチュートリアルで始めるOpenGLプログラミング[2D編]。さああなたも、ゲーム作りを始めてみませんか?
⇒Kindle版 ⇒iBooks版
自作ゲーム配信中

『BRICK & TRIP』
咄嗟の判断に、あなたの指先はついてこれるか?! 爽快フリックアクション!! 様々な難関をくぐり抜けて旅の終着点を目指そう!!
⇒AppStore


『ういろう』
名古屋土産ういろうがiPhoneで大活躍?! 白ういろうを守れるのはあなただけ。ひゅーん、ぼよよーん!!
⇒AppStore ⇒LITE版


『こなへん』
ヒマラヤ山脈、大西洋、世界で一番深い湖… それって地球のどこにあるのか知ってるかな?『全方位直感地理クイズ』という新ジャンルに挑戦!あ、それ。地球をくーるくるw
⇒AppStore ⇒LITE版


『GEOSPOT』
ヒマラヤ山脈、大西洋、世界で一番深い湖… それって地球のどこにあるのか知ってるかな?『全方位直感地理クイズ』という新ジャンルに挑戦!あ、それ。地球をくーるくるw
⇒Windows ⇒Mac


『TieGunner』
マウス片手に大宇宙へ飛び立とう!『しっぽシューティング』というジャンルを作って頂きました^^; WinでもMacでも動きます。ソースもあるでよw
⇒Windows ⇒Mac
QRコード
QRコード
  • ライブドアブログ