Hatena::ブログ(Diary)

プログラムとかののblog このページをアンテナに追加 RSSフィード Twitter

2014-10-13

第6回init.el読書会に参加しました

自分も書いてみようと思ったので書いてみます。自分はあまり指摘ができないので、

  • 気づいたこと
  • 自分が知らなかった技術

などを書こうと思います。

今回はGithubで検索して見つけたdragonwasrobotさんのinit.elを見ました。
dragonwasrobot/dot-emacs

jade.el

Jade - Template Engine
dot-emacs-d/modes/jade.el

これはJadeという、Haml, Slim, などと同様のHTMLテンプレートエンジンです。これは閉じタグがないタイプの軽量マークアップ言語のようです。
例はこんな感じ。
HTML

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>最高にクールなホームページ</title>
        <link rel="stylesheet" href="./css/app.css">
    </head>
    <body>
        <h1>最高にクールなホームページ</h1>
        <p>最高にクールなホームページへようこそ。</p>
        <script src="./js/app.js" charset="UTF-8"></script>
    </body>
</html>

JADE

doctype html
html
  head
    meta(charset='UTF-8')
    title 最高にクールなホームページ
    link(rel='stylesheet', href='./css/app.css')
  body
    h1 最高にクールなホームページ
    p 最高にクールなホームページへようこそ。
    script(src='./js/app.js', charset='UTF-8')

だいぶ楽に書けそうなテンプレートエンジンだと思います。

詳しい説明はこちらへ。
https://gist.github.com/japboy/5402844

dot-emacs.el

dot-emacs.el

気づいたこと、知らなかった設定
L67

(set-fringe-mode 4)

これはフリンジと呼ばれる左右にある余白の設定です。(set-fringe-mode 100)とかするとどんなものなのかがわかりやすい。

L68
iswitch-mode は古い。icomplete-modeかido-modeを使うべきらしい

L75
standard-indent は謎。一体なんの設定なのか。

L108

