web-dev-qa-db-ja.com

geditで現在開いているファイルへのパスをクリップボードにコピーするにはどうすればよいですか?

私はGeditでカスタムコマンドを作成しようとしていますが、これは現在開いているアクティブなドキュメントのパス(親ディレクトリとファイルの両方)をクリップボードにコピーします。これを行うことができるgedit-プラグインまたはツールが見つからないためです。

どこから始めるべきかについての手掛かりはまだありませんし、良い参考資料もありませんが、bashスクリプトでスクリプトを作成する必要があることは知っています。

ターミナルからクリップボードに文字列をコピーする外部コマンドを検索しましたが(bashスクリプトも実行するため)、答えは「xclip」ツールの使用を示唆していますが、xclipでコピーした場合のみ貼り付けることができる文字列として失望しています「xclip -o」コマンドを使用します。ファイルマネージャー(nautilus)でパスを開くことができるように、コピーした文字列をCtrl-Vで貼り付け可能にする必要があります。

どんな助け/提案も大歓迎です。

3
Vicky Dev

geditで開かれたファイルのパスをコピーするスクリプト

Geditウィンドウが前面にある状態で、以下の小さなスクリプトは(gedit)ウィンドウの名前からパスを取得し、クリップボードにコピーします。

スクリプトには2つのオプションがあります。

  1. pathのみをファイルのディレクトリにコピーし、オプション付きでスクリプトを実行します

    -path
    

    または

  2. オプションを指定してスクリプトを実行し、ファイル名を含むパスをコピー

    -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])

使い方

  1. xdotoolxclipの両方をインストールします。

    Sudo apt-get install xdotool xclip
    
  2. スクリプトを空のファイルにコピーし、get_path.pyとして保存します

  3. スクリプトをテスト実行します。

    • 既存のgeditファイルを開きます
    • ターミナルウィンドウを開き、次のコマンドを実行します。

      sleep 5 && python3 /path/to/get_path.py -file
      

      すぐにgeditウィンドウに切り替えて、geditウィンドウを前にしてtyheコマンドの最後の部分を実行します。

    • 押す Ctrl+V コピーしたばかりのパスをどこかに貼り付けます。
  4. すべてが正常に機能する場合は、次の2つの方法でオプションを使用可能にできます。

    1. 両方のオプションに2つのショートカットキーを作成します。[システム設定]> [キーボード]> [ショートカット]> [カスタムショートカット]を選択します。 「+」をクリックして、2つの異なるショートカットに両方のコマンドを追加します。
    2. geditランチャーで両方のオプションを使用可能にします。

      enter image description here

      以下の内容を空のファイルにコピーし、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つの文字間のパスを読み取ります。

ノート

パスはテキスト形式で読み取られるため、ファイル名に他の()文字が含まれていると、スクリプトは失敗します。

前に次のウィンドウがあります。

enter image description here

最初のオプションは、ファイルへのパスをクリップボードにコピーします:

~/Bureaublad

一方、2番目のオプションにはファイル自体が含まれます。

~/Bureaublad/some test file.txt

ご覧のとおり、スペースが処理されます:)。

5
Jacob Vlijm

いくつかのドキュメントを検索した後、解決策を見つけることができたので、ここで質問に答えます。

Geditを開き、[ツール] >> [外部ツールの管理]に移動して、新しいツールを作成します。

以下のように次のコマンドを追加します。

echo -n $GEDIT_CURRENT_DOCUMENT_URI | xclip -sel clip;exit;

閉じてからGeditを再起動します(確認のため)。

ドキュメントを開いて、[ツール] >> [外部ツール]に移動し、作成したコマンドラベルをクリックします。パスはクリップボードにあります。

3
Vicky Dev

$GEDIT_CURRENT_DOCUMENT_URIと比較
変数$GEDIT_CURRENT_DOCUMENT_PATHは私にとっては良いようです:

  • file://プレフィックスなし
  • マルチバイト文字を表示します(urlencodeではありません)

ref:
https://wiki.gnome.org/Apps/Gedit/Plugins/ExternalTools#Available_Environment_Variableshttps://wiki.gnome.org/Apps/Gedit/ExternalToolsPluginCommands

0
yurenchen