初心者向けチュートリアルをうたっておきながら結局マニアックな内容でござる。
はじめに
タイトルで期待させておいて申し訳ありませんが、今回の記事はそれほど役立ちません。
これから紹介する方法を使えば、文字列をコピー&ペーストできるようになるのですが、それでも大きな問題を抱えているからです。
それは、「1行しかコピペできない」ことです。
このことをご了承ください。
以下では、
- ターミナル画面上で長いコマンドを打ち込まなくてはならないとき(pastebin IDとか)
- 「edit」コマンドでファイルを編集するとき
このようなときに「1行だけコピペする」方法について紹介します。
ターミナル画面で1行コピペ
CCコンピュータを右クリックして開くターミナル画面上でコピペする方法です。
これは、1行の長いコマンドを手で入力するのが面倒というときに便利かもしれません。
- ゲーム外で、1行の文字列をコピーしておく(文字列を選択中、CTRL+Cキーを押すまたはマウスで右クリックしてコピーを選択)
- ゲーム内のCCターミナル画面上で、CTRL+Vキーを押す。
- 1行の文字列(改行がない)ならば、問題なくコピペできる。ただし日本語は無理です。全て半角の英数字であることが条件。
「edit」コマンド使用時に1行コピペ
ターミナル画面上で直接ファイルを編集するには「edit」コマンドを使わなくてはなりませんが、
このコマンドでファイルを編集しているときに1行だけコピペできれば、ほんの少しだけ幸せになれるかもしれません。
10行程度のプログラムならば、10回に分けてコピペすれば完成しますし。
「CTRL and CTRL+V」方略
すでにコピーしてある文字列をペーストするには「CTRL+V」で。
と言いたいところですが、CTRLキーはメニューを呼び出すショートカットキーに割り当てられているために、ペーストがうまくできません。
そこでCC公式Forumで紹介されていたのが「CTRL and CTRL+V」方略です。
つまり1回CTRLキーを押すことによってメニューを呼び出しておいて、
その状態から、再度、「CTRL+V」でペーストする方法です。
このようにすることで、「edit」でファイル編集しているときに、1行だけですがコピーできるようになりました。
メニュー呼び出しキーを別のキーに変えよう
「CTRL and CTRL+V」なんてまどろっこしいこと毎回やってられるか!という人向けに根本的に問題解決する方法です。
具体的には、「edit」プログラムを直接書き換えて、メニュー呼び出しを別のキーに変えてしまおうというアプローチです。
「該当箇所を直接、編集して書き換える」
「edit2」という名前であらかじめ複製しておく。
> copy /rom/programs/edit edit2
複製した方を書き換え
> edit edit2
該当箇所は2箇所あります。
一つ目は、【553行目】です。この場所で「CTRL」キーの判定を行っています。
elseif param == keys.leftCtrl or param == keys.rightCtrl then
たとえば、ここを下記のように「Alt」キーに変えてしまいましょう。(大文字小文字の区別を間違えないように)
elseif param == keys.leftAlt or param == keys.rightAlt then
そうしてもう一つ、【52行目】に以下のような文字列(メッセージ)があります。
local sStatus = "Press Ctrl to access menu"
次のように書き換えておくと呼び出しキーを忘れたときに安心です。
local sStatus = "Press Alt to access menu"
書き換え済みのプログラム配布
上記2箇所を書き換えたプログラムを配布できると良いのですが、
さすがにこれだけ分量のあるプログラムをpastebinなどにアップするのは怖いです。
著作権侵害的な意味で。
そこで「modify_edit」プログラムを作ってみました。
このプログラムは「/rom/programs/edit」ファイルを読み取り、上記2箇所を修正した「edit2」というファイルを新しく作るプログラムです。
つまり元ファイルをコピーしてパッチを当てるプログラムですね。
pastebinコマンドを使うなりして、どうぞご自由にご利用ください。
複数行コピペしたいのだけど何とかなりません?
なりません。少なくともComputerCraftのかなり奥深いところまで手を入れないと無理です。
editプログラムは、文字の入力をCCの"char"イベントを使って実装しています。
"char"イベントは、キーボードで入力できる英数字記号を取り扱うイベントです。
そのため"char"イベントでは、「改行コード」を取り扱うことができません。
"char"イベント自体を改造して改行コードを取り扱えるようにするには、おそらくComputerCraft自体を書き換える必要があります。
CC作者さんがそのうち対応してくれるのを待ちましょう><*1
現状のCCのまま無理やり複数行コピペに対応するならば、たとえば次の方法が考えられます。
- メモ帳などのエディタを使って、元の文字列にある改行コードを全て別のキャラクター(たとえば"char"イベントで取り扱うことができるけれどめったに使われないキャラクター)に置換する。
- editコマンドを書き換えて、そのキャラクターがあったら改行するようにする。
でもメモ帳使うなら、直接saveフォルダに保存したほうが早いですよねww
まとめ
ターミナル画面上で1行だけならコピー&ペーストは簡単にできる。
複数行をまとめてコピペするのはほぼ無理です。簡単にはできそうにありません。
*1:もしかしたらLuajというJavaで書かれたLua環境自体を書き換える必要があるかも。その場合はさらに絶望的。