あまりにも特殊な話なので書くか迷ったのですが、記録のために書いておきます。
Ghostはnode.jsベースのブログシステムです。 先日、Ghostをherokuにデプロイする話を書きましたが、 使ってみて一つだけ不便に感じることがありました。
エディタでC-hが効かないのです。
C-hというのは普段Backspaceの代わりに使っているキーバインドで、 Ctrlキーを押しながらhを押します。ないと困る人には困るのです。 ブラウザでも使えるようにしています。しかし、これが困るのはLinuxユーザだけかもしれません。 OSXの場合はCtrlではなくてCommandがありますし、Windowsの場合はそもそもC-hが効かないと思います。
GhostのMarkdownエディターは気に入ったので、なんとかしてC-hを使えるようにしたいところ。 ちなみに、C-hが使えない理由はC-hがGhostのショートカットに割り振られていて、 ヘッダータグの挿入になるからです。 ちょっと調べてみましたが、本家Ghostではすぐには解決しそうにない(あまりに特殊環境か)ので、 forkすることにしました。
https://github.com/dai-shi/Ghost
です。修正したコードはほんの2行です。 C-hとC-bに設定されていたショートカットをC-S-hとC-S-bにしました。つまり、Shiftキーも同時に押した時だけショートカットが有効になるようにしました。
さて、これをghost-on-herokuでも使いたいのですが、一筋縄では行きませんでした。 というのも、gitリポジトリからcloneしてデプロイするには、gruntのタスクを走らせて ビルドする必要があるからです。手動でやるのは簡単ですが、これをnpmでやる必要がありました。
結果的には、ghost-on-herokuのpackage.jsonを次のように修正することで解決できました。
diff --git a/package.json b/package.json
index 3af466a..aec84be 100644
--- a/package.json
+++ b/package.json
@@ -10,14 +10,37 @@
"private": true,
"version": "0.6.4",
"dependencies": {
- "ghost": "0.6.4",
+ "ghost": "https://github.com/dai-shi/Ghost/archive/0.6.4-for-emacs-keybinding.tar.gz",
"ghost-s3-storage": "~0.2.1",
"pg": "latest"
},
+ "devDependencies": {
+ "bower": "1.4.1",
+ "csscomb": "3.0.4",
+ "grunt": "0.4.5",
+ "grunt-bg-shell": "2.3.1",
+ "grunt-cli": "0.1.13",
+ "grunt-contrib-clean": "0.6.0",
+ "grunt-contrib-compress": "0.13.0",
+ "grunt-contrib-copy": "0.8.0",
+ "grunt-contrib-jshint": "0.11.2",
+ "grunt-contrib-uglify": "0.9.1",
+ "grunt-contrib-watch": "0.6.1",
+ "grunt-docker": "0.0.10",
+ "grunt-express-server": "0.5.1",
+ "grunt-jscs": "1.8.0",
+ "grunt-mocha-cli": "1.13.0",
+ "grunt-mocha-istanbul": "2.4.0",
+ "grunt-shell": "1.1.2",
+ "grunt-update-submodules": "0.4.1",
+ "matchdep": "0.3.0",
+ "top-gh-contribs": "2.0.2"
+ },
"engines": {
"node": "~0.10.0"
},
"scripts": {
+ "postinstall": "(cd node_modules/ghost/node_modules && ln -s -b ../../grunt-* .) && (cd node_modules/ghost/node_modules/.bin && ln -s -b ../../../.bin/bower) && (cd node_modules/ghost && grunt --force init && grunt prod)",
"start": "node server.js"
}
}
devDependenciesはもう少し削れるかもしれません。 この修正に加えて、heroku configの設定も行いました。
$ heroku config:set NPM_CONFIG_PRODUCTION=false NODE_MODULES_CACHE=false
これで期待通りになりました。
コメント