LoginSignup
25
24

More than 5 years have passed since last update.

ソースコードを書いているときに "=" の前後にスペースを自動で挿入してくれる key-combo.el

Posted at

プログラムを書くとき,"=" の前後や "," の後ろにスペースを挿入する人は多いと思います.また,"'" を挿入すればたいていはもう一つ "'" 入力するでしょう.

このような決まりきった入力を楽に行ってくれる Elisp として smartchr.el が有名です.smartchr.el は,"=" を入力したときに " = " を挿入するというように,1つのキーで2文字以上の文字を挿入することができます.また,1つのキーに対して複数の割り当てが行えるため,例えば "=" に " = " と " == " を割り当てれば,"=" を1回押すと " = " が,2回押すと " == "が,3回押すとまた " = " が挿入される,という設定が可能です.

以上のような素晴らしい機能を持つ smartchr.el ですが,日頃打ち慣れたキー入力で問題が発生することがあります.例えば,"=" キーに " = " を,">" キーに " > " を設定している場合,Ruby のハッシュ記号 "=>" を入力したときに " = > " という文字が挿入されてしまいます.

この問題を解決したのが smartchr.el の後継に当たる key-combo.el です.key-combo.el では,"=" の入力に " = " を割り当てる設定に加えて,">=" の入力に " >= " を割り当てるといったことが可能になります.

インストール方法は以下のとおりです.

  1. key-combo.el をロードパスの通ったディレクトリに置く ((package-install 'key-combo) でも可)
  2. .emacs に (require 'key-combo) を記述する

key-combo.el は .emacs に (key-combo-load-default) と書けばおすすめの設定が自動で行われます.私はこの設定が気に入らなかったので,自分で設定を書きました.key-combo の設定の参考として最後に私の設定を添付しておきます.C 言語や javascript に key-combo の設定を適用するように書いていますが,Ruby 以外はほとんど書かないので設定内容はかなり Ruby に最適化されてます.

(require 'key-combo)
(key-combo-mode 1)


;;; 各モードに対するキー設定
(setq key-combo-lisp-mode-hooks
      '(lisp-mode-hook
        emacs-lisp-mode-hook
        lisp-interaction-mode-hook
        inferior-gauche-mode-hook
        scheme-mode-hook))

(setq key-combo-lisp-default
      '(("."  . " . ")
        (","  . (key-combo-execute-orignal))
        (",@" . " ,@")
        (";"  . (";;;; " ";"))
        ("="  . ("= " "eq " "equal "))
        (">=" . ">= ")))

(setq key-combo-common-mode-hooks
      '(c-mode-common-hook
        php-mode-hook
        ruby-mode-hook
        cperl-mode-hook
        javascript-mode-hook
        js-mode-hook
        js2-mode-hook))

(setq key-combo-common-default
      '((","  . (", " ","))
        ("="  . (" = " " == " " === " "="))
        ("=>" . " => ")
        ("=~" . " =~ ")
        ("=*" . " =* ")
        ("+"  . (" + " " += " "+"))
        ("+=" . " += ")
        ("-"  . (" - " " -= " "-"))
        ("-=" . " -= ")
        ("->" . " -> ")
        (">"  . (" > " " => " " >= " ">"))
        (">=" . " >= ")
        ("%"  . (" % " " %= " "%"))
        ("%="  . " %= ")
        ("!" . (" != " " !~ " "!"))
        ("!="  . " != " )
        ("!~" . " !~ ")
        ("~" . (" =~ " "~"))
        ("::" . " :: ")
        ("&"  . (" & " " && " "&"))
        ("&=" . " &= ")
        ("&&=" . " &&= ")
        ("*"  . (" * " "**" "*"))
        ("*="  . " *= " )
        ("<" . (" < " " <= " "<"))
        ("<=" . " <= ")
        ("<<=" . " <<= ")
        ("<-" . " <- ")
        ("|"  . (" ||= " " || " "|"))
        ("|=" . " |= ")
        ("||=" . " ||= ")
        ("/" . ("/`!!'/" " / " "// "))
        ("/=" . " /= ")
        ("/*" . "/* `!!' */")
        ("{" . ("{`!!'}" "{"))
        ("{|" . "{ |`!!'|  }")
        ("\"" . ("\"`!!'\"" "\""))
        ("'" . ("'`!!''" "'"))
        ("(" . ("(`!!')" "("))))


(key-combo-define-hook key-combo-common-mode-hooks
                       'key-combo-common-load-default
                       key-combo-common-default)
(key-combo-define-hook key-combo-lisp-mode-hooks
                       'key-combo-lisp-load-default
                       key-combo-lisp-default)
25
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
24