Skip to content

smzht/emacs-utils

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Emacs Utilities

Emacs の shell で動作するユティリティコマンド群です。

本コマンドを作成した後、emacs lisp のみで動作する次の設定を考えました。こちらの方が お手軽に使えると思いますので、併せて確認ください。

■ epeco

emacs 上の shell で peco もどきを実現するコマンドです。データの絞り込みに helm を 利用しています。

WSL で peco を利用するには Windows 10 1803 以降が必要なようですが、本コマンドには この制限はありません。

emacs が emacsclient と通信できるようになっており、helm が設定されていれば利用 可能です。同期バージョンと非同期バージョンがあり、それぞれ以下の特徴があります。

コマンド名称動作種別特徴
epeco-async非同期・入力するデータを全て取り込む前にコマンドが起動します
  〃 〃・migemo は使えません
  〃 〃・emacs を起動しているホストでのみ利用できます
epeco-sync同期・入力するデータを全て取り込んでからコマンドが起動します
  〃 〃・migemo が使えます(要 cmigemo)
  〃 〃・tramp で接続した先でも利用できます(emacsclient は必要)

使うコマンドを epeco という名称でシンボリックリンクしてお使いください。

使用方法

epeco [-q query] [file]
epeco -h

コマンドオプション

● -q query オプション

絞り込み文字列の初期値を設定するオプションです。

tramp の接続先から利用する場合の設定

tramp の接続先から epeco-sync や以降で紹介する einp を使う場合は、以下の設定を行ってください。

1)emacs を起動しているホストの ~/.ssh/config に以下のような設定を行う

Host <aliasname>
     HostName       <hostname>
     Port           <portno>    # 必要であれば
     User           <username>
     RemoteForward  /tmp/server /tmp/emacs1000/server # 1000 の数字は、id -u の値に置き換える

※ OpenSSH 6.7 でサポートされた Unix domain socket forwarding の機能を使っています

2)tramp の接続先の ~/.bashrc に以下の設定を行う

if [ -S /tmp/server ]; then
    mkdir -p /tmp/emacs$(id -u)
    mv /tmp/server /tmp/emacs$(id -u)
fi

3)以下のコマンドを発行してコネクションをクリアしてから、<aliasname> に tramp で再接続し、 M-x shell で shell を起動する

M-x tramp-cleanup-all-connections

4)コマンドパスの通ったディレクトリ(~/bin 等)に epeco-sync と einp(以降で説明)を複写し、 以下のコマンドにより、epeco コマンドを利用できるようにする

cd ~/bin
ln -s epeco-sync epeco

5)以降の使用例を参考に、コマンドを利用する

注)接続先への ssh 接続は、tramp を介して行うようにしてください。(dired でリモートホストを 開き、そこで M-x shell を実行する。)ローカルホストで起動した shell から ssh コマンドで リモートホストに接続しても、本コマンドは利用できません。また、ssh コマンドでリモートホスト に接続してしまった場合は、3)を再実行してください。

使用例

sleep 1000 & sleep 2000 & sleep 3000 &
ps -ef | epeco | awk '{print $2}'
ps -ef | epeco | awk '{print $2}' | xargs -r kill

find . -type d -name '.*' -prune -o -type d -print | epeco
find . -type d -name '.*' -prune -o -type d -print | epeco | xargs -i emacsclient -n {}

history | tac | epeco | cut -b8-
eval "$(history | tac | epeco | cut -b8-)" # xargs を使うと、cd などが上手く実行できない

ghq list | epeco | cut -d '/' -f 2,3
ghq list | epeco | cut -d '/' -f 2,3 | xargs -r -L 1 hub browse

docker ps -a | epeco | awk '{print $1}'
docker ps -a | epeco | awk '{print $1}' | xargs -r docker rm

docker images | epeco | awk '{print $3}'
docker images | epeco | awk '{print $3}' | xargs -r docker rmi

helm は M-a で全選択が機能しますので、候補を絞った後に利用すると便利です。

注意事項

● shell-mode の shell で動かすことを前提としたコマンドです

epeco-sync は ansi-term など shell-mode 以外の shell では動作しません。 epeco-async は shell-mode 以外の shell でも動作しますが、以降で紹介する einp と組み合わせて 利用する場合、shell-mode の shell が必要となります。

参考情報

helm の source の設定方法については、以下を参照してください。

ghq、hub の説明は以下のあたりを参照してください。 hub browse で利用する BROWSER 環境変数の設定は、cygstart、wslstart、xdg-open などを指定する のが便利かと思います。

関連情報

外部端末で peco を動かすラッパーが以下で紹介されています。emacs の環境下で peco そのものを使いたい場合は、こちらの利用を検討ください。

emacs でコマンドヒストリを使う方法としては以下の方法もあります。tramp の接続先でも 動作しますし、接続先に emacsclient が必要なく、tramp の接続であれば ssh の接続に 限らない(docker-tramp.el による docker exec の接続でも利用可能)などのメリットも あります。こちらの利用も検討ください。

■ einp

emacs 上の shell-mode で動作する、コマンド入力を支援するコマンドです。コマンドが標準入力で 受け付けた文字列を次に実行するコマンドとして登録します。

epeco と組み合わせて利用することを想定して作成しました。emacs が emacsclient と通信できる ようになっていれば利用可能です。

使用方法

einp [-s]
einp -h

コマンドオプション

● -s オプション

標準入力から受け付けた文字列が複数行の場合、一行のコマンドに変換して登録します。

使用例

echo ls | einp

echo -e "ls\nls"
echo -e "ls\nls" | einp
echo -e "ls\nls" | einp -s

sleep 1000 & sleep 2000 & sleep 3000 &
ps -ef | epeco | awk '{print $2}' | xargs -r echo kill
ps -ef | epeco | awk '{print $2}' | xargs -r echo kill | einp

history | tac | epeco | cut -b8-
history | tac | epeco | cut -b8- | einp
history | tac | epeco | cut -b8- | einp -s

ghq list -p | epeco | xargs -r -L 1 echo cd
ghq list -p | epeco | xargs -r -L 1 echo cd | einp

ghq list | epeco | cut -d '/' -f 2,3 | xargs -r -L 1 echo hub browse
ghq list | epeco | cut -d '/' -f 2,3 | xargs -r -L 1 echo hub browse | einp

docker ps -a | epeco | awk '{print $1}' | xargs -r echo docker rm
docker ps -a | epeco | awk '{print $1}' | xargs -r echo docker rm | einp

docker images | epeco | awk '{print $3}' | xargs -r echo docker rmi
docker images | epeco | awk '{print $3}' | xargs -r echo docker rmi | einp

よく使うコマンドを alias 設定しておくのが良いと思います。

alias ek="ps -ef | epeco | awk '{print \$2}' | xargs -r echo kill | einp"
alias eh="history | tac | epeco | cut -b8- | einp -s"
alias egc="ghq list -p | epeco | xargs -r -L 1 echo cd | einp"
alias egb="ghq list | epeco | cut -d '/' -f 2,3 | xargs -r -L 1 echo hub browse | einp"
alias edp="docker ps -a | epeco | awk '{print \$1}' | xargs -r echo docker rm | einp"
alias edi="docker images | epeco | awk '{print \$3}' | xargs -r echo docker rmi | einp"

helm は M-a で全選択が機能しますので、候補を絞った後に利用すると便利です。

注意事項

● shell-mode 以外の shell では動作しません

ansi-term など shell-mode 以外の shell では動作しません。

About

Emacs Utilities

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages