Skip to content

Latest commit

 

History

History
87 lines (51 loc) · 10.7 KB

README_ja.md

File metadata and controls

87 lines (51 loc) · 10.7 KB

a-shell: iOS用の複数ウィンドウを備えたターミナル

Platform: iOS Twitter Discord

このプロジェクトの目標は、iOS上でシンプルなUnixのようなターミナルを提供することです。ios_systemを使用してコマンドを解釈し、ios_systemエコシステムのすべてのコマンド(nslookup、whois、python3、lua、pdflatex、lualatexなど)を含んでいます。

プロジェクトは、iPadOS 13の複数ウィンドウの作成と管理の機能を使用しています。各ウィンドウはそれぞれのコンテキスト、外観、コマンド履歴、およびカレントディレクトリを持っています。newWindowは新しいウィンドウを開き、exitは現在のウィンドウを閉じます。

ヘルプを見るには、コマンドラインでhelpと入力します。help -lは利用可能なすべてのコマンドを一覧表示します。help -l | grep commandを入力すると、お気に入りのコマンドがすでにインストールされているかどうかがわかります。

configを使用してa-Shellの外観を変更できます。これにより、フォント、フォントサイズ、背景色、テキストの色、およびカーソルの色と形状を変更できます。各ウィンドウはそれぞれの外観を持つことができます。config -pは現在のウィンドウの設定を永続化し、将来のすべてのウィンドウで使用されます。config -tを使用してツールバーを設定することもできます。

新しいウィンドウを開くと、a-Shellは.profileファイルが存在する場合にそれを実行します。これを使用して環境変数をカスタマイズしたり、一時ファイルをクリーンアップしたりできます。

a-Shellの使用方法の詳細については、ドキュメントを参照してください。

AppStore

a-Shellは現在、AppStoreで入手可能です。

コンパイル方法

プロジェクトを自分でコンパイルしたい場合は、以下の手順が必要です:

  • git submodule update --init --recursiveでプロジェクト全体とそのサブモジュールをダウンロードします
  • downloadFrameworks.shですべてのxcFrameworksをダウンロードします
    • これにより、標準のAppleフレームワークがダウンロードされます(xcfs/.build/artefacts/xcfsにあり、チェックサム制御があります)。
    • Pythonフレームワークは多すぎて(2000以上)自動でダウンロードできません。プロジェクトの「Embed」ステップからそれらを削除するか、以下の手順でコンパイルすることができます:
      • Xcode Command Line Toolsが必要です。まだインストールされていない場合はsudo xcode-select --install
      • macOS向けのOpenSSLライブラリ(libsslおよびlibcrypto)、XQuartz(freetype)、Node.js(npm)が必要です(iOSおよびシミュレータ向けのバージョンは提供しています)。
      • cd cpythonでディレクトリをcpythonに変更します
      • sh ./downloadAndCompile.shでPython 3.11および関連するライブラリやフレームワークをビルドします(このステップには2GHzのi5 MBPでは数時間かかります)。

a-Shellは現在デバイス上で動作します。a-Shell miniはデバイス上およびシミュレータ上で動作できます。

Python 3.xはiOS 14 SDKでのみ使用できる関数を使用しているため、最小iOSバージョンを14.0に設定しています。これによりバイナリのサイズも削減されるため、ios_systemや他のフレームワークも同じ設定になっています。iOS 13デバイスで実行する必要がある場合は、ほとんどのフレームワークを再コンパイルする必要があります。

ホームディレクトリ

iOSでは、~ディレクトリには書き込みできず、~/Documents/~/Library/、および~/tmpのみに書き込むことができます。ほとんどのUnixプログラムは設定ファイルが$HOMEにあると想定しています。

したがって、a-Shellはこれらが~/Documentsを指すようにいくつかの環境変数を変更します。envを入力してそれらを確認できます。

ほとんどの設定ファイル(Pythonパッケージ、TeXファイル、Clang SDKなど)は~/Libraryにあります。

サンドボックスとブックマーク

a-ShellはiOS 13の機能を使用して他のアプリのサンドボックス内のディレクトリにアクセスしています。pickFolderを入力して他のアプリ内のディレクトリにアクセスできます。一度ディレクトリを選択すると、ここでほぼすべての操作が可能になるため、注意してください。

