Linuxで「次へ開く」カスタム実行ファイルはどのように機能しますか?

Linuxで「次へ開く」カスタム実行ファイルはどのように機能しますか?

というプログラムがあります。プログラムが端末を開き、内容を標準出力として表示するように、foo.txt私のプログラムをMIMEタイプに関連付けたいと思います。私はRubyを好みますが、BASHスクリプトも機能します。.txtfoo.txt

実際の例:を使用できます。同じ方法で独自の実行可能ファイルを使用してファイルを開きfirefoxたいです。txt

実際にどのように機能させるのかわかりませんか?

例 2: .txtGeany/Mousepad/Atom/Code などを使用してファイルを開くことができます。私がマウスパッドのようなツールを作っているとしましょう。私のプログラムは.txtMIMEタイプをどのように扱うべきですか?

これまで、私はRubyで小さなGUIプログラムを作成して実行可能にし、私のプログラムで開いてみましたfoo.txt(私はNemoファイルマネージャを使用しています)。私のRubyプログラムはパラメータとstdinをキャプチャしたので、パラメータとSTDINがある場合はそれを表示します。しかし、このファイルを含むファイルを開くと、私のプログラムはウィンドウも表示しません.txt

この結果を得るにはどうすればよいですか?

答え1

紹介する

アプリケーションを使用してファイルを開くと、そのファイルはパラメータとしてアプリケーションに渡されます。

だからオープンしたらFirefox ナイトリーlocated in/bin/p.htmllocated inは/home/user/デフォルトでrunに似ています/bin/firefox-nightly /home/user/p.html

実行ファイルの生成

質問で述べたように:

これまで、私はRubyで小さなGUIプログラムを作成して実行可能にし、プログラムとしてfoo.txtを開いてみました(私はNemoファイルマネージャを使用しました)。

OPが要求したようにコピーを引数として渡すRubyプログラムを作成しましょう/tmp/tempfile-#{n}。コマンドライン引数を受け入れるすべてのプログラミング言語が機能します。

#!/usr/bin/env ruby

# Errors
ERR_NO_FILE = 2

FILE = $*[0]

begin
    tempfile, counter = File.join(%W(/ tmp tempfile)), 0
    tempfile.replace(File.join(%W(/ tmp tempfile-#{counter += 1}))) while File.exist?(tempfile)
    IO.write(tempfile, IO.read(FILE))
rescue Errno::ENOENT
    exit!(ERR_NO_FILE)
rescue Interrupt, SystemExit, SignalException
    exit!(0)
rescue Exception
    abort($!.backtrace.join(?\n))
end if FILE

私たちのプログラムを呼び出そうShanzhai.rbを選択して/tmp/ディレクトリに移動します。

もちろん、次のように端末でプログラムを実行できます。

/tmp/copycat.rb /tmp/AFile

重複した一時ファイルがある場合、すべての内容はそのファイルの数だけ/tmp/AFileコピーされます。/tmp/tempfile-#{n}#{n}

アプリケーション項目の生成

ファイルマネージャでプログラムを使用してそれを開くには、アプリケーションエントリを作成する必要があります。これには2つのオプションがあります。これ最初のオプションは:

$HOME/.local/share/applications次の内容でcopycat.desktopというファイルを作成します。

[Desktop Entry]
Version=1.0
Type=Application
Name=CopyCat
Comment=Copy the contents of a file to /tmp/tempfile#{n}
Exec=/tmp/copycat.rb %u
Icon=edit-copy
Path=
Terminal=false
StartupNotify=false
Actions=
Categories=Copy;Utility

%uExecで始まる行にこのオプションを追加することを忘れないでください。

テスト

さて、テストのために「hello world」または好きな名前という単純なファイルを作成しましょう。ファイルマネージャを開き、ファイルのセカンダリマウスボタンをクリックして、「次のプログラムで開く」または同様のオプションを選択します。 GUIに関する内容なので、サンプル写真をいくつか追加します。

  1. Nautilus、「他のアプリケーションで開く」:

    Nautilus、「別のアプリケーションで開く」

  2. Nautilus、「すべてのアプリを見る」:

    Nautilus、「すべてのアプリを見る」

  3. 「模倣犯」:

    「コピーキャット」

  4. tempfile-#{n}完了すると、生成されたものが表示されます。/tmp/

    ここに画像の説明を入力してください。

ここで使用しているファイルマネージャはNautilusですが、他のファイルマネージャでも機能する必要があり、テキストだけが異なる場合があります。

これ2番目のオプションはすべてのユーザーがアプリケーションを使用できるようにします。これを行うには、ファイルをからルート$HOME/.local/share/applications/copycat.desktopに移動/usr/share/applicationsし、所有権をルートに変更する必要があります。

これがLinuxでカスタム実行可能ファイルを使用して開く方法です。同様のGUIアプリケーションを同じ方法で作成して開くことができます。

答え2

case $1 in
 *txt)  applic=less ;;
 *html) applic=vim  ;;
esac

xterm -e $applic $1 &

ミニマリストながらもテストされています。

最初のxtermでこのスクリプトを呼び出すことができます。を見ないで、アンパサンドとアンパサンドにcase-esac注意してください。xterm-e

関連情報