デフォルトのファイルマネージャのフォルダを新しいタブで開く.desktop
ファイルを作成したいのですが。それが正しい場所を開いたかどうかをテストするために、私はnautilus ~/*folder*
を試しました。ファイルマネージャーが開きますが、問題が発生したと表示されます。 nautilus /home/*username*/*folder*
を使用しても同じことが起こります。 .desktop
ファイルから、ホームの特定のフォルダーを新しいタブで開くには、どのコマンドを使用できますか?
私の目標は、Nautilusの新しいタブでマップ〜/ Downloadsを開くアイコンをドック(板)に置くことです。
継続的な洞察の結果として、スクリプトの改良版を以下に示します。
スクリプトがtypingパスではなく貼り付けパスになっているため(xdotool
を使用)、スクリプトの信頼性が高まります。スクリプトは実際には高速ではありませんが(nautilusのcliオプションがないため、回避策is回避策と考えてください)、スクリプトはより「クリスピー」に感じます。ただし、スクリプトはユーザーのアクションをシミュレートするため、スクリプトはGUIが次の各ステップの準備ができるのを待つだけでよいことに変わりはありません。スクリプト内のタイミングは保存側です。より高速なシステムでは、いくつかの最適化を実行できる場合があります。
元の回答で説明されているとおりにスクリプトを使用してください。 (まだ)wmctrl
とxdotool
の両方をインストールする必要があります。このバージョンでは、さらにxclip
が必要です。
Sudo apt-get install xclip
#!/usr/bin/env python3
import subprocess
import sys
import time
arg = sys.argv[1:]
arg = arg[0] if arg else ""
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8").strip()
try:
pid = get(["pidof", "nautilus"])
except subprocess.CalledProcessError:
wlist = []
else:
wlist = [l for l in get(["wmctrl", "-lp"]).splitlines() if pid in l\
and "_NET_WM_WINDOW_TYPE_NORMAL" in get(["xprop", "-id", l.split()[0]])]
if wlist:
w = wlist[-1].split()[0]
subprocess.call(["wmctrl", "-ia", w])
subprocess.call(["/bin/bash", "-c", "printf '"+arg+"' | xclip -selection clipboard"])
subprocess.Popen(["xdotool", "key", "Control_L+t"])
time.sleep(0.4)
subprocess.Popen(["xdotool", "key", "Control_L+l"])
time.sleep(0.2)
subprocess.call(["xdotool", "key", "Control_L+v"])
subprocess.Popen(["xdotool", "key", "Return"])
else:
subprocess.Popen(["nautilus", arg])
Nautilusには、新しいタブを開くコマンドラインオプションがありませんが、xdotool
およびwmctrl
を使用して、スクリプトの助けを借りて「偽造」することができます。
必要に応じて、wmctrl
とxdotool
の両方をインストールします。
Sudo apt-get install xdotool wmctrl
以下のスクリプトを空のファイルにコピーし、nautilus_tab
に~/bin
(拡張子なし)として保存し、実行可能にするにします。
ディレクトリ~/bin
がまだ存在しない場合は、それを作成し、source ~/.profile
を実行して、ディレクトリを$PATH
に「表示」します。 (または、ログアウト/ログイン)
次のコマンドを実行して、テストを実行します。
nautilus_tab <directory>
そうすべき:
#!/usr/bin/env python3
import subprocess
import time
import sys
get = lambda cmd: subprocess.check_output(cmd).decode("utf-8")
def run(cmd):
subprocess.call(cmd)
try:
arg = sys.argv[1]
except:
arg = ""
try:
pid = get(["pidof", "nautilus"]).strip()
except subprocess.CalledProcessError:
run(["nautilus ", arg])
else:
w = [l.split() for l in get(["wmctrl", "-lp"]).splitlines() if pid in l][-1]
print(w)
w_id = w[0]
if len([l for l in get(["xprop", "-id", w_id]).splitlines() if all(
["_NET_WM_WINDOW_TYPE(ATOM)" in l, "_TYPE_NORMAL" in l])]) != 0:
run(["wmctrl", "-ia", w[0]]); time.sleep(0.1)
run(["xdotool", "key", "Control_L+t"])
if arg != "":
run(["xdotool", "key", "Control_L+l"])
time.sleep(0.2)
run(["xdotool", "type", arg])
time.sleep(0.02*len(arg))
run(["xdotool", "key", "Return"])
else:
run(["nautilus", arg])
スペースを含むディレクトリの場合は、引用符を使用します。
nautilus_tab '</directory/with spaces>'
引数(-directory)を使用しない場合、スクリプトは現在開いているnautilus
ウィンドウと同じディレクトリに新しいタブを開きます。 「nautilus」ウィンドウが開かれていない場合は、ホームウィンドウに新しいウィンドウが開きます。