Giter Club home page Giter Club logo

.emacs.d's People

Contributors

keicy avatar keisep avatar

Watchers

 avatar

Forkers

keisep

.emacs.d's Issues

環境整理

概要

原状が使いにくいため、一度根本的に見直し、シンプルな機能、使いやすいバインドに再構築する。

作業

  • キーバインド見直し
  • 使わない機能拡張削除

Scala REPL のキーバインドの設定方法を変更する

現状、 M-<return> が定義しても効かない。
理由は、ensimeのコードで map にこのバインドが定義されているための模様。
with-eval-after-load-feature でバインド定義してもこれを上書きできない模様、、。理由はよくわかんない、、できると思ってやっているんだが、。

解決法は下記。

(defun my-inf-binds()
  (bind-keys :map ensime-inf-mode-map
             ; システムコマンド
             ("M-<return>" . execute-extended-command)
             ("C-<tab>" . keicy-window-or-split)
             ("C-<return>" . comint-accumulate) ; デフォルトで M-<return> に割り当てられていたもの
             ; 編集
             ("M-j" . backward-char) ;一文字戻る
             ("C-M-j" . backward-word) ;一単語戻る
             ("M-k" . forward-char) ;一文字進む
             ("C-M-k" . forward-word) ;一単語進む
             ;("C-d" . delete-char) ;DEL ; これを追加すると `cntl-D` が効かなくなるので排除.ただこれがなくともデフォルトでこのバインドがシェル側に定義されているので困らない.
             ("C-M-d" . keicy-delete-word) ;単語DEL
             ("C-f" . delete-backward-char) ;Backspace
             ("C-M-f" . keicy-backward-delete-word) ;単語Backspace
             ("M-," . beginning-of-line) ;行頭
             ("M-." . end-of-line) ;行末
))
(add-hook 'ensime-inf-mode-hook 'my-inf-binds)

単に

(with-eval-after-load-feature 'ensime
  (bind-keys :map ensime-inf-mode-map
...

とするのではなく、 mode-hook に引っ掛けることで上書きできる!

非アクティブなウィンドウが見切れてしまう問題を解決

scala ブランチにマージする ref #44
【追記】Scala にとどまらない問題だったため master にマージする

ENSIME の Activator Shell バッファをスクロール禁止にする。
画面が見切れてしまい見えなくなってしまうためスクロールしないバッファにしたい。

行頭/行末 のキーバインド再考

現在 M-, M-. に割り当てているが、これらは慣習的に、IDEの定義元参照に使われている。
なので、他に良い割り当てが思いつけばそちらに移行したいと思う。

検討のポイントは下記

  • 押しやすいバインドであること
  • Shiftキー S- を活用することで、1つのキーで両者のバインドをまかなえる

ENSIME を導入

scala ブランチにマージする

必要なものは下記

  • Lightbend Activator (ScalaのALL in ONE 開発環境)
  • ENSIME (Emacs プラグイン)

手順は下記にまとめた

詳細な情報は下記参照

99_key-binds.el の mc/keyboard-quit の挙動を確認

実害はないが、微妙に関数が呼ばれていない。
このバインドに、通常の keyboard-quit を割り当てると望の挙動になるかも?検証してみる。
あるいは、 mc/keyboard-quit が正しく動作するように再設定する。

Scala向け入力補完機能の設定

scala ブランチにマージ ref #44

ensime を導入すると companey-mode も自動で入る、かつ、設定もされている。
なので、キーバインドなどを再定義する。

ENSIME の自動接続をONにする

customize-group から。ensimeのコマンドを入力したときにもし繋がっていなければ自動で繋いでくれるようになる。

検索・補完インタフェースツールの導入

下記参考に。

これを読むと、候補としては Helm , Ivy/Counsel のどちらかかな。

Helmには上記良い解説があり、感じも掴めているのでいけそう。
動作が重いのと、互換のない更新がネックらしいので、Ivyでもいけそうならシンプルにこちらでも良いかも。

キーバインドの定義リファクタ

  • 99_key-binds.el にまとめるのか、個々のプラグイン設定ファイルにまとめるのか
  • プラグインで定義されている key-map にカスタムのバインド定義をする箇所で、 with-eval-after-load-feature を使うようにする
    • helm の定義など、これを使えればもっとシンプルに定義し直せるかも
    • 下記コードが例
      • with-eval-after-load-featurebundle の中でなくても単独で使える
(with-eval-after-load-feature 'company
  (bind-keys :map company-active-map
             ("C-<return>" . company-abort)
             ("M-p" . nil)
             ("M-i" . company-select-previous)
             ("M-n" . company-select-next) ;デフォルトでこれだが明示的に
             ;("<tab>" . company-complete-common-or-cycle) ; デフォルト: company-complete-common
))

【追記】

この定義方法は、追加は問題なくできるが、デフォルトの挙動を上書きはできず負けてしまうという問題が発覚した、。
これではなく、下記の方法を用いるとちゃんと上書きできるのでこちらの方法でリファクタ実施する。

(defun my-inf-binds()
  (bind-keys :map ensime-inf-mode-map
             ; システムコマンド
             ("M-<return>" . execute-extended-command)
             ("C-<tab>" . keicy-window-or-split)
             ("C-<return>" . comint-accumulate) ; デフォルトで M-<return> に割り当てられていたもの
             ; 編集
             ("M-j" . backward-char) ;一文字戻る
             ("C-M-j" . backward-word) ;一単語戻る
             ("M-k" . forward-char) ;一文字進む
             ("C-M-k" . forward-word) ;一単語進む
             ;("C-d" . delete-char) ;DEL ; これを追加すると `cntl-D` が効かなくなるので排除.ただこれがなくともデフォルトでこのバインドがシェル側に定義されているので困らない.
             ("C-M-d" . keicy-delete-word) ;単語DEL
             ("C-f" . delete-backward-char) ;Backspace
             ("C-M-f" . keicy-backward-delete-word) ;単語Backspace
             ("M-," . beginning-of-line) ;行頭
             ("M-." . end-of-line) ;行末
))
(add-hook 'ensime-inf-mode-hook 'my-inf-binds)

sbt が必要ないか検証

ENSIMEの設定次第ではsbtが必要ないか検証。

  • customize-group > Ensime Server > Ensime Sbt Command:
    • /usr/bin/sbt
    • これをActivator に変える
    • この設定は必要ないっぽいが一応深堀してみる。↓だけで調子よく動いてはいる。
  • (setq sbt:program-name "activator") ; デフォルト sbt
    • これを設定ファイルに追記する

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.