経緯
以前はfluxboxを使用しており、右クリックでメニューが出てきました。そのメニューはファイルを書き換えることでカスタマイズできました。
現在xmonadに移行しており、いくつかのキーにアプリケーションを割り当てています。
割り当てるアプリケーションが多くなると覚えるのが大変なので、カスタマイズできるメニューがないかと探していたのですが見つかりませんでした(探し方が悪いため?)。
そこで自分でスクリプトを書きました。慣れていないので多少時間はかかりました。
内容
Rubyスクリプト
GitHub で公開しています。
#!/usr/bin/env ruby # coding: utf-8 # peco binary PECO = File.expand_path "/usr/bin/peco" # terminal emulator (xterm/urxvt/mlterm) XTERM = "mlterm" # menu list menufile = File.expand_path "~/.mymenu" require 'tempfile' class MyMenu def initialize(menufile) @menufile = menufile @appfilepath = Tempfile.new("tmpnew").path @hash = Hash.new end protected def set_hash_and_list io1 = File.open(@menufile, "r") # filelist io2 = File.open(@appfilepath, "w") # list of application name io1.each {|line| line.strip! line.chomp! next if line == "" || (/^#/ =~ line) rows = line.split(/,/) rows[1] = rows[0] if rows[1].nil? @hash.store(rows[0], rows[1]) io2.puts rows[0] } io1.close io2.close end def exec_peco out = Tempfile.new("peco-out") err = Tempfile.new("peco-err") system "#{XTERM} -e sh -c '#{PECO} #{@appfilepath} > #{out.path} 2> #{err.path}'" res = `cat #{out.path}` if res != "" app = @hash[res.chomp!] system("#{app} &") end end public def exec_MyMenu self.set_hash_and_list self.exec_peco end end mymenu = MyMenu.new(menufile) mymenu.exec_MyMenu
このスクリプトの後半はるびきち様が公開している peco を参考にさせて頂きました。というよりもそのまま使用させて頂きました。
設定
mymenu.rb
XTERM に使用したいターミナルエミュレーターを指定します。
- xterm/urxvt/mlterm であれば大丈夫でした。
- gnome-terminal/lxterminal は失敗しました。
~/.mymenu
~/.mymenu を作成し、以下のように記載します。 このファイルが存在しないとエラーが出ます。
FD, gnome-terminal -e fd R, lxterminal -e R leafpad
メニューに表示したい内容と実行するコマンドをカンマで区切って記載するだけです。
- カンマの左側に記載した内容がメニューに表示されます。
- カンマの右側に記載した内容が実行されます。
- 省略した場合には左側の内容がそのままコマンドとして実行されます。
- ターミナルで実行したい場合には “(使用したいターミナル) -e (実行したいコマンド)” のように記載します。
使用法
mymenu.rbを好きなキーに割り当てます。
あとは好きなように絞り込みをするだけです。
Hit-a-Hint の設定をしておけば、「@」を押した後に候補の左端に表示されている文字を打ち込むことで即座に選択できるようになります。
コメントを残す