私はGeditでカスタムコマンドを作成しようとしていますが、これは現在開いているアクティブなドキュメントのパス(親ディレクトリとファイルの両方)をクリップボードにコピーします。これを行うことができるgedit-プラグインまたはツールが見つからないためです。
どこから始めるべきかについての手掛かりはまだありませんし、良い参考資料もありませんが、bashスクリプトでスクリプトを作成する必要があることは知っています。
ターミナルからクリップボードに文字列をコピーする外部コマンドを検索しましたが(bashスクリプトも実行するため)、答えは「xclip」ツールの使用を示唆していますが、xclipでコピーした場合のみ貼り付けることができる文字列として失望しています「xclip -o」コマンドを使用します。ファイルマネージャー(nautilus)でパスを開くことができるように、コピーした文字列をCtrl-Vで貼り付け可能にする必要があります。
どんな助け/提案も大歓迎です。
gedit
で開かれたファイルのパスをコピーするスクリプトGeditウィンドウが前面にある状態で、以下の小さなスクリプトは(gedit
)ウィンドウの名前からパスを取得し、クリップボードにコピーします。
スクリプトには2つのオプションがあります。
pathのみをファイルのディレクトリにコピーし、オプション付きでスクリプトを実行します
-path
または
オプションを指定してスクリプトを実行し、ファイル名を含むパスをコピー
-file
#!/usr/bin/env python3
import subprocess
import sys
name = subprocess.check_output(["xdotool", "getactivewindow", "getwindowname"]).decode("utf-8").strip()
if all(["(" in name, ")" in name]):
path = name[name.find("(")+1:name.find(")")]
if sys.argv[1] == "-file":
fname = name[:name.find("(")]
Elif sys.argv[1] == "-path":
fname = ""
command = "echo "+'"'+path+"/"+fname+'"'+" | xclip -selection clipboard"
subprocess.Popen(["/bin/bash", "-c", command])
xdotool
とxclip
の両方をインストールします。
Sudo apt-get install xdotool xclip
スクリプトを空のファイルにコピーし、get_path.py
として保存します
スクリプトをテスト実行します。
gedit
ファイルを開きますターミナルウィンドウを開き、次のコマンドを実行します。
sleep 5 && python3 /path/to/get_path.py -file
すぐにgedit
ウィンドウに切り替えて、gedit
ウィンドウを前にしてtyheコマンドの最後の部分を実行します。
すべてが正常に機能する場合は、次の2つの方法でオプションを使用可能にできます。
gedit
ランチャーで両方のオプションを使用可能にします。
以下の内容を空のファイルにコピーし、gedit.desktop
に~/.local/share/applications
として保存します
[Desktop Entry]
Name=gedit
GenericName=Text Editor
Comment=Edit text files
Exec=gedit %U
Terminal=false
Type=Application
StartupNotify=true
MimeType=text/plain;
Icon=accessories-text-editor
Categories=GNOME;GTK;Utility;TextEditor;
X-GNOME-DocPath=gedit/gedit.xml
X-GNOME-FullName=Text Editor
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=gedit
X-GNOME-Bugzilla-Component=general
X-GNOME-Bugzilla-Version=3.10.4
X-GNOME-Bugzilla-ExtraInfoScript=/usr/share/gedit/gedit-bugreport
Actions=Window;Document;divider1;Copy current file's directory;Copy path+file name;
Keywords=Text;Editor;Plaintext;Write;
X-Ubuntu-Gettext-Domain=gedit
[Desktop Action Window]
Name=Open a New Window
Exec=gedit --new-window
OnlyShowIn=Unity;
[Desktop Action Document]
Name=Open a New Document
Exec=gedit --new-document
OnlyShowIn=Unity;
[Desktop Action Copy current file's directory]
Name=Copy current directory
Exec=python3 /path/to/get_path.py -path
OnlyShowIn=Unity;
[Desktop Action divider1]
Name=.....................................
OnlyShowIn=Unity;
[Desktop Action Copy path+file name]
Name=Copy current directory, include file name
Exec=python3 /path/to/get_path.py -file
OnlyShowIn=Unity;
両方の行で:
Exec=python3 /path/to/get_path.py -path
そして
Exec=python3 /path/to/get_path.py -file
/path/to/get_path.py
をスクリプトへの実際のパスに置き換えます。
ログアウトしてから再度ログインし、Unityを新しいローカル.desktop
ファイルに「切り替え」ます。
Geditウィンドウ名では、(
と)
の間にパスが表示されます。スクリプトは、xdotool
を使用して最前面のウィンドウを表示し、これら2つの文字間のパスを読み取ります。
パスはテキスト形式で読み取られるため、ファイル名に他の()
文字が含まれていると、スクリプトは失敗します。
前に次のウィンドウがあります。
最初のオプションは、ファイルへのパスをクリップボードにコピーします:
~/Bureaublad
一方、2番目のオプションにはファイル自体が含まれます。
~/Bureaublad/some test file.txt
ご覧のとおり、スペースが処理されます:)。
いくつかのドキュメントを検索した後、解決策を見つけることができたので、ここで質問に答えます。
Geditを開き、[ツール] >> [外部ツールの管理]に移動して、新しいツールを作成します。
以下のように次のコマンドを追加します。
echo -n $GEDIT_CURRENT_DOCUMENT_URI | xclip -sel clip;exit;
閉じてからGeditを再起動します(確認のため)。
ドキュメントを開いて、[ツール] >> [外部ツール]に移動し、作成したコマンドラベルをクリックします。パスはクリップボードにあります。
$GEDIT_CURRENT_DOCUMENT_URI
と比較
変数$GEDIT_CURRENT_DOCUMENT_PATH
は私にとっては良いようです:
file://
プレフィックスなしref:
https://wiki.gnome.org/Apps/Gedit/Plugins/ExternalTools#Available_Environment_Variableshttps://wiki.gnome.org/Apps/Gedit/ExternalToolsPluginCommands