pickFolderでアクセスしたすべてのディレクトリはブックマークされるため、pickFolderなしで後でそれらに戻ることができます。また、bookmarkでカレントディレクトリをブックマークすることもできます。showmarksは現在のブックマークをすべて列挙し、jump markおよびcd ~markはカレントディレクトリをその特定のブックマークに変更し、renamemarkは特定のブックマークの名前を変更し、deletemarkはブックマークを削除します。

設定のユーザーが変更可能なオプションで、sglrdコマンドを代わりに、または併用して使用することができます。

迷子になった場合は、cdで常に~/Documents/に戻ることができます。cd -は直前のディレクトリに変更します。

ショートカット

a-ShellはApple Shortcutsと互換性があり、ユーザーにシェルの完全な制御を提供します。a-Shellコマンドを使用してファイルのダウンロード、処理、リリースを行う複雑なショートカットを作成できます。3つのショートカットがあります:

  • Execute Commandはコマンドのリストを受け取り、それらを順番に実行します。入力はファイルまたはテキストノードであり、ノード内のコマンドが実行されます。
  • Put FileおよびGet Fileはa-Shellとファイルを転送するために使用されます。

ショートカットは「In Extension」または「In App」で実行できます。「In Extension」はAppの軽量バージョンで、グラフィカルユーザーインターフェースがなしでショートカットが実行されることを意味します。設定ファイルやシステムライブラリ(mkdir、nslookup、whois、touch、cat、echoなど)が不要な軽量なコマンドに適しています。「In App」はメインアプリケーションを開いてショートカットを実行します。すべてのコマンドにアクセスできますが、時間がかかります。ショートカットがアプリを開いたら、open shortcuts://コマンドを呼び出してShortcutsアプリに戻ることができます。デフォルトの動作は、コマンドの内容に基づいてできるだけショートカットを「In Extension」で実行しようとすることです。特定のショートカットを「In App」または「In Extension」で実行することもできますが、常に機能するとは限らないことに注意してください。

両方の種類のショートカットはデフォルトで同じ特定のディレクトリ、$SHORTCUTSまたは~shortcutsで実行されます。もちろん、cdおよびjumpコマンドを実行できるため、ほぼどこにでも移動できます。

プログラミング / コマンドの追加:

a-Shellには、Python、Lua、JS、C、C++、TeXなどのいくつかのプログラミング言語がインストールされています。

CおよびC++では、プログラムをclang program.cでコンパイルし、WebAssemblyファイルが生成されます。その後、wasm a.outで実行できます。また、複数のオブジェクトファイルをリンクしたり、arで静的ライブラリを作成したりすることもできます。プログラムに満足したら、それを$PATH内のディレクトリに移動させ(例:~/Documents/bin)、program.wasmに名前を変更すると、コマンドラインでprogramと入力すると実行されるようになります。

また、メインコンピューターで私たち独自のWASI-sdkを使用してプログラムをクロスコンパイルし、WebAssemblyファイルをiPadやiPhoneに転送することもできます。

a-Shell専用のコンパイル済みWebAssemblyコマンドは https://github.com/holzschu/a-Shell-commands で入手可能です。これにはzipunzipxzffmpegなどが含まれます。これらはダウンロードして$PATHに配置することでiPadにインストールできます。

ソケットなし、フォークなし、対話的なユーザー入力なし(他のコマンドからの入力をcommand | wasm program.wasmでパイプすることは問題ありません)といったWebAssemblyの制約があります。

Pythonでは、pip install packagenameを使用して追加のパッケージをインストールできますが、それらが純粋なPythonである場合に限られます。CコンパイラはまだPythonで使用できる動的ライブラリを生成することができません。

TeXのファイルはデフォルトではインストールされていません。任意のTeXコマンドを入力すると、システムはそれをダウンロードするように促します。LuaTeXのファイルも同様です。

VoiceOver

設定でVoiceOverを有効にすると、a-ShellはVoiceOverと連携し、コマンドを入力する際に読み上げたり、結果を読み上げたり、指で触れた画面を読み上げたりなどを行います。