「リンクを作成」オプションを使用してショートカットを作成しました。このショートカットのフォルダーに入ると、その上のフォルダーが表示されないため、簡単に移動できません。
GUIで1つのフォルダーを移動する方法はありますか?おそらくホットキーですか?(cd ..
今回はできません^ __ ^)。
たとえばWindowsでは、実際に説明した方法でナビゲートできます。これを説明するWin10イメージを次に示します。
Alt+up key
「リンクを作成」オプションを使用してショートカットを作成しました。このショートカットのフォルダーに入ると、その上のフォルダーが表示されないため、簡単に移動できません。
GUIで1つのフォルダーを移動する方法はありますか?おそらくホットキーですか?(cd ..
今回はできません^ __ ^)。
たとえばWindowsでは、実際に説明した方法でナビゲートできます。これを説明するWin10イメージを次に示します。
Alt+up key
回答:
この質問にはいくつかの課題があります。
nautilus
たとえば、現在アクティブなディレクトリを取得するためにコマンドラインから直接通信したり、コマンドラインから現在開いているフォルダ(-window)を別のディレクトリに「送信」することはできません。"NAUTILUS_SCRIPT_CURRENT_URI"
、Nautilusは現在のフォルダーへの実際のパスを返しませんが、実際のフォルダーであるかのようにリンクを「表示」します。したがって、解決策は取得するのと同じくらい汚れています。回避策を見つける必要があります。問題を解決するための4つのオプションの下。
現在のディレクトリへの実際のパスを取得するには、リンクから情報を取得する必要があります。次のls -l
ように出力するリンク上で使用することにより、それを行うことができます。
lrwxrwxrwx 1 jacob jacob 35 jan 15 08:23 /home/jacob/Bureaublad/Flyer_st/Verwijzing naar Site_current -> /home/jacob/Bureaublad/Site_current
セクションの後には、どこ->
で、実際のシンボリックリンク内のパス、または、使用してpython
:
real = os.path.realpath("/path")
これをnautilus
スクリプトで使用すると、現在のファイルまたはフォルダーへの実際のパスを間接的に取得できます。
繰り返しますが、これを解決することはできず、手を清潔に保つことはできません。1レベル上に移動するには、最初に見つかったパスを少し編集します。
/path/to/a/folder
に
/path/to/a
次に、+ xdotool
をシミュレートして(現在のウィンドウを使用して別のディレクトリに移動するcliオプションがないため、nautilusウィンドウにパスを挿入するGUIショートカット)を使用し、続いて編集されたパスを貼り付けます+ 、作業ソリューション!CtrlLxclip
Enter
私たちは、デスクトップ上のリンク(「テレグラムへのリンク」)から開かれたフォルダーにいます。実際のフォルダは、私のサブフォルダであるDownloads
フォルダ:
次に、フォルダー内のファイルのいずれかを右クリックして、スクリプトを実行します。
自動的に、上位ディレクトリへのパスが挿入されます。
また、自動的にReturn押され、1つ上のディレクトリレベルに移動します。
#!/usr/bin/env python3
import subprocess
import os
import time
def run(cmd):
subprocess.call(["/bin/bash", "-c", cmd])
current = os.getenv("NAUTILUS_SCRIPT_CURRENT_URI").replace("file://", "").replace("%20", " ")
real = os.path.realpath(current)
up = os.path.abspath(os.path.join(real, os.pardir))
run("xdotool key Control_L+l")
run("printf '"+up+"' | xclip -selection clipboard")
run("xdotool key Control_L+v")
# confirm by virtually press Return
time.sleep(0.1)
run("xdotool key Return")
このスクリプトは、両方を必要とするxdotool
とxclip
:
sudo apt-get install xdotool xclip
ディレクトリを作成します(まだ存在しない場合)。
~/.local/share/nautilus/scripts
上記のスクリプトを空のファイルにコピーし、level_up
(拡張子なし)として保存し~/.local/share/nautilus/scripts
、実行可能にします
これで、ファイル(任意)>スクリプト> level_upを右クリックしてスクリプトを実行できるようになります。
[ 編集 ]上記のスクリプトを変更して、パスを入力する代わりにウィンドウに貼り付けました。それはインストールするが、それは特に非常に長いパス上の主要な改善、です。nautilus
xdotool
needs
xclip
親のディレクトリにあるスクリプトで新しい nautilusウィンドウを開くことにより、の使用を避けることができます。この場合、スクリプトはさらに短くなります。xdotool
#!/usr/bin/env python3
import subprocess
import os
def run(cmd):
subprocess.call(cmd)
current = os.getenv("NAUTILUS_SCRIPT_CURRENT_URI").replace("file://", "").replace("%20", " ")
real = os.path.realpath(current)
up = real[:real.rfind("/")]
subprocess.Popen(["nautilus", up])
この場合、をインストールする必要はありませんxdotool
。元のウィンドウを閉じて、新しいウィンドウをまったく同じ位置(&サイズ)に配置することで、スクリプトを拡張することもできます。
欠点は、元のウィンドウの履歴がこの方法で失われることです。
既存のリンクには関係ありませんが、GUIから使用する.desktop
場合、右クリックで実行可能ファイルを自動的に作成するnautilusスクリプトが役立つ場合があります。
ディレクトリを右クリックしてショートカットを作成します(リンクとして動作)
シンボリックリンクとは異なり、これらのリンクはフォルダー自体として動作することなく、実際のフォルダーに移動します。
#!/usr/bin/env python3
import subprocess
import os
current = os.getenv(
"NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
).replace("file://", "").replace("%20", " ").strip()
if os.path.isdir(current):
parent = os.path.abspath(os.path.join(current, os.pardir))
fldr_path = '"'+current+'"'
folder = current[current.rfind("/")+1:]
linkfilename = parent+"/"+folder+"link.desktop"
linkdata = [
"[Desktop Entry]",
"Type=Application",
"Name=Link to -> "+folder,
"Icon=folder",
"Exec=nautilus "+fldr_path,
]
with open(linkfilename, "wt") as wt:
for l in linkdata:
wt.write(l+"\n")
command = "chmod +x "+"'"+linkfilename+"'"
subprocess.Popen(["/bin/bash", "-c", command])
make_link
(拡張子なし)として保存し~/.local/share/nautilus/scripts
、実行可能にします.desktop
ファイルは同じディレクトリに作成され、必要に応じて別の場所に移動します。リンクされたパスは絶対パスです。代替リンクに際立ったアイコンを付けることができます。ディレクトリ内/usr/share/icons
で「フォルダ」を検索すると、多数の有効なオプションがポップアップ表示されます。
スクリプト内で行"Icon=folder",
がIcon=stock_folder-copy,
(拡張子のないアイコン名を使用して)に置き換えられた場合、システム上の結果は次のようになります。
もちろん、独自のカスタムアイコンも使用できますが、フルパスを使用する場合(を使用しない~
でください)、アイコンの拡張子を含める必要があります。
おそらく最も便利なオプションです。nautilusウィンドウが前面にある状態で、ショートカットキーを押して1つのディレクトリを上に移動します。
#!/usr/bin/env python3
import subprocess
import time
import os
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8").strip()
def run(cmd):
subprocess.call(["/bin/bash", "-c", cmd])
# get information on the active window
front = get(["xprop", "-id", get(["xdotool", "getactivewindow"])])
# (only) if it is a "normal" nautilus window, take action
if 'WM_CLASS(STRING) = "nautilus", "Nautilus"' in front:
# "virtually" press Ctrl + l
run("xdotool key Control_L+l"); time.sleep(0.05)
# copy the current path, calculate the "real" parent directory
real = os.path.realpath(get(["xclip", "-o"]))
up = os.path.abspath(os.path.join(real, os.pardir))
time.sleep(0.1)
# enter the superior directory
run("printf '"+up+"' | xclip -selection clipboard")
run("xdotool key Control_L+v")
# confirm by virtually press Return
time.sleep(0.1)
run("xdotool key Return")
このソリューションでは、両方xclip
とxdotool
システムに存在する必要があります。
sudo apt-get install xdodool xclip
スクリプトを空のファイルにコピーし、level_up.py
(どこでも)として保存します。
ショートカットキーに追加します。[システム設定]> [キーボード]> [ショートカット]> [カスタムショートカット]を選択します。「+」をクリックして、コマンドを追加します。
python3 /path/to/level_up.py
注:この場合、ショートカットオプションは少し制限されます。スクリプト自体がCtrl+をシミュレートしL、Ctrl+Alt+Lがログアウトするためです...Ctrl+\私のシステムでは正常に機能しました。
このスクリプトはCtrl+ もシミュレートしますが、Lnautilus 'を使用する代わりに、nautilusウィンドウで自動的に選択されたパスをコピーする"NAUTILUS_SCRIPT_CURRENT_URI"
ために使用xclip
します。オプション1と同様に、スクリプトは実際のパスを計算し、上位のディレクトリを取得します。
このオプションは、キーボードで右クリックを使用する場合に便利です。
または、xdotool
パッケージが追加されたUbuntu 14.04、nautilus 3.10-1の場合は、.local/share/nautilus/scripts/updirtree
ファイルで次を使用するだけです。
# In nautilus, the pwd is the actual, not the link path
xdotool key ctrl-l
xdotool type "$(dirname $(pwd))" "
"
最後の引用には、改行またはリターン(0x0a
)を含める必要があります。pwd
Nautilusの中から、端末bashの/から実行した場合とは異なる結果を生成する-実際のパスではなく、リンクを使用してパスを返します。
私はそれが意味をなさないこと、文書化されていないことに同意し、どのような実行環境がコードを実行しているかを把握することさえできません(その結果を生成するシェルは見つかりません)が、動作します。これはハックです。そのため、ノーチラスのバージョンを含めました。誰がそれがいつまで機能するかを知っていますか?次のnautilusアップグレード(または不明なインタープリター)で壊れる可能性がありますが、私にとっては、マウントされた場所へのリンク、ディレクトリツリー内の場所へのリンク、またはディレクトリツリー内の単なる場所で動作します。
xclip
貼り付けました。
完全な修正ですが、このコミットを元に戻すことでソースを再構築する必要があります:
diff --git a/src/nautilus-mime-actions.c b/src/nautilus-mime-actions.c
index ca1f0ac..0b363b4 100644
--- a/src/nautilus-mime-actions.c
+++ b/src/nautilus-mime-actions.c
@@ -2029,21 +2029,13 @@ activate_activation_uris_ready_callback (GList *files_ignore,
/* Convert the files to the actual activation uri files */
for (l = parameters->locations; l != NULL; l = l->next) {
- char *uri = NULL;
-
+ char *uri;
location = l->data;
/* We want the file for the activation URI since we care
* about the attributes for that, not for the original file.
*/
- if (nautilus_file_is_symbolic_link (location->file)) {
- uri = nautilus_file_get_symbolic_link_target_uri (location->file);
- }
-
- if (uri == NULL) {
- uri = nautilus_file_get_activation_uri (location->file);
- }
-
+ uri = nautilus_file_get_activation_uri (location->file);
if (uri != NULL) {
launch_location_update_from_uri (location, uri);
}
ビルド手順:
ソースをダウンロード:
apt-get source nautilus
ビルドの依存関係をダウンロードする
sudo apt-get build-dep nautilus
上記のパッチから必要な変更を行います
編集 src/nautilus-mime-actions.c
/* Convert the files to the actual activation uri files */
for (l = parameters->locations; l != NULL; l = l->next) {
char *uri = NULL;
location = l->data;
/* We want the file for the activation URI since we care
* about the attributes for that, not for the original file.
*/
if (nautilus_file_is_symbolic_link (location->file)) {
uri = nautilus_file_get_symbolic_link_target_uri (location->file);
}
if (uri == NULL) {
uri = nautilus_file_get_activation_uri (location->file);
}
if (uri != NULL) {
launch_location_update_from_uri (location, uri);
}
ビルドしてインストールする
autoreconf
./configure
make
インストールせずにテストするには
sudo killall -r "[\w]*nautilus"
./src/nautilus
インストールする
sudo make install
これにより、nautilusはリンクをターゲットパスに解決します。ところで、これはしばらく前にバグとして報告されました。これが機能だと思う場合は、別のバグレポートを送信して、スイッチの設定または特定のショートカットを要求してください。
/usr/local/bin/
システムは常に変更されたコピーを実行するように記載されているように、$PATH