デフォルトの xdg-open アプリケーションをターミナルプログラムに設定する

デフォルトの xdg-open アプリケーションをターミナルプログラムに設定する

xdg-open でターミナル vim を使用することは可能ですか?

私はターミナル経由でのみ vim を使用するため、GUI テキスト エディターを持っていません。(gvim もあまり使いません。) xdg-open にターミナルを開くように指示してから、選択したファイルで vim を開くことは可能ですか?

ありがとう。

答え1

.bashrc または .zshrc のいずれかで、それぞれ bash または zsh のどちらを使用するかに応じて、次の 2 つの環境変数をエクスポートします。

export EDITOR=vim
export VISUAL=vim

さらに、vim をテキスト ファイルの MIME タイプに関連付けることもできます。

xdg-mime default vim.desktop text/plain

ここで、 に vim.desktop ファイルを作成し/usr/share/applications、vim を開いて必要なターミナル エミュレーターを実行する必要があります。

答え2

私のコメントが回答を完成させるだけの場合でも、新しい回答を追加する必要がありますチアゴコメント内ではコードをインデントできないためです。

の内容はvim.desktop次のようになります。

[Desktop Entry]
Name=Vim Text Editor
Comment=Edit text files
Exec=vim
Terminal=true
Type=Application
Icon=terminal
Categories=Utility;TextEditor;
StartupNotify=true
MimeType=text/plain;

私はそれを の下に置くことを好みます~/.local/share/applications

答え3

要約

$ xdg-mime default vim.desktop <MIMETYPE>

または編集します~/.config/mimeapps.list。MIMETYPE
は次の出力です。$ xdg-mime query filetype <interested-file>


デスクトップ環境(KDE、GNOME、LXQTなど)を使用している場合は、DEのドキュメントを参照してください。ただし、XDG 標準特定のMIMEタイプにデフォルトのアプリケーションを設定する。MIMEタイプは、あるファイルタイプを別のファイルタイプと区別する方法です。Wikipediaを参照するか、アーチウィキたとえば、ファイルには 、ファイルには というtext/htmlmime-typeがあります。 で mime-type を判別できます。*.htmltext/plain*.txt$xdg-mime query filetype <file_you_interested>

MIME タイプは、アプリケーションと、これらのアプリケーションが開くファイルとをリンクするために使用されます。私のマシンでは、
Open~/.config/mimeapps.listは次のようになります。

[Default Applications]
x-scheme-handler/http=firefox.desktop
...
inode/directory=org.gnome.Nautilus.desktop

[Added Associations]
application/x-shellscript=nvim-qt.desktop;
...
application/pdf=firefox.desktop;

[Default Applications]セクションに次の行を追加します

text/plain=vim.desktop
text/markdown=vim.desktop
text/html=vim.desktop

(必要な場合は別の MIME タイプを追加してください)

vim.desktop/usr/share/applications私のマシンには次の内容のファイルがあります:

[Desktop Entry]
Name=Vim
TryExec=vim
Exec=vim %F
Terminal=true
Type=Application
Keywords=Text;editor;
Icon=gvim
Categories=Utility;TextEditor;
StartupNotify=false
MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;

(実際、名前やコメントの翻訳はたくさんありますが、ここでは関係ありません)

行を見てくださいTerminal=true

XDG デスクトップ エントリ仕様の規則によれば、この行は、ランチャーがターミナル エミュレーターを開き、このターミナル ウィンドウでアプリ (Exec行) を開く必要があることを示しています。問題ありませんか?


しかし、xdg-open の 5 年前のバグTerminalデフォルトのターミナル エミュレーターの指定がないため、xdg-open はキーを無視します。

彼らは試したただし、2020 年現在ではまだ仕様は存在しません。

したがって、DE を使用していない場合は、xdg-open はデスクトップ エントリ仕様を尊重しません。バグを修正した人がパッチを作成しました (残念ながら無視されました)。このパッチは $TERMINAL 変数を調べてターミナル エミュレーターを開きます。そのため、/usr/bin/xdg-open (または$ which xdg-open) にパッチを適用できます。

自分でスクリプトを変更したくない場合はxdg-open、いくつかの回避策を使用できます。

  1. (システムにgvim.desktopインストールされている場合) または(の qt フロントエンド)を使用できます。gvimnvim-qt.desktopneovim

  2. my-vim.desktop次のような内容の名前のファイルを作成できます。

[Desktop Entry]
Type=Application
Name=MyVim
Exec=<COMMAND TO RUN YOUR TERMINAL> vim %F
Terminal=false
Icon=gvim
Categories=Utility;TextEditor

そしてそれを に配置します~/.local/share/applications
ターミナルを実行するコマンドは、優先ターミナルのマニュアル ページ ( などgnome-terminal -e) から取得できます。
詳細については、デスクトップ エントリ仕様を参照してください。

  1. 何らかの方法でxdg-openソース コードを読み取ってシステムを調整し、xdg-openDE を使用していると認識させて DE 固有のツールを呼び出すことはできますが、それは奇妙だと思います。

役に立つリンク:
XDG-mime マニュアルページ -https://linux.die.net/man/1/xdg-mime
XDG MIME タイプに関する Arch Wiki -https://wiki.archlinux.org/index.php/XDG_MIME_Applications
XDG デスクトップ エントリに関する Arch wiki -https://wiki.archlinux.org/index.php/Desktop_entries#アプリケーションエントリ
xdg-オープン問題 -https://gitlab.freedesktop.org/xdg/xdg-utils/-/issues/84

関連情報