iT邦幫忙

2021 iThome 鐵人賽

DAY 3
0
Software Development

在麥塊的農場裡寫 Lua系列 第 3

Day3 自訂電腦開機訊息

上一回,我提到 CC: Tweaked 的 Computer 方塊有許多基礎指令
但我不打算逐一介紹各個指令用法
請大家自行用 help 查詢唷!

開機訊息怎麼產生的

今天開始,我們來抽絲剝繭,看看這個「Computer」到底是怎麼寫出來的?
首先,就從自訂電腦開機訊息開始!
但是在自訂開機訊息之前,必須先了解開機訊息怎麼產生的
用 ls / dir 指令簡單瀏覽一下,可以看到根目錄有個 rom 資料夾
應該可以理解為電腦的核心程式碼
rom 底下有一些資料夾和兩個檔案 motd.txt 和 startup.lua
startup.lua 可容易理解為開機後自動執行的程式碼
那麼 motd.txt 呢?
MOTD 據說是 Message of the day 的縮寫

試著查看 motd.txt 內容

cd rom/
edit motd.txt

發現第 14 行有一段文字就是上一篇文章的電腦開機訊息
Use "monitor" to run a program on a attached monitor.

如果你用 reboot 指令,或是快速鍵 ctrl + t 按壓約 2 秒重新開機
會發現每次的開機訊息是隨機的
除此之外,motd.txt 還有一段文字如下
You can disable these messages by running "set motd.enable false".

所以我已經很確定幾件事:

  1. motd.txt 存放開機訊息,並且每次隨機從裡面挑一行顯示
  2. 輸入 set motd.enable false 就可以關閉開機訊息

另外,執行 motd 後,也會隨機顯示開機訊息

有了這些資訊後,再試著回到 startup.lua 尋找 motd 關鍵字,發現以下這段

-- Show MOTD
if settings.get("motd.enable") then
    shell.run("motd")
end

也就是說,開機後執行 startup.lua 並判斷 motd.enable 環境變數,如果 motd.enable 是 true,就在當前的 shell window 執行 motd 指令,隨機顯示一條開機訊息。

可以自訂開機訊息嗎?

自訂開機訊息只是我一開始的假設與期望,那麼實際上可以做到嗎?
我們來看看 rom/programs/motd.lua 內容

local date = os.date("*t")
if date.month == 1 and date.day == 1 then
    print("Happy new year!")
elseif date.month == 12 and date.day == 24 then
    print("Merry X-mas!")
elseif date.month == 10 and date.day == 31 then
    print("OOoooOOOoooo! Spooky!")
else
    local tMotd = {}

    for sPath in string.gmatch(settings.get("motd.path"), "[^:]+") do
        if fs.exists(sPath) then
            for sLine in io.lines(sPath) do
                table.insert(tMotd, sLine)
            end
        end
    end

    if #tMotd == 0 then
        print("missingno")
    else
        print(tMotd[math.random(1, #tMotd)])
    end
end

大家看到這段程式碼,有會心一笑嗎 :)
作者在這裡埋了些趣味,例如在聖誕夜開機,電腦就會跟你說 Merry X-mas!
接著下半段的程式碼,沒有完全看懂沒關係
但應該可以大概猜出來,它會去讀取 motd.path 變數,來取得開機訊息檔的路徑
可想而知,motd.path 的預設值是 /rom/motd.txt

那我們直接改看看吧!
(set 是 CC: Tweaked 用 Lua 設計的指令,請用 help set 查詢說明)

set motd.path "/mymotd.txt"
edit mymotd.txt

在 mymotd.txt 寫下
Hello Egg ! Welcome to 2021 ironman competition. Come on and good luck !
重新開機後就可以看到這個畫面啦!

只能用這種笨方法寫 Code 嗎?

今天的分享到這裡,但有人覺得在 CC: Tweaked Computer 裡面寫 Code 很笨拙嗎?
沒有快速鍵或指令可以方便搜尋檔案內的文字
也沒辦法像 vim 那樣,快速瀏覽檔案、刪除整行、選擇範圍、搜尋取代 ...
幾乎什麼工具指令都沒有(或只是我不知道?如果你們知道,請跟我說,謝謝~)
這樣寫 Code 太沒效率了 ><

下一回,我們來尋找更適當的開發工具,請期待~


上一篇
Day2 將麥塊農場的電腦「開機」吧!
下一篇
Day4 尋找合適的 Lua 開發工具
系列文
在麥塊的農場裡寫 Lua30

尚未有邦友留言

立即登入留言