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
が出力されます。