foo.txt
というファイルがあります。自分のプログラムをmime-type.txt
に関連付けて、プログラムがターミナルを開き、foo.txt
の内容を標準出力として表示できるようにします。 Rubyが好きですが、BASHスクリプトでも問題ありません。
実例:firefox
でHTMLファイルを開くことができます。同じ方法で自分の実行可能ファイルを使用してtxt
ファイルを開きたい。
どうすれば実際に機能させることができるのかわかりません。
例2:Geany/Mousepad/Atom/Codeなどで.txt
ファイルを開くことができます。マウスパッドのようなツールを作成したとしましょう。私のプログラムは.txt
mimetypeをどのように処理する必要がありますか?
これまで、Rubyで小さなGUIプログラムを作成し、それを実行可能にして、プログラムでfoo.txt
を開こうとしました(Nemoファイルマネージャーを使用しました)。引数をキャプチャしました。と私のRubyプログラムのstdinsなので、引数とSTDINがあれば表示されます。しかし、.txt
ファイルを開いても、プログラムはウィンドウに表示されません。
どのように私は結果を達成することになっていますか?
ファイルがアプリケーションで開かれると、ファイルは引数としてアプリケーションに渡されるだけです。
したがって、/bin/
にあるfirefox-nightlyを開き、p.html
にある/home/user/
を開くと、基本的には次のようになります。 /bin/firefox-nightly /home/user/p.html
を実行します。
質問で述べたように:
これまで、Rubyで小さなGUIプログラムを作成し、それを実行可能にして、プログラムでfoo.txtを開こうとしました(Nemoファイルマネージャーを使用しました)。
引数として渡されたファイルの内容を/tmp/tempfile-#{n}
にコピーする、OPの要求に応じてRubyプログラムを作成しましょう。受け入れることができれば、どのプログラミング言語でも機能することに注意してください。コマンドライン引数。
#!/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
そして、プログラムcopycat.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
Execで始まる行に%u
オプションを追加することを忘れないでください。
さて、テストするために、「helloworld」というコンテンツまたは必要なものを含む単純なファイルを作成しましょう。ファイルマネージャを開き、ファイル上でマウスの2番目のボタンをクリックして、[プログラムから開く]または同様のオプションを選択します。 GUIに関連しているので、サンプル画像をいくつか追加します。
Nautilus、「他のアプリケーションで開く」:
Nautilus、「すべてのアプリケーションを表示」:
「CopyCat」:
完了すると、tempfile-#{n}
で作成された/tmp/
を確認できます。
ここで使用したファイルマネージャーはNautilusですが、これは他のファイルマネージャーでも機能するはずです。テキストだけが異なる場合があります。
2番目のオプションはで、すべてのユーザーがアプリケーションを利用できるようにします。これを行うには、ファイルを$HOME/.local/share/applications/copycat.desktop
から/usr/share/applications
に移動し、所有権をrootに変更する必要があります。
これは、Linuxでカスタム実行可能ファイルを使用したオープンがどのように機能するかを示しています。同様のGUIアプリを作成し、同じ方法で開くことができます。
case $1 in
*txt) applic=less ;;
*html) applic=vim ;;
esac
xterm -e $applic $1 &
ミニマルですが、テスト済みです。
このスクリプトは、最初のxtermから呼び出すことができます。 case-esac
は見ないでください。ただし、xterm
には-e
とアンパサンドを付けてください。