Microのプラグイン開発、Linuxのコマンドを実行する

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

が出力されます。

マインクラフト用ビジュアルエディタを開発しています。
詳しくはinunosinsi/mcws_blockly - githubをご覧ください。