Microのプラグイン開発、文字列を出力するのプラグインを改修して、Linuxコマンドの実行をインフォバーに出力する方法を見ていきます。
今回は簡易的な内容の確認になりますので、現在の作業ディレクトリの確認のpwdコマンドを実行してみます。
先にpwdコマンドの実行を見ておきます。
$ cd ~ $ pwd
/home/pi
~/.config/micro/plug/sample/sample.lua
VERSION = "0.0.1" local micro = import("micro") local config = import("micro/config") local shell = import("micro/shell") function init() config.MakeCommand("pwd", fn, config.NoComplete) end function fn() local cmd = "pwd" local output, err = shell.ExecCommand(cmd) if err ~= nil then micro.InfoBar():Error(err) else micro.InfoBar():Message(output) end end
init関数内でコマンドモードでpwdを使用できるようにします。
fn関数内で
local cmd = "pwd"
local output, err = shell.ExecCommand(cmd)
とすることで、プラグイン内でLinuxのコマンドを実行できます。
実行結果はoutputに格納され、指定のコマンドが正しく実行されなかった場合はoutputの値が空文字になり、errにエラーメッセージが格納されます。
if err ~= nil then micro.InfoBar():Error(err) else micro.InfoBar():Message(output) end
とすることで、outputかerrのどちらかを出力できるようにします。
Microを起動し、コマンドモードで
> pwd
を実行すると、インフォバーに
/home/pi
等の値が出力されます。
shell.ExecCommand(cmd)
は引数有りのコマンドの実行の際に使用できまして、引数なしのコマンドを実行する場合は、
function fn() local cmd = "pwd" local output, err = shell.RunCommand(cmd) if err ~= nil then micro.InfoBar():Error(err) else micro.InfoBar():Message(output) end end
shell.RunCommand(cmd)を使用することも可能です。
shell.ExecCommandで引数有りの実行も見ておきます。
$ echo hoge
をMicroのプラグイン経由で実行できるようにしてみます。
~/.config/micro/plug/sample/sample.lua
VERSION = "0.0.1" local micro = import("micro") local config = import("micro/config") local shell = import("micro/shell") function init() config.MakeCommand("echo", fn, config.NoComplete) end function fn() local cmd = "echo" local arg1 = "hoge" local output, err = shell.ExecCommand(cmd, arg1) if err ~= nil then micro.InfoBar():Error(err) else micro.InfoBar():Message(output) end end
Microを起動し、コマンドモードで
> echo
を実行すると、インフォバーに
hoge
が出力されます。