(setq cursor-type 'bar)

cursor-typeという設定がある。Emacsのカーソルを設定することができる。

(add-to-list 'default-frame-alist '(cursor-type . 'box)) ;; ボックス型カーソル
(add-to-list 'default-frame-alist '(cursor-type . 'hbar)) ;; 下線
(add-to-list 'default-frame-alist '(cursor-type . '(bar . 3)) ;; 幅3ポイントの縦棒カーソル

http://th.nao.ac.jp/MEMBER/zenitani/elisp-j.html#cursor

L110
saveplaceが便利そう。saveplaceはファイルを編集して、終了したときのカーソルの位置を覚えておく機能。


increment-number-at-pointというのがあるのを知った
Vimみたいにカーソル下の数字をインクリメントする機能。
dot-emacs.el#L222
IncrementNumber -EmacsWiki-

L199
kill-all-bufferはたまに便利そう。

;; すべてのバッファを削除する
(defun kill-all-buffers ()
  "Kills all emacs buffers."
  (interactive)
  (mapc (lambda (b) (kill-buffer b)) (buffer-list)))

dot-emacs.el#L199

aliases.el

dot-emacs-d/aliases.el
このファイルはEmacsでシェルのようにaliasを作っている

(defalias 'ms 'magit-status)
(defalias 'qrr 'query-replace-regexp)
(defalias 'er 'eval-region)

よく使うコマンドはこんな風に設定するといいみたいです。

coq.el

Coqについては↓へ。
Coqによる証明プログラミング

dot-emacs-d/modes/coq.el
eval-after-loadで(print)していてeval-after-loadが起きたことがわかりやすい

(eval-after-load "coq-mode"
  '(progn
     (print "In eval-after-load coq"))
     ...)

pretty-mode.elというものがある。
https://github.com/akatov/pretty-mode

終わりに

もう気力が続かないのでここで終わります。

init.el読書会は毎週土曜日22:00時、lingrのEmacs部屋でやってるので、興味のある方はぜひ参加してみてください。

http://emacs-jp.github.io/reading-init.el/

2014-10-05

Jenkinが終了できない場合の対処

Jenkinsを使っていてすんなりシャットダウンができたことが少なく、よく「シャットダウン中です」の状態から進まない。調べても、検索仕方がわるいのかシャットダウンが終わらない系のものが少ない。

なぜJenkinsはうまいことシャットダウンができないのか…。

f:id:pogin:20141005173515p:image:w640

この記事ではコマンドで強制的に停止、起動をするやり方を書く。

(WindowsLinuxのやり方は随時追加したい)

Macでのやり方


最初にやり方を書いておく。詳しいやり方は後ろの方に書く。

Homebrewの場合
すでにJenkinsが起動しているのなら、ターミナルで、

# jenkinsのジョブ名を見つける
launchctl list | grep jenkins
=> 20522    -    homebrew.mxcl.jenkins

# ジョブの停止
launchctl stop homebrew.mxcl.jenkins

# ジョブの起動
launchctl start homebrew.mxcl.jenkins

これで大丈夫のはず。

load, unloadでやる場合

# 自動起動の無効とJenkinsの停止
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist

# 自動起動の有効とJenkinsの起動
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist

詳しいやり方


Homebrewの場合

Homebrewからインストールしている場合、brew list jenkinsでどこにどんなファイルがあるかがわかる。

$ brew list jenkins
/usr/local/Cellar/jenkins/1.574/homebrew.mxcl.jenkins.plist
/usr/local/Cellar/jenkins/1.574/libexec* (3 files)

この、homebrew.mxcl.jenkins.plistがJenkinsを実行するための設定ファイルみたいなものである。plistファイルを使用してlaunchdがJenkinsをサービスとして起動している。すでに登録されている場合は

launchctl list | grep jenkins
# => 20522	-	homebrew.mxcl.jenkins

で見つかる。この、homebrew.mxcl.jenkins.plistは

/Library/LaunchAgents/
~/Library/LaunchAgents/

のどっちかに入ってる。ここを参考にした人は~/Library/LaunchAgents/に入ってると思う。

公式サイトのインストーラの場合

公式サイトの.pkgで入れた人は多分org.jenkins-ci.plistが /Library/LaunchDaemons/に入ってると思う。下のコマンドは予想で書いてる。.pkgでインストールされるファイルがorg.jenkins-ci.plistになる。

cd /Library*
sudo find . -type f | grep jenkins 
#=> /Library/LaunchDaemons/org.jenkins-ci.plist

起動、停止コマンド


homebrew.mxcl.jenkins、org.jenkins-ci.plistという名前がわかっていれば停止、起動コマンドが使える。普通にインストールしていればこのコマンドで事足りるはず。

# ジョブの停止
launchctl stop homebrew.mxcl.jenkins

# ジョブの起動
launchctl start homebrew.mxcl.jenkins

こうすることでJenkinsを強制的に再起動させることができる。

load, unloadでやる場合

load, unloadでも停止、起動をすることができる。その場合、どこにファイルがあるかを把握する必要がある。

Jenkinsのplistの場所は、大体ここらへんに入ってるはず。

/Library/LaunchAgents/
/Library/LaunchDaemons/

ここ を参考にした人は
~/Library/LaunchAgents/ に入ってるはず。

自動起動の無効、Jenkinsを起動している場合は停止する
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist

自動起動の有効、Jenkinsを起動している場合は起動させる
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist

これでJenkinsの強制再起動をすることができる。

まとめるのが意外と大変だったので、今回はここまで。

参考


Jenkinsのセットアップ - smallplaceの日記
muzigram: 「個人メモ」mac + jenkins の 設定変更と再起動
OS XにJenkinsをHomebrewでセットアップする - Qiita
command line - Start/Stop and Restart Jenkins service on Windows - Stack Overflow
Jenkins - Manual Restart - Stack Overflow
Jenkins を Mac で使う | Hazi.tech
壊れかけらぁの日常: Jenkinsとvimenvで最新版のVimを自動で手に入れよう
Jenkinsを使ってみよう(Mac OS X&Linux)[Ruby、Rails] - Build Insider
Starting and Accessing Jenkins - 日本語 - Jenkins Wiki
Thanks for using OSX Installer - Jenkins - Jenkins Wiki

整理されてないので整理が必要。

2014-08-07

Macが異様に重かったのが改善した

これを実行してFinderのplistを削除したら治った。

rm ~/Library/Preferences/com.apple.finder.plist && killall Finder

参考

http://qiita.com/takuhito-h/items/18f11ced1f2d5ab3334a

ert-runnerが動かなかったのでとりあえず動かす方法


Macでcask exec ert-runnerを動かすとなぜかCan not load file: subst-kscとなってうまく起動できない。これはMacの古いEmacs(Emacs22)を起動してしまうからうまくいかないわけで。

cask exec ert-runner
# Can not load file: subst-ksc
# M-: emacs-version RET => "22.1.1"


.cask/24.3.1/elpa/ert-runner-20140610.729/bin/ert-runner
を見たところとりあえず書き換えたら動いた。

--- ert-runner1	2014-08-07 15:37:39.000000000 +0900
+++ ert-runner	2014-08-07 15:36:26.000000000 +0900
@@ -3,9 +3,18 @@
 ERT_RUNNER="$(dirname $(dirname $0))/ert-runner.el"
 
 if [[ -n "$INSIDE_EMACS" ]]; then
-  ERT_RUNNER_EMACS="emacs"
+    if [[ `uname -s` =~ Darwin ]]; then
+        ERT_RUNNER_EMACS=/Applications/Emacs.app/Contents/MacOS/Emacs
+    else
+        ERT_RUNNER_EMACS=emacs
+        # ERT_RUNNER_EMACS="emacs"
+    fi
 else
-  ERT_RUNNER_EMACS="${EMACS:-emacs}"
+    if [[ `uname -s` =~ Darwin ]]; then
+        ERT_RUNNER_EMACS=/Applications/Emacs.app/Contents/MacOS/Emacs
+    else
+        ERT_RUNNER_EMACS=emacs
+    fi
 fi
 
 function has_option {

あまりにも適当に書きすぎてるからどうにかしたい。issueを出すべきか、他の方法を探すべきか。とりあえずメモしておく。