EmcasのC-mを便利にするsmart-newline.elを公開した

昨日の記事(EmacsのC-mを便利にしてキーバインド先を増やすハック - ainameの日記)で公開した設定を使ってくれたっぽい人が何人かいたので、ちょっと直してgithubに公開した。

https://github.com/ainame/smart-newline.el

詳細は、昨日の記事や短いのでソースコード参照だけど、要するにC-mだけでC-oとC-jをまかなって、その2つのキーを別の拡張用に割り当てようという試みです。(indentなしのnewlineは使わない前提だけど) まだ使い始めたばかりなので快適かどうかよくわからない。

使い方は、git cloneするか、el-get用に

(setq el-get-sources '(
        (:name smart-newline
               :type github
               :website "https://github.com/ainame/smart-newline.el"
               :pkgname "ainame/smart-newline.el")
        )
)

こんな感じでレシピを追加してインストールして、一行設定を書く。

(define-key global-map (kbd "C-m") 'smart-newline)

昨日公開した物のままだと以下の様な時に困ったので仕様を修正してる。

↓にカーソルがある状態
|def foo
  xxx
end

↓[C-m]

| ←にカーソルが来て新しいメソッドを書き始める
def foo
  xxx
end

↓def[SPC]

def |←defまで打つとendが補完される
end
def foo
  xxx
end

↓bar[C-m]

def bar
  | ←barというメソッド名書いて改行したけど、endと次のdefの間に改行なくて気持ち悪い。
end
def foo
  xxx
end

上の様な場合が気持ち悪いので、最初にfooメソッドのdefの前で改行を入れた後に2回改行叩くと、↓の状態になるように修正した。

↓にカーソルがある状態
|def foo
  xxx
end

↓[C-m][C-m]

| ←def fooの行の先頭から2連続で改行したらopen-line2回実行できて気持よくメソッド書き始められる

def foo
  xxx
end

あと他に、S式の途中みたいな箇所で改行する時に、open-line使われておかしい感じだったのを、newline-and-indent使うようにした。 かなり適当な拡張の割にsmartって名前付けてしまって名前負けしてる気がするのでMELPA等への公開は予定しておりません。