Я создал ярлык через, "делают ссылку" опцией. Когда я вхожу в папку этого ярлыка, я не вижу папок выше ее так, я не могу легко перейти им.
Существует ли способ пойти одна папка в GUI? Возможно, горячая клавиша? (Не может сделать cd ..
на этот раз ^ __^).
В Windows, например, я действительно могу перейти в способе, которым я описываю, вот изображение Win10, которое объясняет это:
Вопрос имеет несколько проблем:
nautilus
не связывается непосредственно из командной строки, для получения в настоящее время активного каталога, например, и при этом Вы не можете "отправить" в настоящее время открываемую папку (-окно) к другому каталогу из командной строки."NAUTILUS_SCRIPT_CURRENT_URI"
, Наутилус не возвращает реальный путь к текущей папке, но "видит" ссылку, как будто это была фактическая папка.Решение поэтому так грязно, как это добирается; мы должны найти обходные решения. Ниже четырех опций решить проблему.
Для получения реального пути к текущему каталогу мы должны получить информацию из ссылки. Мы можем сделать это любой при помощи 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")
Используя это в a nautilus
сценарий, мы можем косвенно получить реальный путь к текущему файлу или папке.
Снова, мы не можем решить это и содержать наши руки в чистоте. Для продвижения одного уровня мы сначала редактируем найденный путь немного, от:
/path/to/a/folder
в
/path/to/a
затем, использование xdotool
для моделирования Ctrl+L (ярлык GUI для вставки пути к окну наутилуса с тех пор нет никакой cli опции переместиться в другой каталог с помощью текущего окна), и впоследствии делают xclip
вставьте отредактированный путь +, Входят, у нас есть рабочее решение!
Мы находимся в папке, открытый из ссылки ("Связываются с Telegram") на моем Рабочем столе. Реальная папка является sub папкой моего Downloads
папка:
Затем, если мы щелкаем правой кнопкой по какому-либо из файлов в папке для запущения скрипта:
Автоматически, путь к превосходящему каталогу вставляется:
И также автоматически Возврат нажимается, и мы перемещаем один уровень каталога вверх:
#!/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
чтобы быть установленным, но это - основное улучшение, особенно на очень длинных путях.
Вы могли избегать использования 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
файлы при щелчке правой кнопкой могли бы быть полезными:
щелкните правой кнопкой по каталогу для создания ярлыка (ведущий себя как ссылка)
В отличие от символьных ссылок, эти ссылки возьмут Вас к фактической папке, не ведя себя как сама папка:
#!/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,
(используйте имя значка без расширения), результат в моей системе:
Конечно, можно использовать собственный значок также, но если Вы используете полные пути (не использовать ~
), необходимо включать расширение значка.
Вероятно, самая удобная опция; с окном наутилуса впереди, нажмите сочетание клавиш для продвижения одного каталога.
#!/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
NB опции ярлыка немного ограничены в этом случае, начиная с самого сценария, моделирует Ctrl+L, и Ctrl+Alt+L заставит Вас выйти из системы... Ctrl +\хорошо работал в моей системе.
Этот сценарий также моделирует Ctrl+L, но вместо того, чтобы использовать наутилус "NAUTILUS_SCRIPT_CURRENT_URI"
, это использует xclip
скопировать автоматически выделенный контур в окне наутилуса. Как опция 1, сценарий затем вычисляет реальный путь и получает превосходящий каталог.
Эта опция могла бы быть полезной, если Вы предпочитаете клавиатуру использованию щелчка правой кнопкой.
Или для Ubuntu 14.04, наутилус 3.10-1, с xdotool
добавленный пакет, просто использует следующее в Вашем .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
из наутилуса приводит к другому результату чем тогда, когда выполнено от удара/терминала - он возвращает фактический путь, не путь с помощью ссылки.
я соглашаюсь, что он не имеет никакого смысла, это не документировано, и я не могу даже выяснить, какая среда выполнения выполняет код (я не могу найти оболочку, которая приводит к тому результату), но он работает. Это - взлом, который является, почему я включал версию наутилуса. Кто знает, сколько времени это будет работать? Мог бы повредиться при следующем обновлении наутилуса (или неизвестный интерпретатор), но для меня, это работает над ссылками на смонтированные местоположения, ссылками на места в дереве каталогов или просто местоположения в дереве каталогов.
Чистая фиксация, но источник потребностей восстанавливает путем возвращения эта фиксация :
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
, Это заставит наутилус разрешить ссылки в их путь назначения. BTW, об этом сообщили как ошибка некоторое время назад. Если Вы думаете, что это - функция, затем отправляют другой отчет об ошибках, прося установку переключателя или определенного ярлыка для него.
Ссылка: , Как я могу мешать Наутилусу разыменовать символьные ссылки? [закрытый]