web-dev-qa-db-ja.com

Nautilus:キーボードショートカットを使用した選択したファイルのカスタムアクション

  1. Nautilusで約100個のファイルを含むディレクトリを開きます
  2. ファイルのプレビューを見て、N個(おそらく10個)のファイルを選択します。
  3. ここでショートカットにアクセスしたいので、カスタムスクリプトを呼び出す必要があります。
  4. カスタムスクリプトはファイル名を受け取り、実行したいことを行います。

Nautilusで選択されたファイル名を受け取るカスタムアクションをgnome/ubuntu/nautilusに登録するにはどうすればよいですか?

Nautilusのコンテキストメニューの新しいコンテキストエントリ

〜/ .local/share/nautilus/scriptsにスクリプトを書くと、コンテキストメニューに新しいエントリが表示されます。このスクリプトをショートカット経由で呼び出す方法は?

バックグラウンド

これは Nautilus:ディレクトリ内のファイルをお気に入りとしてマークするための追加質問です

Ubuntu 16.04を使用します

3
guettli

選択したファイルでアクションを実行する

以下の答えは、最初にあなたの質問に文字通り答えます。

スクリプトを呼び出し、現在選択されているファイルを引数として使用する方法[1]

ただし、リンクされた質問で受け入れられた回答は、nautilusスクリプトを使用します。これは、nautilusから引数としてファイルを受け取ります。 これはショートカットからは機能しません。右クリックinnautilusの場合のみです。したがって、[2]では、リンクされた質問から回答へのスクリプトの機能を追加したため、ショートカットから([2]で)いずれか1つを実行するだけで済みます。


[1] 16.04以降*では、選択したファイルを引数として使用してスクリプトを実行します

以下の短いスクリプトを使用するだけです。現在選択されているファイルを「読み取り」、ファイルを引数としてスクリプトを実行します。

#!/usr/bin/env python3
import subprocess
import pyperclip
import time

time.sleep(1)
subprocess.call(["xdotool", "key", "Control_L+c"])

for item in pyperclip.paste().splitlines():
    subprocess.Popen(["/path/to/script", item])

使用するには

  1. python3-pyperclipおよびxdotoolをインストールします。

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

    "/path/to/script" 
    

    実行するスクリプトへの実際のパスによって。 絶対パスを使用、引用符で囲みます。

  3. ショートカットキーに追加します。[システム設定]> [キーボード]> [ショートカット]> [カスタムショートカット]を選択します。 「+」をクリックして、コマンドを追加します。

    python3 /path/to/run_withselected.py
    

[2]ただし

ただし、別の方法で引数を取得するため、他の回答からリンクされたnautilusスクリプトは実行されないことに注意してくださいからnautilusに直接。したがって、リンクされた質問のスクリプトの機能を、上記のものと組み合わせてしました。

その場合、他の回答からの他のスクリプトはもう必要ありません。

A.名前を変更してファイルを指定する

ファイルを選択

enter image description here

ファイルをマーク(トグル)するショートカットを押します

enter image description here

#!/usr/bin/env python3
import subprocess
import pyperclip
import shutil
import os
import time

time.sleep(1)

def npath(p, f):
    return os.path.join(p, f)

subprocess.call(["xdotool", "key", "Control_L+c"])
for item in pyperclip.paste().splitlines():
    data = item.rsplit("/", 1); path = data[0]; name = data[1]
    newname = name[2:] if name.startswith("*0") else "*0"+name
    shutil.move(npath(path, name), npath(path, newname))

B.「お気に入り」ディレクトリにリンクを作成してファイルを指定する

ファイルを選択

enter image description here

ショートカットを押して「My_Favorites」にリンクを作成(トグル)します

enter image description here

#!/usr/bin/env python3
import subprocess
import pyperclip
import shutil
import os
import time

fav = os.path.join(os.environ["HOME"], "My_Favorites")

try:
    os.mkdir(fav)
except FileExistsError:
    pass

time.sleep(1)

subprocess.call(["xdotool", "key", "Control_L+c"])
for item in pyperclip.paste().splitlines():
    name = item.rsplit("/", 1)[-1]
    link = os.path.join(fav, name)
    try:
        os.symlink(item, link)
    except FileExistsError:
        os.remove(link)

使用するには(どちらか)

  1. スクリプトにはpython3-pyperclipおよびxdotoolが必要です。

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

  3. ショートカットキーの追加:[システム設定]> [キーボード]> [ショートカット]> [カスタムショートカット]を選択します。 「+」をクリックして、コマンドを追加します。

    python3 /path/to/toggle_selected.py
    

説明

  1. スクリプトはxdotoolを使用して仮想的に押します Ctrl+C
  2. その後、スクリプトは(内部で)選択したファイルのリストを作成します。

    pyperclip.paste().splitlines()
    
  3. これらのファイルは、その後、ファイルの名前を変更するための引数として使用されます。

    for item in pyperclip.paste().splitlines():
        data = item.rsplit("/", 1); path = data[0]; name = data[1]
        newname = name[2:] if name.startswith("*0") else "*0"+name
        shutil.move(npath(path, name), npath(path, newname))
    

    またはシンボリックリンクを作成します:

    for item in pyperclip.paste().splitlines():
        name = item.rsplit("/", 1)[-1]
        try:
            os.symlink(item, os.path.join(fav, name))
        except FileExistsError:
            os.remove(link)
    
  4. 最後にtime.sleep(1)は、xdotoolによる「実際の」キーの押下がシミュレートされたキー押下と干渉しないようにすることです。

    ノート

    • リンクされた回答では、secondスクリプトがリンクを作成しますが、切り替わりません。シンボリックリンクの存在も切り替える「B」と答えました。
    • 公開アプリケーションの場合は、AとBを1つのスクリプトに結合し、設定ファイルで実行するアクションを決定します。後で追加するかもしれません。

* 14.04

... pyperclipをインストールするための別の手順が必要になります。

Sudo apt-get install python3-pip xdotool
Sudo pip3 install pyperclip
3
Jacob Vlijm