これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド FvwmPerl です。
プログラム:
NAME
FvwmPerl - fvwm Perl マニピュレータおよびプリプロセッサ
SYNOPSIS
FvwmPerl は次の方法で生成される必要があります。 fvwm(1) 通常の機能の場合。
このモジュールを実行するには、次のコマンドを構成内のどこかに配置します。
モジュールFvwmPerl [パラメータ]
または:
ModuleSynchronize FvwmPerl [params]
FvwmPerl へのコマンドの送信をすぐに開始したい場合。
DESCRIPTION
このモジュールは、Perl スクリプト機能を使用して fvwm コマンドを拡張することを目的としています。 それは可能にする
fvwm 設定ファイルに Perl 式を埋め込み、fvwm コマンドを構築します。
呼び出し
FvwmPerl の一意で永続的なインスタンスを呼び出したい場合は、次のようにすることをお勧めします。
からこれを行う 開始関数。 上から呼び出すことも可能ですが、
ここでは議論されていない問題もいくつかあります。
AddToFunc StartFunction I モジュール FvwmPerl
コマンド ライン スイッチがいくつかあります。
FvwmPerl [ --eval ライン ] [ - ロード ファイル ] [ -前処理 [ - 見積もり 文字 ] [ --winid ウィド] [
--cmd ] [ --nosend ] [ --noremove ] [ 行 | ファイル ] ] [ - 書き出す [名前] ] [ - 止まる ] [
--nolock ] [別名]
長いスイッチは、短い XNUMX 文字のスイッチに省略される場合があります。
-e|--eval line - 指定された Perl コードを評価します
-l|- ロード file - 指定されたファイル内の Perl コードを評価します
-p|-前処理 [ file ] - 指定された fvwm 構成ファイルを前処理します
次の 5 つのオプションは、以下と一緒にのみ有効です。 -前処理 オプションを選択します。
-c|--cmd line - ファイルの代わりに前処理される fvwm コマンド
-q|- 見積もり char - デフォルトの '%' 引用符を変更します
-w|--winid wid - 明示的なウィンドウコンテキストを設定します (数字で始まる必要があり、oct または
XNUMX 進形式。 このウィンドウ ID は、暗黙的なウィンドウ コンテキストがあれば上書きします)
--nosend - 前処理されたファイルを次の宛先に送信しないでください。 fvwm for 読むデフォルトは送信です。
非 fvwm 構成ファイルの前処理に役立ちます。
--noremove - 前処理されたファイルを送信した後は削除しないでください。 fvwm for 読むing、
デフォルトは削除です。 デバッグに役立ちます。
-x|- 書き出す [names] - fvwm ショートカット関数を定義します (デフォルトでは、次の名前の XNUMX つの関数が使用されます)
「評価」と「.」)。 このオプションの意味は、 - 止まる.
-s|- 止まる - その後も実行を継続します --eval, - ロード or -前処理 処理されます。 に
デフォルトでは、この場合モジュールは永続的ではありません。つまり、 --nostay 想定されます。
--nolock - 3 つのアクション オプションのいずれかが指定されると、このオプションによりロックが解除されます。 fvwm
すぐに。 デフォルトでは、要求されたアクションは同期的に実行されます。 これだけで
次のように呼び出された場合の違い:
ModuleSynchronous FvwmPerl --someconfig.ppp を前処理します
If --nolock ここに追加されます、 モジュール同期 すぐに戻ります。 ご了承ください モジュール 収益
このオプションに関係なく、すぐに実行されます。
使用する ALIAS
エイリアスを使用すると、複数のモジュール呼び出しを持ち、すべての呼び出しを個別に動作させることができます。
ここに例があります:
モジュール同期 FvwmPerl FvwmPerl-JustTest
SendToModule FvwmPerl-JustTest eval $a = 2 + 2; $b = $a
SendToModule FvwmPerl-JustTest eval cmd("Echo 2 + 2 = $b")
KillModule FvwmPerl FvwmPerl-JustTest
前処理 実施例
効果的な処理ソリューションの XNUMX つは、fvwm 設定全体を次のように渡すことです。
Perl コードを「FvwmPerl --preprocess」に埋め込みました。 別のアプローチは、perl を記述することです。
fvwm コマンドを生成し、実行のために送信するスクリプト。このスクリプトはロードされる可能性があります。
「FvwmPerl --load」を使用します。 ただし、前処理のみを行う中間ソリューションもあります
個別の設定行 (または、別の Perl コマンドを実行して、
fvwm コマンドを生成します)。
次のコード スニペットは、特定の機能に算術演算と文字列スクリプトの機能を追加します。
これが必要な行。 これを使用するには、最初のコマンドとして FvwmPerl を起動する必要があるため、
他のコマンドは事前処理を求められる場合があります。
モジュール同期FvwmPerl
AddToFunc 。
+ I SendToModule FvwmPerl 前処理 -c -- $*
。 Exec exec xterm -name xterm-%{++$i}% # 一意の名前を使用します
。 GotoDesk 0 %{ $[desk.n] + 1 }% # 次のデスクに移動
。 Exec exec %{ -x "/usr/bin/X11/aterm" ? "aterm" : "xterm" }% -sb
# ウィンドウを中央に配置する
次へ (マイウィンドウ) 。 動く \
%{($WIDTH - $[w.width]) / 2}%p %{($HEIGHT - $[w.height]) / 2}%p
。 Exec exec xmessage %{2 + 2}% # 単純な計算機
。 %{main::show_message(2 + 2, "さらに別の電卓"); ""}%
ACTIONS
FvwmPerl が実行できるアクションはいくつかあります。
評価する perlコード
Perl コードの行を評価します。
特別な機能 cmd("指図") Perl コードでコマンドを送り返すために使用できます。
fvwm。
Perl コードにエラーが含まれている場合、エラーは標準エラー ストリームに出力されます。
[FvwmPerl][評価]: ヘッダーが先頭に追加されます。
負荷 ファイル名
Perl コードのファイルをロードします。 ファイルが完全修飾されていない場合は、
ユーザー ディレクトリ $FVWM_USERDIR (通常は ~/.fvwm) およびシステム全体のデータ ディレクトリ
$FVWM_DATADIR。
特別な機能 cmd("指図") Perl コードでコマンドを送り返すために使用できます。
fvwm。
Perl コードにエラーが含まれている場合、エラーは標準エラー ストリームに出力されます。
[FvwmPerl][ロード]: ヘッダーが先頭に追加されます。
前処理 [-q|--quote char] [-c|--cmd] [ライン | file]
fvwm 構成の前処理 file または (--cmd が指定されている場合) ライン。 このファイルには次の行が含まれています
(通常は fvwm コマンド)、特別にフォーマット済みの Perl コードには触れません。
加工して交換しました。 で囲まれたテキスト %{ ... }% 区切り文字、どこからでも始められます
行にあり、同じ行または別の行のどこかで終わるのが Perl コードです。
この 率 パラメータは Perl コードの区切り文字を変更します。 単一の文字が与えられた場合、次のように
「@」、区切り文字は次のとおりです。 @{ ... }@。 指定された引用符が 2 文字の場合、次のようになります <>、引用符
<{ ... }>
Perl コードは、その評価結果に置き換えられます。 つまり、%{$a = "c"; ++$a}%
は「d」に置き換えられます。
評価が違う 評価する と 負荷 PreprocessNamespace パッケージの下で実行されます
となし つかいます 厳格なしたがって、心配することなく、任意の変数名を自由に使用できます。
衝突。 undef または空のリストを意味するために初期化されていない変数を使用しないでください (それらは
実際には以前の前処理アクションによって初期化される可能性があります)、次の場合はクリーンアップを実行します。
必要です。 の変数と関数は、 メイン パッケージはまだ利用可能です。
::cmd() また ::スキップ()ただし、その間にアクセスするのは得策ではありません。
前処理。
特別な機能があります include(file) ファイルをロードし、前処理し、
前処理された結果を返します。 再帰を避けてください。
埋め込まれた Perl コードにエラーが含まれている場合は、標準エラーに出力されます。
ストリームの先頭に [FvwmPerl][前処理]: ヘッダ。 結果として
この場合、置換は空です。
Perl コードでは次の変数を使用できます。
$USER、$DISPLAY、$WIDTH、$HEIGHT、$FVWM_VERSION、$FVWM_MODULEDIR、$FVWM_DATADIR、
$FVWM_USERDIR
次の行ベースのディレクティブは、前処理時に認識されます。 彼らです
Perl コード (存在する場合) が置換された後に処理されます。
%繰り返す カウント
次の行を繰り返します カウント 回。
%モジュール構成 モジュール名 [ 破壊 ]
次の行が指定されたモジュール構成として解釈されます。 もしも
「destroy」を指定すると、以前のモジュール構成が最初に破棄されます。
%接頭辞 接頭辞
次の行の先頭に引用符を付けます。 接頭辞.
%終わり 任意のコメント
上記のディレクティブのいずれかを終了し、ネストすることができます。
例:
%プレフィックス「AddToFunc SwitchToWindow I」
アイコン化をオフにする
窓シェードオフ
上げる
ワープトゥウィンドウ 50 50
%終わり
%ModuleConfig FvwmPager の破棄
カラーセット 0
フォント lucidasans-10
デスクトップスケール 28
ミニアイコン
%End ModuleConfig FvwmPager
%Prefix "すべて (MyWindowToAnimate) ResizeMove "
100 100 %{($WIDTH - 100) / 2}% %{($HEIGHT - 100) / 2}%
%繰り返し %{$count}%
br w+2c w+2c w-1c w-1c
%終わり
%繰り返し %{$count}%
br w-2c w-2c w+1c w+1c
%終わり
%終了プレフィックス
追加の前処理パラメータ --nosend および --noremove も指定できます。 彼らのを見てください
上部の説明。
export [関数名]
へ送る fvwm さまざまな機能をアクティブ化するのに役立つショートカット機能の定義
モジュールのアクション (すなわち、 評価する, 負荷 と 前処理).
関数名 (関数名) はカンマまたは空白で区切ることができます。 デフォルトでは、
XNUMX つの関数「Eval」と「.」 が想定されます。
関数に定義されている実際のアクションは、可能であれば関数名から推測されます。
ここで、関数名は「.」です。 のために予約されています 前処理 をご利用ください。
たとえば、次の XNUMX つの fvwm コマンドのいずれか
SendToModule MyPerl エクスポート PerlEval,PP
FvwmPerl --export PerlEval,PP MyPerl
次の XNUMX つのショートカット関数を定義します。
DestroyFunc PerlEval
AddToFunc I SendToModule MyPerl eval $*
デストロイファンクPP
AddToFunc I SendToModule MyPerl 前処理 -c -- $*
これら 4 つのアクションは、次の 3 つの方法のいずれかで要求できます。 1) FvwmPerl が有効な場合のコマンド ライン。
呼び出されます (この場合、FvwmPerl は、次の場合を除き、有効期間が短くなります) - 止まる or - 書き出す も与えられます)、2)
SendToModule を使用して fvwm config で対応するメッセージを送信することにより、3)
Perl コード内の対応する Perl 関数。
関数
Perl コードで呼び出すことができる関数がいくつかあります。
cmd($fvwm_command)
の場合 評価する or 負荷 - 文字列を fvwm に送り返す $fvwm_command。 の場合
前処理 - 文字列を追加します $fvwm_command 埋め込み Perl コードの出力に。
do_eval($perl_code)
この関数は次のものと同等です。 評価する 文字列の機能 $perl_code,
上述した。
ロード($ filename)
この関数は次のものと同等です。 負荷 ファイル $filename の機能、説明
上記。
前処理(@params、 ["-c $コマンド"] [$ファイル名])
この関数は次のものと同等です。 前処理 指定されたパラメータを使用した機能
および上記のファイル $filename 。
輸出($func_names、 [$do_unexport])
この関数は次のものと同等です。 export 指定された $func_names を使用した機能、
上で説明した。 XNUMX月も エクスポート解除 XNUMX 番目のパラメータが true の場合、関数名。
関数名はカンマまたは空白、あるいはその両方で区切る必要があります。 もしも $func_names is
空の場合は、「Eval」と「.」が機能します。 が想定されます。
停()
モジュールを終了します。
スキップ()
イベント コールバック コードの残りの部分をスキップします。つまり、モジュールは新しいイベントをリッスンするために戻ります。
モジュールイベント。
アンロック()
fvwm からのイベント コールバックの同期を解除します。 これはデッドロックを防ぐのに役立つかもしれません。
つまり、通常、fvwm はイベント コールバックが無効な場合、応答しないモジュールを強制終了します。
で終わった モジュールタイムアウト 秒。 これはそれを防ぎます。
この例では、FvwmPerl の実行を XNUMX 分間一時停止します。
SendModule FvwmPerl 評価ロック解除(); 眠る(60);
ただし、モジュールの実行中に fvwm によって新しいメッセージが送信されることがないことを確認してください。
ビジー状態のため、fvwm はこの新しいメッセージに長時間ロックされたままになります。 も参照してください。 デタッチ
長時間にわたる操作が必要な場合のソリューション。
detach()
残りのイベント コールバック コードをフォークしてメイン プロセスから切り離します。 これはもしかしたら
イベントコールバックに時間がかかる場合にモジュールの強制終了を防ぐのに役立ちます。
完了するには、切り離された子で実行できます。 孤立した子供はまだ
コマンドを fvwm に送信しますが (これには依存しないでください)、もちろんイベントは受信しません。
コールバックの実行が終了するとすぐに終了します。
あなたが使用している場合 detach()、fvwm にコマンドを送信するのは XNUMX つのプロセス (メインプロセスまたは
分離されたもの)、そうでない場合、競合が発生することがよくあります。
show_message($msg、$title[、$use_stderr_too=1])
で見つかった X ツールを使用して、指定されたメッセージを含むダイアログ ウィンドウを表示します。
システム。
見る FVWM::モジュール::ツールキット::メッセージを表示 をご覧ください。
変数
にはいくつかのグローバル変数があります。 メイン Perl で使用できる名前空間
コード:
$a、$b、... $h
@a、@b、...@h
%a、%b、... %h
これらはすべて空の値に初期化され、次の間の状態を保存するために使用できます。
FvwmPerl アクションへのさまざまな呼び出し (評価する と 負荷).
もっと読みやすい変数名が必要な場合は、「no strict 'vars';」と記述します。 の初めに
すべての Perl コードを実行するか、次のようにハッシュを使用します。
$h{id} = $h{first_name} 。 「」。 $h{セカンドネーム}
または、次のようなパッケージ名を使用します。
@MyMenu::terminals = qw( xterm rxvt );
$MyMenu::item_num = @MyMenu::端末;
厳密性をオンまたはオフにする構成オプションがある場合があります。
メッセージ
FvwmPerl は、fvwm コマンド SendToModule を使用してメッセージを受信できます。 名前や意味などは、
メッセージのパラメータは、上で説明した対応するアクションと同じです。
さらに、メッセージ stop モジュールを終了させます。
メッセージ エクスポート解除 [関数名] の効果を取り消します。 export、アクションで説明されています
のセクションから無料でダウンロードできます。
メッセージ ダンプ 変更された変数の内容をダンプします (まだ)。
例
簡単なテスト:
SendToModule FvwmPerl 評価 $h{dir} = $ENV{HOME}
SendToModule FvwmPerl evalload($h{dir} . "/test.fpl")
SendToModule FvwmPerl ロード $[HOME]/test.fpl
SendToModule FvwmPerl 前処理 config.ppp
SendToModule FvwmPerl エクスポート Eval、PerlEval、PerlLoad、PerlPP
SendToModule FvwmPerl アンエクスポート PerlEval、PerlLoad、PerlPP
SendToModule FvwmPerl 停止
次の例では、fvwmrc でルートの背景を処理します。 これらすべてのコマンドを追加できます
StartFunctionに。
モジュール FvwmPerl --export PerlEval
# 後で使用するためにすべての背景ピックスマップを検索します
PerlEval $a = $ENV{HOME} 。 "/bg"; \
opendir DIR、$a; @b = grep { /xpm$/ } readdir(DIR); 閉じたディレクトリ
# 背景ピックスマップのメニューを作成する
AddToMenu MyBackgrounds 「マイ背景」タイトル
PerlEval foreach $b (@b) \
{ cmd("AddToMenu MyBackgrounds '$b' Exec fvwm-root $a/$b") }
# 起動時にロードするランダムな背景を選択します
PerlEval cmd("AddToFunc \
InitFunction + I Exec exec fvwm-root $a/" . $b[int(random(@b))])
脱出
モジュールに送信 他の fvwm コマンドと同様に、いくつかのドルの接頭辞が付いた変数を展開します。
これは、perl が使用するドルと衝突する可能性があります。 SendToModule をプレフィックスとして付けることでこれを回避できます。
先頭にダッシュを付けます。 各ペアの次の 2 行は同等です。
SendToModule FvwmPerl 評価 $$d = "$[DISPLAY]"
-SendToModule FvwmPerl 評価 $d = "$ENV{DISPLAY}"
SendToModule FvwmPerl 評価 \
cmd("エコーデスク=$d, ディスプレイ=$$d")
SendToModule FvwmPerl 前処理 -c \
エコーデスク=%("$d")%、ディスプレイ=%{$$d}%
ドルやバックスラッシュなどの特殊記号のエスケープを回避する別の解決策は、次のとおりです。
perlファイルを作成します ~/.fvwm そしてそれをロードします:
SendToModule FvwmPerl ロード build-menus.fpl
ダッシュで始まる XNUMX つのコマンドを前処理する必要がある場合は、その前に次のコマンドを使用する必要があります。
「――」。
# 現在のデスク、つまり「0」を出力します。
SendToModule FvwmPerl 前処理 -c Echo "$%{$a = "c"; ++$a}%"
# これは「$d」を出力します
SendToModule FvwmPerl 前処理 -c -- -Echo "$%{"d"}%"
# これは "$d" を出力します (SendToModule は $$ を $ に展開します)
SendToModule FvwmPerl 前処理 -c -- -Echo "$$%{"d"}%"
# これは「$$d」を出力します
-SendToModule FvwmPerl 前処理 -c -- -Echo "$$%{"d"}%"
繰り返しますが、コマンドをファイルに入れて、代わりにファイルを前処理することをお勧めします。
警告
FvwmPerl は Perl で書かれ、Perl を扱います。Perl の有名なモットーに従っています。
「方法は複数ある」ので、選択はあなた次第です。
以下に、同等の行のペアをさらに示します。
モジュール FvwmPerl --load "my.fpl" --stay
モジュール FvwmPerl -e 'load("my.fpl")' -s
SendToModule FvwmPerl 前処理 --quote '@' my.ppp
SendToModule FvwmPerl eval preprocess({quote => '@'}, "my.ppp");
警告、適切な Perl コードを評価すると、FvwmPerl の動作に影響を与える可能性があります。
バグではなく機能とみなされます。 ただし、これを行わずに、独自の fvwm モジュールを作成してください。
代わりに Perl で。
onworks.net サービスを使用してオンラインで FvwmPerl を使用する