Контекстное меню ФМ nemo

Аватара пользователя

Автор темы
root
Сообщения: 852
Зарегистрирован: 16 фев 2017, 17:03
Решено: 5
Откуда: г. Хабаровск
Благодарил (а): 264 раза
Поблагодарили: 226 раз

Контекстное меню ФМ nemo

Сообщение root » 19 фев 2017, 06:29

Доброго времени суток. Хотел бы поделиться информацией о том, как создать контекстное меню (КМ) для файлового менеджера (ФМ) nemo. Когда я только начинал изучать GNU/Linux, в частности Linux Mint 18 Sarah Cinnamon, для меня эта тема стала краеугольным камнем, поскольку ее незнание напрямую сказывалось на удобстве пользования ОС. Простой пример: мне хотелось, как минимум, иметь возможность просканировать файл на вирусы без всяких ухищрений, просто выделив его и нажав соответствующую команду в КМ.

Что ж, это было небольшое вступление, теперь к сути. Файлы с расширением .nemo_action, используемые nemo в качестве файлов обработки КМ, лежат в папках ~/.local/share/nemo/actions и /usr/share/nemo/actions. Если хотите, чтобы добавленное вами КМ было доступно только для текущего пользователя, с которого вы сейчас работаете, то добро пожаловать в папку ~/.local/share/nemo/actions, иначе - /usr/share/nemo/actions, но в последнем случаи понадобится root права (которые несложно получить из контекстного меню nemo, выбрав пункт "открыть как root").

Допустим, вы определились с тем, в какой папке вы будете проводить все манипуляции. Теперь мы создадим файл с названием *.nemo_action (где * - любая последовательность символов, если проще, то любое удобное для вас название) и откроем с помощью текстового редактора.

Вобьем следующий шаблон:
[Nemo Action]
#Active=false

Name=
Name[ru]=
Comment=
Comment[ru]=
Exec=
Selection=
Extensions= ;
#Mimetypes= ;
Quote=
Conditions= ;
Icon-Name=
#Dependencies= ;
#EscapeSpaces=true
Затем ознакомимся с более подробный вариантом шаблона (с описанием основных пунктов):
# Знак "#" используется для указания комментариев в коде. 
# В данном случаи, если перед Active его убрать, то .nemo_action не будет работать. 
# Данная команда используется, если, например, скрипт не работает, а вам лень его чинить именно сейчас
#Active=false

# Имя пункта отображаемого в меню (общий случай)
# ОБЯЗАТЕЛЬНЫЙ ПАРАМЕТР
Name=

# Имя пункта отображаемого в меню, если язык системы - русский
Name[ru]=

# Комментарий/подсказка, отображаемая в строке состояния (общий случай)
Comment=

# Комментарий/подсказка, отображаемая в строке состояния, если язык системы - русский
Comment[ru]=

# Путь до файла, который будет обрабатывать действие. 
# Для системных файлов, нах-ся в таких папках, как: /bin, /sbin, /usr/bin, /usr/sbin, как правило, 
# указывать полный путь необязательно, достаточно указать название исполняемого файла
# Для файла, находящегося прямо в папке с  .nemo_action, 
# достаточно указать его название, заключив в такие "кавычки" < >
# ОБЯЗАТЕЛЬНЫЙ ПАРАМЕТР
Exec=

# Способ выделения, при котором пункт будет отображаться в меню:
# "s" - [s]ingle (один), пункт будет отображаться, если выбран только 1 конкретный файл
# "m" - [m]ultiple (несколько), пункт будет отображаться, если выбрано исключительно несколько файлов
# "notnone" - (сочетание single+multiple), пункт будет отображаться, если выбран 1 ИЛИ несколько файлов
# "none" - (фоновый клик), пункт будет отображаться, если совершен только фоновый клик
# "any" - (любой)/(сочетание notnone+none), пункт будет отображаться в любом случаи
#  или просто число, обозначающее, сколько файлов должно быть выбрано, чтобы КМ появилось
# ОБЯЗАТЕЛЬНЫЙ ПАРАМЕТР
Selection=

# Расширение файлов, для которых пункт меню будет отображаться. 
# Одиночные опции, заканчивающиеся точкой с запятой
#     "dir" - для выбранной директории
#     "none" - для файлов без расширения
#     "nodirs" - для любого выбора, но не включая каталоги
#     "any" - для любого типа, включая каталоги
# Отдельные конкретные расширения могут завершать список точкой с запятой
# Расширения НЕ чувствительны к регистру.  jpg будет соответствовать JPG, jPg, jpg, и так далее...
# Этот массив разделяется и заканчивается ";"
# ОБЯЗАТЕЛЬНЫЙ ПАРАМЕТР Extensions или Mimetypes
Extensions= ;

# Какие mime-типы будут отображаться. Этот массив разделяется и заканчивается ";"
# Для архивов -> см. код файла /usr/share/nemo/actions/mount-archive.nemo_action
# Для изображений -> Mimetypes=image/*;
# В общем случаи -> https://goo.gl/0lRMni (ссылка на википедию, статья "Список MIME-типов") :-)
# Также можно использовать терминальную утилиту file, запущенную c параметром --mime-type
# для определения mime-типа какого-то конкретного файла
# Например, file /etc/fstab --mime-type | awk '{print $2}'
# Примечание: на самом деле nemo не проверяет mime-тип файла, а смотрит на его расширение
# т.е. здесь mime-тип фактически является контейнером расширений, но не более
# ОБЯЗАТЕЛЬНЫЙ ПАРАМЕТР Extensions или Mimetypes
Mimetypes= ;

# "Ответ с цитированием"  - заключаем пути/URL-адреса в кавычки. 
# По желанию - по умолчанию без кавычек.
# Может быть:  single (одиночные), double (двойные), backtick (обратные кавычки)
Quote=

# Место, где пункт доступен. Этот массив разделяется и заканчивается ";"
# "desktop" - на рабочем столе или в папке, если родительский путь является рабочий стол
# "removable" целевой объект (первый выделенный) является флешкой (съёмное устройство)
# "gsettings <schema> <boolean key>" - является истиной
# "dbus <name>" - указанное имя существует
Conditions= ;

# Путь иконки в формате png. Системные иконки можно посмотреть в папке /usr/share/icons или "украсть"
# из файлов-ярлыков отсюда /usr/share/applications/, открыв их текстовым редактором.
# Для системных иконок достаточно лишь указать их название (без пути)
Icon-Name=

# Зависимости - это программные исполняемые файлы необходимые для работы этих nemo_actions
# Nemo будет искать пути для этих(ой) программ(ы) и не отобразит действия (action), если таковые пропадут
# Вы также можете использовать абсолютный путь к файлу (т.е. /usr/lib/gvfs/gvfsd-archive) для проверки
# вместо или в дополнение к исполняемому в пути.
# Этот массив разделяется и заканчивается ";"
#Dependencies= ;

# Экранирует пробелы в путях, если установлено в true ($U, $F, $P, $D)
# Иногда это избавит от ошибки для путей не заключённых в кавычки.
# По умолчанию false
#EscapeSpaces=true

# *** Также следует упомянуть стандартные маркеры, которые могут быть использованы ***
#     в Имени (Name), Комментариях (Comment) и полях Пути (Exec) :
#       %U - вставить URI выбранного файла
#       %F - вставить список пути выбранного файла
#       %P - вставить путь родительской (текущей) директории
#       %f или %N (устаревшее) - вставить отображаемое имя первого выбранного файла
#       %p - вставить отображение имени родительской директории
#       %D - вставить путь к устройству или файлу (т.е. /dev/sdb1)
#  (У маркеров прямая связь с полем "Selection")
#
#  Там, где массив разделяется и заканчивается ";", НЕ нужно вставлять лишние пробелы перед или до ";"
Все просто :smile: Ну, а теперь к практическим примерам.

Этот блок из 6 примеров я хотел бы удалить, т.к. уже не считаю их практичными, но коли когда-то выложил, пускай остаются
Зачем это нужно? Ну, знаете, удобно парой создать одним кликом ярлык на к-л папочку или файл, а после переместить его по адресу ул. /usr/share/applications/, предварительно отредактировав текстовым редактором, и указав, в какой каталог меню данный ярлык поместится. Для тех, кто в танке, речь идет про удобное создание ярлыка и перемещение системное меню (которое вызывается клавишей win).
Для начала установим exo-utils, ctr+altl+T и даем команду sudo apt-get install exo-utils
После создаем файл create_item.nemo_action с содержимым:
[Nemo Action]
Name=Create shortcut...
Exec=exo-desktop-item-edit --create-new --type Application --name "Ярлык для %f" --comment "Ярлык для '%F'" --command "exo-open %F" --icon skype_skypeme %P
Selection=s
Extensions=any;
Quote=single
Icon-Name=zim-panel
Dependencies=exo-desktop-item-edit;
Name[ru]=Создать ярлык...
1. Нажимаем "создать ярлык"
1.png
2. Нажимаем на значок
2.png
3. Выбираем понравившийся нам значок и нажимаем кнопку "ОК"
3.png
4. По желанию можете удалить словосочетание "Ярлык для". После нажимаем "Создать"
4.png
5. Создался ярлык, запускаем, жмем кнопку "Сделать доверенной"
5.png
После у ярлыка отобразится иконка
5.1.png
6. Открываем ярлык в текстовом редакторе
6.png
7. Открываем папку /usr/share/applications/, в моем случаи, ярлык нужно переместить в каталог программирование, поэтому я открываю файл, который уже в нем находится и смотрю код
7.png
8. Копируем Categories=Development; в наш ярлык и сохраняем его
8.png
Продемонстрирую перед финальным шагом, что в каталоге программирование, пока нашего ярлыка нет
8.1.png
9. Открываем /usr/share/applications "как root" и копируем наш ярлык в эту папку, profit?!
9.png
Подробнее о методике можно узнать здесь Работа с буфером обмена в Linux: теория и практика. Я лишь отмечу, что поиск будет производиться из primary буфера-обмена, меню будет доступно при фоновом клике рабочего стола. Первым делом создаем здесь - /usr/share/nemo/actions ИЛИ здесь - ~/.local/share/nemo/actions файл search_browser.nemo_action и вносим следующее содержимое:
[Nemo Action]
Name=Search the internet...
Name[ru]=Искать в интернете...
Exec=<search_browser.sh>
Selection=none
Extensions= any;
Conditions= desktop;
Icon-Name=folder-saved-search-symbolic
Dependencies=xclip;
Внимательный читатель должно быть помнит комментарий, написанный в подробном описании чуть выше поля Exec:
# Для файла, находящегося прямо в папке с .nemo_action,
# достаточно указать его название, заключив в такие "кавычки" < >

Возникает вполне резонный вопрос: а что это за файл search_browser.sh, у меня его, вроде, нет?! Все верно, в качестве примера я решил наглядно показать, что в поле Exec спокойно можно указывать путь до обычного скрипта и что "<>" - действительно работает. Итак, создадим файл search_browser.sh со следующим содержимым:
#!/bin/bash
xclip -o | sed -r '2~1d;s/(^\s+|\s+$)//g;s/%/%25/g;s/#/%23/g;s/\$/%24/g;s/&/%26/g;s/\+/%2B/;s/,/%2C/g;s/:/%3A/g;s/;/%3B/g;s/=/%3D/g;s/\?/%3F/g;s/@/%40/g;s/\s/+/g' | awk '{print "http://www.google.ru/search?hl=ru&q=" $1}' | xargs yandex-browser -new-tab


Повторюсь, узнать, что означает этот код, можно в теме Работа с буфером обмена в Linux: теория и практика. Как видите в строчке xargs yandex-browser -new-tab указан яндекс-браузер, далеко ни все пользуются им, поэтому единственный штрих, который вам нужно будет внести в скрипт - заменить yandex-browser на название своего браузера. И, да, не забудьте сделать скрипт исполняемым: ПКМ->Свойства->Права->Разрешить исполнять как программу, иначе ничего не будет работать!
(на примере яндекс-переводчика)
Основная мысль та же, что и в предыдущем примере (Поиск текста, находящегося в буфере обмена, с помощью браузера). Создаем в соответствующей папке файл translate_yandex.nemo_action со следующим содержимым:
[Nemo Action]
Name=Translate into Yandex...
Name[ru]=Перевести в Яндексе...
Exec=<translate_yandex.sh>
Selection=none
Extensions=any;
Conditions=desktop;
Icon-Name=mail-sent-symbolic
Dependencies=xclip;
В ней же создаем файл translate_yandex.sh, вставляем в него код:
#!/bin/bash
xclip -o | sed -r '2~1d;s/(^\s+|\s+$)//g;s/%/%25/g;s/#/%23/g;s/\$/%24/g;s/&/%26/g;s/\+/%2B/;s/,/%2C/g;s/:/%3A/g;s/;/%3B/g;s/=/%3D/g;s/\?/%3F/g;s/@/%40/g;s/\s/+/g' | awk '{print "translate.yandex.ru/?lang=en-ru&text=" $1}' | xargs yandex-browser -new-tab


Если вы пользуетесь не яндекс-браузером, то в xargs yandex-browser -new-tab словосочетание yandex-browser необходимо заменить на название вашего браузера (т.е. на ту команду, с помощью которой браузер можно запустить из терминала).
Если хотите использовать, например, гугл-переводчик, то следует, вместо print "translate.yandex.ru/?lang=en-ru&text=" $1, написать это print "translate.google.com/translate_t?hl=ru#en|ru|" $1. Сохраняем, ПКМ->Свойства->Права->Разрешить исполнять как программу, profit?!
Следуя традиции, создаем primary_clipboard.nemo_action в соответствующей папке, вносим изменения:
[Nemo Action]
Name=Display the contents of the clipboard...
Name[ru]=Отобразить содержимое буфера обмена...
Exec=<primary_clipboard.sh>
Selection=none
Extensions= any;
Conditions= desktop;
Icon-Name=dialog-information-symbolic
Dependencies=xclip;zenity;
Отмечу, что для работы должны быть установлены пакеты xclip и zenity.
Далее в этой же папке создаем текстовый файл primary_clipboard.sh:
#!/bin/bash
STRING=`xclip -o`&&echo -n "$STRING" | zenity --text-info --editable --width=550 --height=500 --title="Содержимое буфера обмена" --icon-name=dialog-information


Не забываем сделать скрипт primary_clipboard.sh исполняемым (ПКМ->Свойства->Права->Разрешить исполнять как программу). КМ будет доступно при фоновом клике ПКМ по рабочему столу.
primary_clipboard.png
В этом примере мы напишем КМ для антивируса Clamav. Его прелесть состоит в том, что он свободный, и его антивирусные базы постоянно обновляются. Управление clamav осуществляется через командную строку, но вам вовсе не обязательно ею пользоваться: можно установить простой графический интерфейс clamtk, который, к слову, переведен на русский.

Для установки антивируса введите команду: sudo apt-get install clamav
Для установки GUI: sudo apt-get install clamtk

Следующим шагом мы должны обновить антивирусную базу. Если вы установили GUI, то можно нажать Alt+F2 и ввести команду clamtk, после чего запустится графический интерфейс.
clamtk_main.png
Затем следует перейти в "Помощник по обновлению" и временно отключить автоматическое обновление, переключив radio кнопку на "Обновление сигнатур вручную" и кликнув "Применить". Это делается для того, чтобы на следующем шаге после того, как мы нажмем кнопку "Назад" и перейдем в пункт "Обновления", у нас появилось предложение "Проверить наличие обновлений".
clamtk_update.png
Подтверждаем согласие - "ОК", запускается процесс обновления. По завершению, можно обратно переключиться на обновление в автоматическом режиме.
clamtk_auto.png
Я обновлял сигнатуры именно этим способом, но вам ничего не стоит их обновить с помощью стандартного функционала clamav: sudo freshclam . Этот способ особенно актуален для тех, кто инсталлировал только clamav (без clamtk).

Антивирус с обновленными базами к старту готов. Стойте, подождите, не спешите уходить! Мы еще не закончили, а как же контекстное меню? :crazy: Вы же не хотите для того, чтобы проверить объект, запускать каждый раз терминал или граф. интерфейс и указывать необходимый файл?! Отлично, тогда давайте организуем удобное взаимодействие с ФМ. Для этого в соответствующей папке создадим файл clamav.nemo_action со следующим содержимым:
[Nemo Action]
Name=Scan for viruses files/folders
Comment=Scan for viruses "%F"
Name[ru]=Проверить на вирусы файлы/папки
Comment[ru]=Проверить на вирусы "%F"
Exec=<clamav.sh %F>
Selection=s
Extensions=any;
Icon-Name=catfish
Quote=double
Dependencies=clamscan;zenity;
Рядом с ним - скрипт clamav.sh:

Код: Выделить всё

#!/bin/bash
fullpathname=$@
name=${fullpathname##*/}
path=${fullpathname%/*}

AAA=`zenity --forms --title=clamav --text="Поиск вирусов в $fullpathname" --add-combo="Удалять зараженные файлы" --combo-values="да|нет" --add-combo="Проверять вложенные каталоги" --combo-values="да|нет" --add-combo="Полностью очистить лог" --combo-values="да|нет"`

#i - показывать только зараженные файлы. --remove=yes - удалять зараженные файлы. -r - рекурсивное вхождение
options="-i --remove=yes -r"
clearing_log="нет"

if [ $? = 0 ]
   then
        if [ "$AAA" = "" ]
            then
                zenity --info --title="Отмена" --text="Операция отменена"
                exit
        fi
        remove=$( echo $AAA | awk -F '|' '{print $1}')
        recursive=$( echo $AAA | awk -F '|' '{print $2}')

        if [ "$remove" = "нет" ]
            then
                options="-i -r"
                if [ "$recursive" = "нет" ]
                    then options="-i"
                fi
        else
            if [ "$recursive" = "нет" ]
                then options="-i --remove=yes"
            fi
        fi

        clearing_log=$( echo $AAA | awk -F '|' '{print $3}')
        if [ "$clearing_log" = "да" ]
            then rm $HOME/.clamav_history
        fi

        echo -e "\n###################################################\n       Дата выполнения сканирования: $(date +%B\ %d.%m.%y\ -\ %a\ \|\ %H:%M)\nЗапрос: clamscan $options \"$fullpathname\"\n###################################################" >> $HOME/.clamav_history && clamscan $options "$fullpathname" >> $HOME/.clamav_history
        zenity --text-info --width=700 --height=500 --auto-scroll --title="Результаты сканирования clamav" --filename="$HOME/.clamav_history" 
fi
Не забываем сделать скрипт clamav.sh исполняемым (ПКМ->Свойства->Права->Разрешить исполнять как программу).

Готово! Пользоваться КМ очень просто. При клике "Проверить на вирусы файлы/папки" вызывается zenity, вопрошая следующее:
script_zenity.png
По правде говоря, вы можете ничего не отвечать, сразу нажать кнопку "OK". В таком случаи, скрипт выполнит сканирование с параметрами "по умолчанию":
Удалять зараженные файлы - ДА
Проверять вложенные каталоги - ДА
Полностью очистить лог - НЕТ

Однако, если вам нужно, например, чтобы скрипт clamav не удалял зараженные файлы, вы можете указать соответствующий пункт в всплывшем окне.
script_zenity1.png
Пункт "Проверять вложенные каталоги" актуален, ибо в .nemo_action указано одиночное выделение файла (поскольку скрипт принимает лишь один путь):
Selection=s

Поэтому, если вам нужно, например, проверить только файлы, находящиеся на рабочем столе, без рекурсивного вхождения в папки, хранящиеся там же, то вы можете выделить папку рабочего стола, вызвать КМ, указать "Проверять вложенные каталоги - НЕТ"... Скажете - неудобно?! Что ж, возможно, но мой уровень создания скриптов не позволяет мне сделать бОльшего. Я не волшебник, я только учусь ;) Желающие написать более продвинутый скрипт - код в студию. :smile:

Результаты сканирования записываются в файл ~/.clamav_history, а после вызываются с помощью функционала zenity:
zenity_result.png
Со временем, если вы будете пользоваться данным КМ, лог будет пополняться все новыми результатами сканирования, поэтому, если вы захотите его очистить, во время следующего запуска укажите "Полностью очистить лог".
---------------------------------------------------------------------------
Создадим файл Dr.Web.nemo_action и внесем следующий правки:
[Nemo Action]
Name=Scan for viruses files/folders
Comment=Scan for viruses "%F"
Name[ru]=Проверить на вирусы файлы/папки
Comment[ru]=Проверить на вирусы "%F"
Exec=drweb-gui %F
Selection=any
Extensions=any;
Icon-Name=drweb-gui
Quote=single
Dependencies=drweb-gui;
Порой хочется посмотреть, сколько места занимают та или иная папка, тот или иной файл в дереве каталогов. Соответствующий пункт в ФМ nemo "Сортировка"->"Размер" корректно сортирует лишь файлы, к папкам он применяет правило: если в папке "а" больше файлов (в количественном отношении), чем в папке "б", то папка "а" занимает больше места на диске... Что ни есть правда. Можете протестировать: создайте 3 папки, в 1-ю добавьте 3 текстовых файла, во 2-ю 2 текстовых файла, в 3-ю - один какой-нибудь фильм или музыкальный файл, отсортируйте по размеру и убедитесь в моих словах... Преступим к созданию соответствующего пункта КМ для более объективной оценки размера файлов и папок :) Для начала нам нужно установить продвинутый вариант программы du: ncdu.

Немного справки: du - позволяет выводить размер файлов и папок в консоль. Установлен из коробки. Конечно, в сочетании с sort -nr (сортировщиком) мы можем достичь желаемого результата в случаи, если запросим у du выводить размер в КБ. Но это не очень удобно... Мы также можем попросить выводить в МБ и КБ, но тогда сортировщик сломается. Поэтому ncdu - более предпочтительный вариант, поскольку выполняет сортировку сам с корректным отображением GB, MB и KB.

Установим ncdu,ctrl+alt+T, вводим команду sudo apt-get install ncdu. Затем создаем файл ncdu.nemo_action в известной папке со следующим содержанием:
[Nemo Action]
Name=Sort by size folder
Name[ru]=Сортировать по ncdu
Exec=gnome-terminal -x sh -c 'ncdu %P'
#Фоновый клик
Selection=none
Extensions=any;
Icon-Name=reload
EscapeSpaces=true
Dependencies=ncdu;
Скриншот:
Снимок экрана от 2017-02-20 05-02-01.png
Если мы выберем к-л изображение, нажмем ПКМ, появится КМ "Сделать фоном". Иногда оно работает, иногда нет. Если конкретнее, то, когда файл изображения назван буржуйскими англиЦкими буквами, то оно работает, если русскими - нет. Что ж исправим этот недочет ;) Откроем файл /usr/share/nemo/actions/set-as-background.nemo_action и заменим строку gsettings set org.cinnamon.desktop.background picture-uri "%U" на строку
gsettings set org.cinnamon.desktop.background picture-uri file://"%F"
и сохраним документ.
(на примере gedit)
Парой нужно отредактировать какие-либо системные конфиги, не поддающиеся редактированию в обычном режиме. Конечно, можно запустить терминал или alt+F2 и ввести соответствующую команду, но когда у нас открыт ФМ прямо в папке с интересующим нас конфигом, очень удобно открыть его как root в 1 клик. Я использую в качестве простого текстового редактора - gedit, у вас может быть какой-либо другой, например, xed, который у всех установлен из коробки. Если так, то просто замените в конфиге все слова gedit на xed. Итак, создадим в соответствующей папке файл open_gedit_root.nemo_action со следующим содержимым:
[Nemo Action]
Name=Open the file gedit as a root
Name[ru]=Открыть файл в gedit как root
Comment=Open "%f" using gedit as a root
Comment[ru]=Открыть "%f" в gedit как root
Exec=gksu gedit %F
Selection=notnone
Mimetypes=text/plain;
Icon-Name=accessories-text-editor
EscapeSpaces=true
Dependencies=gedit;
Подробнее о методике можно узнать из темы Скрытие файлов и директорий, выражаю благодарность Chocobo, любезно предоставившего необходимый скрипт. Что ж, создадим текстовый файл hidden.nemo_action здесь - /usr/share/nemo/actions ИЛИ здесь - ~/.local/share/nemo/actions со следующим содержимым:
[Nemo Action]
Name=Make hidden files/folders
Name[ru]=Сделать скрытыми файлы/папки
Comment=Hide %F
Comment[ru]=Скрыть %F
Exec=<hidden.py %F>
Selection=notnone
Extensions= any;
Icon-Name=changes-prevent-symbolic
Quote=single
Далее в этой же папке создаем файл hidden.py:

Код: Выделить всё

#!/usr/bin/python
import sys
import os
i=1
while i < len(sys.argv):
    try:
        while str(sys.argv[i+1])[0] != '/':
            sys.argv[i]=sys.argv[i]+ " "+sys.argv.pop(i+1)
            if sys.argv[i+1][0] == '/':
               i= i+1
        i= i+1
    except IndexError: 
        break
for i in sys.argv[1:]:
    path = i[:i.rfind('/')+1]
    name = i[i.rfind('/')+1:]
    with open(path+".hidden", "a") as hidden:
        hidden.write(name+"\n")
Не забываем сделать скрипт hidden.py исполняемым (ПКМ->Свойства->Права->Разрешить исполнять как программу).
По просьбе пользователя SATORY_RA переношу данный пример/пост в шапку темы. Итак, создадим в соответствующей папке файл *.nemo_action (где * - любое удобное для вас название) со следующим содержимым:
[Nemo Action]
Name=On/Off rest-mode
Name[ru]=Вкл/Выкл ТВ
Conditions= desktop;
Exec=<rw.sh>
Selection=none
Extensions=any;
Icon-Name=display
Далее в этой же папке создаем текстовый файл-скрипт rw.sh:

Код: Выделить всё

#!/bin/bash

IN="HDMI-1"
EXT="HDMI-2"

if (xrandr | grep "$EXT" | cut -d ' ' -f 2- | grep [0-9])
    then
    xrandr --output $EXT --off --output $IN --auto --primary
    SINK=$(pacmd list-sinks|grep '[^*] index'|sed 's/.*: //')
    pacmd set-default-sink ${SINK}
    pacmd list-sink-inputs |grep 'index: '|sed 's/\s*index: //'|while read x
    do
    pacmd move-sink-input "$x" "${SINK}";
    done
    else
            xrandr --output $IN --auto --primary  --output $EXT --auto --left-of $IN
            SINK1=$(pacmd list-sinks|grep '[^*] index'|sed 's/.*: //')
            pacmd set-default-sink ${SINK1}
            pacmd list-sink-inputs |grep 'index: '|sed 's/\s*index: //'|while read x
            do
            pacmd move-sink-input "$x" "${SINK1}";
            done
fi
Не забываем сделать скрипт rw.sh исполняемым (ПКМ->Свойства->Права->Разрешить исполнять как программу).

Подробнее о скрипте, о том, как он работает можно узнать в теме Скрипт на Bash для включения/выключения второго экрана и переброса звука. :smile:
В этом примере мы напишем КМ для антивируса Clamav. Его прелесть состоит в том, что он свободный, и его антивирусные базы постоянно обновляются. Управление clamav осуществляется через командную строку, но вам вовсе не обязательно ею пользоваться: можно установить простой графический интерфейс clamtk, который, к слову, переведен на русский.

Для установки антивируса введите команду: sudo apt-get install clamav
Для установки GUI: sudo apt-get install clamtk

Следующим шагом мы должны обновить антивирусную базу. Если вы установили GUI, то можно нажать Alt+F2 и ввести команду clamtk, после чего запустится графический интерфейс.
clamtk_main.png
Затем следует перейти в "Помощник по обновлению" и временно отключить автоматическое обновление, переключив radio кнопку на "Обновление сигнатур вручную" и кликнув "Применить". Это делается для того, чтобы на следующем шаге после того, как мы нажмем кнопку "Назад" и перейдем в пункт "Обновления", у нас появилось предложение "Проверить наличие обновлений".
clamtk_update.png
Подтверждаем согласие - "ОК", запускается процесс обновления. По завершению, можно обратно переключиться на обновление в автоматическом режиме.
clamtk_auto.png
Я обновлял сигнатуры именно этим способом, но вам ничего не стоит их обновить с помощью стандартного функционала clamav: sudo freshclam (см. также Постоянные проблемы с Clamav). Этот способ особенно актуален для тех, кто инсталлировал только clamav (без clamtk).

Антивирус с обновленными базами к старту готов. Стойте, подождите, не спешите уходить! Мы еще не закончили, а как же контекстное меню? :crazy: Вы же не хотите для того, чтобы проверить объект, запускать каждый раз терминал или граф. интерфейс и указывать необходимый файл?! Отлично, тогда давайте организуем удобное взаимодействие с ФМ.

Если у вас не установлен yad, установите, потому что именно его использует мой скрипт (я бы, конечно, мог заставить использовать zenity, который установлен "из коробки", но зачем изобретать велосипед на квадратных колесах?!):
sudo apt install yad

Теперь создадим файл /usr/share/nemo/actions/clamav.nemo_action со следующим содержимым:
[Nemo Action]
Name=Scan for viruses files/folders
Comment=Scan for viruses "%F"
Name[ru]=Проверить на вирусы файлы/папки
Comment[ru]=Проверить на вирусы "%F"
Exec=gnome-terminal --hide-menubar --geometry=90x28 -x sh -c "/usr/share/nemo/actions/clamav.sh %F"
Selection=any
Extensions=any;
Icon-Name=clamtk
Quote=single
Dependencies=clamscan;yad;find;awk;
Рядом с ним - скрипт clamav.sh:

Код: Выделить всё

#!/bin/bash

AAA=`yad --title="Scan for threats..." --width=250 --window-icon=/usr/share/pixmaps/clamtk.png --form --item-separator="|" --separator="," --field="Удалять зараженные файлы:CHK" 'TRUE' --field="Проверять вложенные каталоги:CHK" 'TRUE' --field="Включить псевдопрогресс:CHK" 'TRUE' --field="Политика symbolic link:CB" "^По умолчанию (следовать, если ссылка передана в качестве аргумента)|Следовать для директорий и файлов" `

if [[ -z "$AAA" ]]; then
    echo "Операция отменена!"; exit
fi

remove="$(echo $AAA | awk -F ',' '{print $1}')"
recursive="$(echo $AAA | awk -F ',' '{print $2}')"
progress="$(echo $AAA | awk -F ',' '{print $3}')"
symlinks_c="$(echo $AAA | awk -F ',' '{print $4}')"
type_of_scan=''

if [[ "$remove" = "TRUE" ]]; then remove='--remove=yes'; else remove=''; fi
if [[ "$recursive" = "TRUE" ]]; then recursive='-r'; else recursive=''; fi

if [[ "$symlinks_c" = 'По умолчанию (следовать' ]]; then symlinks_c=''
else symlinks_c='--follow-dir-symlinks=2 --follow-file-symlinks=2'; fi;

    if [[ "$recursive" = "-r" ]]; then

        final_options_f='-type f'
        if [[ "$symlinks_c" = '' ]]
        then
            type_of_scan='Обрабатывать только файлы и папки + явно заданные в аргументе symlink-и (с рекурсивным вхождением)'
            first_options_f='-H'
        else
            type_of_scan='Обрабатывать все и вся (с рекурсивным вхождением)'
            first_options_f='-L'
        fi
    else
        final_options_f='-maxdepth 1 -type f -printf %f\\n\\r'
        if [[ "$symlinks_c" = '' ]]
        then
            type_of_scan='Обрабатывать только файлы + явно заданные в аргументе файлы-symlink-и (без рекурсивного вхождения)'
            first_options_f=''
        else
            type_of_scan='Обрабатывать только файлы и файлы-symlink-и (без рекурсивного вхождения)'
            first_options_f='-L'
        fi
    fi

if [[ "$progress" = "TRUE" ]]; then
    tmp='0'
    log_file="--log=$HOME/clamavscan_log_file.txt"
    file_c=0
    for i in "$@"
    do
        if [[ -f "$i" ]]
            then file_c="$[file_c+1]"
            else
                file_c="$[file_c+$(echo -e "$(find $first_options_f "$i" $final_options_f)" | wc -l)]"
                tmp="$[tmp+1]"
        fi
    done
    if [[ "$recursive" = '' && "$tmp" -ne '0' ]]; then file_c="$[file_c-tmp]"; fi
    clear; echo "Текущая версия антивируса:"; freshclam -V
    echo -e "\nТип сканирования: \n$type_of_scan\n\nПримерное количество файлов для сканирования: $file_c"
    clamscan $log_file $remove $recursive $symlinks_c "$@" | awk -F: '$2 ~ /OK/ || /FOUND/ {ok++} {printf "Примерное количество проверенных файлов: %d\r", ok}'
    cat ${log_file#--log=}
    rm ${log_file#--log=}
else
    clear; echo "Текущая версия антивируса:"; freshclam -V
    echo -e "\nТип сканирования: \n$type_of_scan\n"
    echo; clamscan -o $remove $recursive $symlinks_c "$@"
fi

echo; read -p 'Сканирование завершено, нажатие Enter закроет окно! '; exit
Не забываем сделать скрипт clamav.sh исполняемым (ПКМ->Свойства->Права->Разрешить исполнять как программу).

Готово! Пользоваться КМ очень просто. Для этого кликнем ПКМ, заранее выделив целевые объекты сканирования, и нажмем "Проверить на вирусы файлы/папки". Появится следующие окошко:
yad_clam_01.png
В котором мы можем задать параметры сканирования, на которых я особо останавливаться не буду, по-моему итак все очевидно. Замечу лишь, что я реализовал возможность отслеживать ход выполнения сканирования в параметре "Псевдопрогресс", поскольку в самом clamscan этой возможности нет (кроме "летящих" вниз надписей "ОК", ничего не видно). По умолчанию он включен, т.к. только из-за этой функции я и переписал это КМ на новый лад. Его суть состоит в том, что перед началом сканирования, скрипт подсчитывает примерное число файлов для проверки и выводит его на экран, а во время сканирования отправляет вывод строк clamscan по конвейеру в awk, который выполняет подсчет их количества в режиме реального времени. Таким образом, мы можем оценить "на глаз" примерное время до окончания сканирования.

Кроме того, скрипт выводит текущую версию clamav, его антивирусных баз и результаты работы сканера, выглядит это примерно так:
yad_clam_d.gif
gif-ка
yad_clam_02.png
Нашел троянчик :)
:thumbs:
Для работы данного КМ нам понадобится LibreOffice, который, кстати, говоря, установлен у вас "из коробки"; ведь именно его средствами будет выполняться преобразование.
Создадим в соответствующей папке файл docs_to_pdf.nemo_action:
[Nemo Action]
Name=Convert documents to pdf
Comment=Convert MS Office documents, LibreOffice and txt to pdf
Name[ru]=Конвертировать документы в pdf
Comment[ru]=Конверт. документы MS Office, LibreOffice и txt в pdf
Exec=<docs_to_pdf.sh %F>
Selection=notnone
Extensions=doc;docx;rtf;txt;odt;xls;xsls;ods;odp;pptx;ppt;
EscapeSpaces=true
Icon-Name=application-pdf
Dependencies=loimpress;localc;lowriter;
Рядом с ним, т.е. в той же папке, создадим обрабатывающий события скрипт docs_to_pdf.sh:

Код: Выделить всё

#!/bin/bash
for file in "$@"
do
    output=$output"\n"$file
    path=${file%/*}
    expansion=${file##*.}
    if [ "$expansion" = "xls" ] || [ "$expansion" = "xsls" ] || [ "$expansion" = "ods" ]
        then
            localc --convert-to pdf "$file" --outdir "$path"
        else
            if [ "$expansion" = "odp" ] || [ "$expansion" = "pptx" ] || [ $expansion = "ppt" ]
                then
                    loimpress --convert-to pdf "$file" --outdir "$path"
                else                
                    if [ "$expansion" = "doc" ] || [ "$expansion" = "docx" ] || [ "$expansion" = "odt" ] || [ "$expansion" = "rtf" ] || [ "$expansion" = "txt" ]
                        then
                            lowriter --convert-to pdf "$file" --outdir "$path"
                    fi
            fi
    fi
done
notify-send -t 10000 -i "gtk-ok" "Завершено" "Преобразование в PDF документов:$output"
Не забываем сделать скрипт docs_to_pdf.sh исполняемым (ПКМ->Свойства->Права->Разрешить исполнять как программу
Не знаю, к сожалению или к счастью, но LM-C из КМ имеет возможность вычислить только sha256. Я решил немного переписать файл /usr/share/nemo/actions/mint-sha256sum.nemo_action, дабы расширить функционал. Получилось вот что:
nemo, hash.png
При вызове КМ появляется zenity-окно, в котором можно выбрать интересующую нас функцию. После расчетов появляется окно с результатом:
nemo, hash_2.png
Как видно на скриншоте, теперь можно выделять сразу несколько файлов для проверки их целостности, а не только один.

На этом презентация окончена, если вам приглянулись данные улучшения, тогда
1) Переходим в каталог с КМ, переименовываем файл mint-sha256sum.nemo_action в hash_sum.nemo_action, открываем текстовый редактор:
cd /usr/share/nemo/actions
sudo mv mint-sha256sum.nemo_action hash_sum.nemo_action
gksu xed hash_sum.nemo_action
2) hash_sum.nemo_action должен принять вид:
[Nemo Action]
Name=Check the hash
Comment=Check the hash of the file
Name[ru]=Проверить хеш
Comment[ru]=Проверить хеш-сумму файла
Exec=<hash_sum.sh %F>
Selection=notnone
Extensions=iso;img;
Icon-Name=gtk-execute
Quote=single
Dependencies=md5sum;sha256sum;sha1sum;sha224sum;sha384sum;sha512sum;zenity;
Примечание: если хотите, можете привести строку Extensions=iso;img; к виду Extensions=nodirs; , чтобы иметь в будущем возможность проверять целостность не только iso или img, а в принципе любых файлов...

Сохраняем файл hash_sum.nemo_action, переходим к следующему шагу.

3) Создаем пустой текстовый файл hash_sum.sh, открываем в xed:

Код: Выделить всё

cd /usr/share/nemo/actions
sudo touch hash_sum.sh
gksu xed hash_sum.sh
4) Скрипт hash_sum.sh должен принять вид:

Код: Выделить всё

#!/bin/bash

result=`zenity --list --title="Вычисление хеш-сумм" --text="Что вычислить?" \
	--radiolist --column "" --column "Функция" \
	FALSE "md5" \
	TRUE "sha256" \
	FALSE "sha1" \
	FALSE "sha224" \
	FALSE "sha384" \
	FALSE "sha512" \
	 --height=270 \
	 --width=220`

if [ "$result" = "" ]
then
    zenity --info --title="Отмена" --text="Операция отменена"
    exit
fi

result_sum="$result""sum"

for x in $@
do	
    all="$all<b>$result</b>: $(basename $x) <b>-></b> $($result_sum $x | awk '{print $1}')\n"
	
done

zenity --info --title="Результат" --text="$all"
Сохраняем изменения.

5) Даем права на выполнение:
sudo chmod a+x /usr/share/nemo/actions/hash_sum.sh

Все, можете проверять :smile:
Более подробную информацию можно узнать в соответствующей теме нашего форума - Bittorrent Filesystem. Для работы КМ нам понадобится утилита btfs, которую нужно установить командой: apt install btfs
Далее необходимо создать файл /usr/share/nemo/actions/btfs_mount.nemo_action со следующим содержимым:
[Nemo Action]
Name=Mount the torrent file
Comment=Mount %F
Name[ru]=Монтировать торрент-файл
Comment[ru]=Монтировать %F
Exec=<btfs.sh %F>
Selection=s
Extensions=torrent;
Icon-Name=application-x-bittorrent
Quote=single
Dependencies=btfs;zenity;
И обрабатывающий скрипт /usr/share/nemo/actions/btfs.sh:

Код: Выделить всё

#!/bin/bash

mount_point=`zenity --entry --title="Точка монтирования" --text="Куда монтировать?"`

if [ $? = 0 ]
    then
	    if [ -z "$mount_point" ]
		    then
		        zenity --info --width=250 --title="Отмена" --text="Операция отменена. Нулевой путь."
		        exit
	    fi
        #заменяем ~ на $HOME
        if [ "$(echo ${mount_point:0:1})" = "~" ]
            then
                mount_point="$HOME/${mount_point#*/}"
        fi

        if [ -d "$mount_point" ]
            then
                btfs "$1" "$mount_point"
                #здесь следовало бы вывести возможные ошибки, связанные с отсутствием необходимых
                #прав или с тем, что каталог не пуст, но btfs не возвращает статус.
                #конструкция вроде text_btfs="$(btfs "$1" "$mount_point")" также всегда возращает пустую строку :\                  
            else 
                zenity --question --width=400 --text="Директории <b>\"$mount_point\"</b> не существует. Хотите её создать?"
                if [ $? = 0 ]
                    then
                        mkdir -p "$mount_point"
                        if [ $? = 1 ]
                            then
                                zenity --error --width=350 --text="Невозможно создать каталог <b>«$mount_point»</b>: Отказано в доступе"
                                exit
                        fi
                        btfs "$1" "$mount_point"
                    else
                        zenity --info --width=200 --text="Операция отменена."
                        exit
                fi
        fi

    else
        zenity --info --width=200 --title="Отмена" --text="Операция отменена"
        exit
fi
Не забываем сделать скрипт btfs.sh исполняемым (ПКМ->Свойства->Права->Разрешить исполнять как программу) или sudo chmod a+x /usr/share/nemo/actions/btfs.sh

КМ будет доступно при одиночном клике по торрент-файлу:
00_btfs.png
При запуске появится окно с вопросом, в какую папку монтировать торрент:
01_btfs.png
Сразу оговорюсь, КМ работает только с папками, к которым есть доступ на запись у вашего пользователя, а монтирование, как известно, возможно только в пустую папку.
В качестве пути монтирования можно указать как существующую пустую папку, так и несуществующую. В последнем случаи появится окно с вопросом, действительно ли вы хотите это сделать:
03_btfs.png
Нажимаем Yes, готово:
04_btfs.png
Чтобы отмонтировать торрент-файл, необходимо выполнить команду fusermount -u "путь_до_директории_монтирования". Парой после ввода команды высвечивается сообщение: "не удалось размонтировать, устройство или ресурс заняты"
06_btfs.png
В этом случаи, имеет смысл выполнить эту команду при следующем запуске компьютера.
Нам понадобится программа gprename, поэтому нажимаем ctrl+alt+T и вводим sudo apt install gprename

После этого создаем в соответствующей папке файл gprename.nemo_action со следующим содержимым:
[Nemo Action]
Name=Batch rename
Name[ru]=Пакетное переименование
Comment=Batch rename files or folders in %P
Comment[ru]=Пакетное переименование файлов или папок в %P
Exec=gprename %P
#Фоновый клик
Selection=none
Extensions=any;
Quote=single
Icon-Name=text-editor
Dependencies=gprename;
КМ будет появляться при фоновом клике и при надобности запустит gprename, передав ему путь текущей открытой директории.

Немного отклоняясь от предмета разговора, замечу, что gprename не создает ярлык в cinnamon-овском меню. Если захотите исправить это, тогда:

1) Откройте терминал и введите cd ~/.local/share/applications/ && nano gprename.desktop; chmod +x gprename.desktop

2) Вставьте следующее:

Код: Выделить всё

[Desktop Entry]
Name=GPRename
Comment=Batch rename files or folders
Comment[ru]=Пакетное переименование файлов или папок
Exec=gprename
Icon=text-editor
Categories=Utility;
Terminal=false
Type=Application
NoDisplay=false
3) Ctrl+X (выход), подтверждаем сохранение, нажав Y, а затем Enter.

После проведенных выше манипуляций ярлык программы окажется в Меню->Стандартные->GPRename.
По наводке пользователя demonlibra, размещаю данное КМ. Я его слегка облагородил в сравнении с оригиналом, но основная идея осталась прежней.

Для работы нам понадобятся 2 пакета, поэтому если у вас их нет, следует установить:
sudo apt install graphicsmagick-imagemagick-compat yad

Примечание: ранее я использовал zenity, но его возможности сильно ограничены, а костыли мне придумывать не хочется. Поэтому здесь используется yad.
Примечание 2: вместе с yad поставляется "БрОузер иконок", который можно запустить командой yad-icon-browser, в результате высветится окошко, где можно подобрать понравившуюся иконку для любого КМ и вставить её название в параметр Icon-Name=Название_иконки.
браузер_иконок.png
В соответствующей папке необходимо создать 2 файла:

Само КМ - image_montage.nemo_action
[Nemo Action]
Name=Combine images
Name[ru]=Объединить изображения
Exec=<image_montage.sh %F>
Selection=m
Extensions=bmp;gif;ico;jpe;jpg;jpeg;png;ppm;tif;tiff;
Icon-Name=extension
Quote=single
Dependencies=yad;montage;
Обрабатывающий его скрипт - image_montage.sh

Код: Выделить всё

#!/bin/bash

#Получаем имя файла без расширения; имя файла с расширением -> имя файла без расширения
namenoext="${1%%.*}" && namenoext="${namenoext##*/}"
#Получаем расширение
ext="${1##*.}"

AAA=`yad --borders=10 --window-icon=extension --width=350 --title="Объединить изображения" --text="Введите параметры" --form --item-separator="|" --separator="," --field=":LBL" --field="Направление:CB" --field="Отступ" --field="Имя файла" "" "^вертикально|горизонтально" "0" " $namenoext"_montage."$ext"`

if [[ -z "$AAA" ]]; then 
    #yad --image="dialog-warning" --text="Операция отменена!" --title="Отмена" --button=gtk-ok --text-align=center
    echo "Операция отменена!"; exit
fi

#Направление
direction="$(echo $AAA | awk -F ',' '{print $2}')"
#Отступ
space="$(echo $AAA | awk -F ',' '{print $3}')"
#Путь до родительской директории/имя файла, заданное в yad
newname="${1%/*}/$(echo $AAA | awk -F ',' '{print $4}')"

if [[ "$direction" = "вертикально" ]]; then
    montage "$@" -geometry +0+$space -tile 1x$# "$newname"
else
    montage "$@" -geometry +$space+0 -tile $#x1 "$newname"
fi
Не забываем сделать скрипт исполняемым: ПКМ->Свойства->Права->Разрешить исполнять как программу или sudo chmod +x image_montage.sh

КМ будет доступно при выборе 2-х или более изображений. Вызовется такое окошко:
объединение_изображений_окно_yad.png
После нажатия кнопки "ОК", управление передастся нашему скрипту, который создаст в родительской директории объединенное результирующие изображение.
Спасибо за внимание! Не забудьте поделиться своим опытом использования .nemo_action :)

У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось пользователем 35 root; всего редактировалось раз: 31
Причина: Парочка символических правок в подробном шаблоне
Вы не готовы! :pc2:
Изображение

Аватара пользователя

zuzabrik
Сообщения: 1289
Зарегистрирован: 29 авг 2016, 09:08
Решено: 16
Благодарил (а): 77 раз
Поблагодарили: 385 раз

Контекстное меню ФМ nemo

Сообщение zuzabrik » 19 фев 2017, 07:05

Лайк тебе за темку. Сам никогда не использовал штатные ФМ различных ДЕ, но судя по постам на форуме добавление туда всяческих контекстных меню тема актуальная.
Наш IRC-канал для общения: #linuxmint-ru на сервере irc.spotchat.org
Для захода откройте HexChat, выберите сервер Linux Mint и наберите в чате /join #linuxmint-ru
Или любым другим удобным способом ;)

Аватара пользователя

colonel
Сообщения: 997
Зарегистрирован: 18 дек 2016, 09:08
Решено: 16
Благодарил (а): 27 раз
Поблагодарили: 274 раза

Контекстное меню ФМ nemo

Сообщение colonel » 19 фев 2017, 17:39

Лайкнул, в общем -то направление задано правильное о том как можно добавить строки в меню ,
но блин товарЫщЫ-друзья звиняйте , появились вопросы , однако ...
adminka писал(а): а теперь к практическим примерам. Перед тем, как начать, предложу вам скидывать свои варианты .nemo_action, дабы делиться опытом :)
Добавляем возможность создать ярлык ► Показать

ну добавил , в настройках Nemo Правка-Плагины- окно Действия и появилась строчка для добавления в контекстное меню Создание ярлыка... и после включения даже в контекстном меню по ПКМ имеется такая строка .
вопрос первый - а почему не работает ? (ну не создаётся ярлыка )
вопрос второй - если заработает, то чем этот способ (этот созданный пункт меню ) отличается в работе от стандартного имеющегося пункта Создать ссылку? (что тоже самое кроме разницы в названии и в том что создание ссылки нормально работает )
"Не ты выбираешь Linux, а Linux выбирает тебя"
(с)Себастьян Перейра, торговец чёрным деревом

Аватара пользователя

Автор темы
root
Сообщения: 852
Зарегистрирован: 16 фев 2017, 17:03
Решено: 5
Откуда: г. Хабаровск
Благодарил (а): 264 раза
Поблагодарили: 226 раз

Контекстное меню ФМ nemo

Сообщение root » 19 фев 2017, 18:44

colonel писал(а): ну добавил , в настройках Nemo Правка-Плагины- окно Действия и появилась строчка для добавления в контекстное меню Создание ярлыка... и после включения даже в контекстном меню по ПКМ имеется такая строка .
вопрос первый - а почему не работает ? (ну не создаётся ярлыка )
вопрос второй - если заработает, то чем этот способ (этот созданный пункт меню ) отличается в работе от стандартного имеющегося пункта Создать ссылку? (что тоже самое кроме разницы в названии и в том что создание ссылки нормально работает )
Разница в подходе: ярлык - это не ссылка. Ссылку вы в меню не запихаете, ибо оно использует ярлыки :) Либо вы не установили exo-utils, либо попробуйте перезапустить nemo, и отпишитесь, пож-та, о результате!

ЗЫ: если я правильно понимаю, то ярлык - текстовый файл, который обрабатывается ОС, ссылка - указатель на область в памяти, обрабатываемый файловой системой. Т.е. в первом случаи - высокий уровень, во втором - низкий. +концепция, как я заметил выше, отличается. У ярлыка есть различные параметры, которые задаются исключительно в нем: комментарии, путь файла запуска, иконки. У самой ссылки этого нет. Она ориентируется на объект, на который ссылается...
ЗЫ 2: добавил демонстрацию практического применения в шапке темы
Вы не готовы! :pc2:
Изображение

Аватара пользователя

x230
Сообщения: 1152
Зарегистрирован: 02 сен 2016, 19:07
Решено: 3
Откуда: Краснодарский край
Благодарил (а): 226 раз
Поблагодарили: 299 раз

Контекстное меню ФМ nemo

Сообщение x230 » 20 фев 2017, 10:48

adminka писал(а): ярлык - текстовый файл, который обрабатывается ОС, ссылка - указатель на область в памяти, обрабатываемый файловой системой
собственно... :thumbs:
. . . .
Но я о другом.
Exo-utils я установил. Ярлык "создается". Но в целом - это не то, чего ожидал.
После клика на пункте "Создать ярлык" появляется это:


Настройки такие:
[Nemo Action]
Name=Create shortcut...
Comment=Creating shortcut
Exec=exo-desktop-item-edit -c -t Application --name "Ярлык для %f" --comment "Ярлык для '%F'" --command "exo-open %F" --icon skype_skypeme %P --url "%f"
Selection=s
Extensions=any;
Quote=single
Stock-Id=gtk-add
Name[ru]=Создать ярлык...
Так вот, хотелось чтоб сразу без посл.указания пути для сохранения и вообще без подобный промежут.шагов.
В параметре -с (--create-new) что-то вообще можно указывать (как в других параметрах)?
моя платформа :
ОС: Linux Mint 18.3, x64 DE: Xfce 4.12.3 Ядро: 4.15.1 Browser: Pale Moon 27.*; Железо: Intel Core i3-3210; Mem 4GB; VGA - на борту.

В сети
Аватара пользователя

Dja
Сообщения: 4589
Зарегистрирован: 27 авг 2016, 17:03
Решено: 14
Откуда: Voskresensk
Благодарил (а): 622 раза
Поблагодарили: 486 раз

Контекстное меню ФМ nemo

Сообщение Dja » 20 фев 2017, 11:20

x230 писал(а): без посл.указания пути для сохранения и вообще без подобный промежут.шагов.
для этого корчитчане юзают среднюю кнопку
Новичок? - ознакомься с правилами
и Панель форматирования
Изображение
IRC-канал #linuxmint-ru на сервере irc.spotchat.org
Изображение

Аватара пользователя

x230
Сообщения: 1152
Зарегистрирован: 02 сен 2016, 19:07
Решено: 3
Откуда: Краснодарский край
Благодарил (а): 226 раз
Поблагодарили: 299 раз

Контекстное меню ФМ nemo

Сообщение x230 » 20 фев 2017, 11:47

Dja писал(а):юзают среднюю кнопку
В какой момент? Подробней, плиз.
Я долго спал? - Я видно много пропустил.
. . . . .
Потыкал... Понял - Ср.КМ - это копи/пасте оттуда где стоит курсор и туда где кликашь Ср.КМ.
Полезно :thumbs:, но не в данном случае...
. . . . .
x230 писал(а):... параметр -с (--create-new) ...
А этот параметр никак не изменить (комменты к нему)?
. . . . .
моя платформа :
ОС: Linux Mint 18.3, x64 DE: Xfce 4.12.3 Ядро: 4.15.1 Browser: Pale Moon 27.*; Железо: Intel Core i3-3210; Mem 4GB; VGA - на борту.

В сети
Аватара пользователя

Dja
Сообщения: 4589
Зарегистрирован: 27 авг 2016, 17:03
Решено: 14
Откуда: Voskresensk
Благодарил (а): 622 раза
Поблагодарили: 486 раз

Контекстное меню ФМ nemo

Сообщение Dja » 20 фев 2017, 11:58

x230, нет. Зажимаешь средней кнопкой и тянешь туда где хочешь создать ярлык (раб стол например). Отпускаешь и выбираешь левой кнопкой уже "Создать ярлык".
Сам был в шоке когда обнаружил. Это ж сколько надо выкурить чтоб такое учудить :crazy:

P.S. не всегда есть под рукой мышь. Т.е. средняя кнопка. Видимо те, кто пилит cinnamon об этом и не подумали. Действительно....зачем... когда у них то есть мышь.
Новичок? - ознакомься с правилами
и Панель форматирования
Изображение
IRC-канал #linuxmint-ru на сервере irc.spotchat.org
Изображение

Аватара пользователя

x230
Сообщения: 1152
Зарегистрирован: 02 сен 2016, 19:07
Решено: 3
Откуда: Краснодарский край
Благодарил (а): 226 раз
Поблагодарили: 299 раз

Контекстное меню ФМ nemo

Сообщение x230 » 20 фев 2017, 12:10

Dja писал(а): Зажимаешь средней кнопкой и тянешь туда где хочешь создать ярлык (раб стол например). Отпускаешь и выбираешь левой кнопкой уже "Создать ярлык".
Сенька, беримяч! :thumbs:
моя платформа :
ОС: Linux Mint 18.3, x64 DE: Xfce 4.12.3 Ядро: 4.15.1 Browser: Pale Moon 27.*; Железо: Intel Core i3-3210; Mem 4GB; VGA - на борту.

Аватара пользователя

Автор темы
root
Сообщения: 852
Зарегистрирован: 16 фев 2017, 17:03
Решено: 5
Откуда: г. Хабаровск
Благодарил (а): 264 раза
Поблагодарили: 226 раз

Контекстное меню ФМ nemo

Сообщение root » 20 фев 2017, 20:02

x230 писал(а): Так вот, хотелось чтоб сразу без посл.указания пути для сохранения и вообще без подобный промежут.шагов.
В параметре -с (--create-new) что-то вообще можно указывать (как в других параметрах)?
Насколько я понимаю в параметре -c ничего нельзя указывать. Ну, а путь сохранения задается в самом последнем параметре, я его выделю:
exo-desktop-item-edit --create-new --type Application --name "Ярлык для %f" --comment "Ярлык для '%F'" --command "exo-open %F" --icon skype_skypeme %P
Т.е. если вы, например, хотите сохранять ярлык в папку ~/.local/share/applications, то вместо %P, вы должны указать ~/.local/share/applications. Если хотите в /usr/share/applications сразу, то... Я, честно признаюсь, еще не думал, как root из контекстного меню получать, хотя тема интересная, нужно будет глянуть как разрабы реализуют функцию "открыть как root"... Но, как вариант, можно перед exo-desktop-item-edit написать sudo и настроить в системе, чтоб для sudo exo-desktop-item-edit не требовало ввод пароля... :sad:
Вы не готовы! :pc2:
Изображение

Аватара пользователя

Автор темы
root
Сообщения: 852
Зарегистрирован: 16 фев 2017, 17:03
Решено: 5
Откуда: г. Хабаровск
Благодарил (а): 264 раза
Поблагодарили: 226 раз

Контекстное меню ФМ nemo

Сообщение root » 20 фев 2017, 20:33

Dja писал(а): Зажимаешь средней кнопкой и тянешь туда где хочешь создать ярлык (раб стол например). Отпускаешь и выбираешь левой кнопкой уже "Создать ярлык".
Мм, а скрин можно?) Я походу не в теме, кто такие "корчитчане"? :-D
Вы не готовы! :pc2:
Изображение

Аватара пользователя

x230
Сообщения: 1152
Зарегистрирован: 02 сен 2016, 19:07
Решено: 3
Откуда: Краснодарский край
Благодарил (а): 226 раз
Поблагодарили: 299 раз

Контекстное меню ФМ nemo

Сообщение x230 » 20 фев 2017, 20:42

adminka писал(а): путь сохранения
Получилось, правда с небольшой "промежуточной остановкой"

И хоть поле "Рыбочий каталог" пустое, жмем далее "Создать"и все попадает туда как указано здесь (в пункте Exec=):
[Nemo Action]
Name=Create shortcut...
Comment=Creating shortcut
Exec=exo-desktop-item-edit -c -t Application --name "Ярлык для %f" --comment "Ярлык для '%F'" --command "exo-open %F" --icon skype_skypeme /home/x230/"Рабочий стол"
Selection=s
Extensions=any;
Quote=single
Stock-Id=gtk-add
Name[ru]=Создать ярлык...
. . . .
adminka писал(а): скрин можно?
моя платформа :
ОС: Linux Mint 18.3, x64 DE: Xfce 4.12.3 Ядро: 4.15.1 Browser: Pale Moon 27.*; Железо: Intel Core i3-3210; Mem 4GB; VGA - на борту.

Аватара пользователя

Автор темы
root
Сообщения: 852
Зарегистрирован: 16 фев 2017, 17:03
Решено: 5
Откуда: г. Хабаровск
Благодарил (а): 264 раза
Поблагодарили: 226 раз

Контекстное меню ФМ nemo

Сообщение root » 20 фев 2017, 20:48

x230 писал(а): И хоть поле "Рыбочий каталог" пустое, жмем далее "Создать"и все попадает туда как указано здесь (в пункте Exec=)
Рабочий каталог (Patch) необязателен в ярлыке, поэтому мы его и не указываем))))
На скрине "создать ссылку", у меня тоже самое, а Dja про ярлык что-то говорил) Ссылку, кстати, можно создать комбинацией клавиш shift+ctrl, потянув объект в целевую папку, и никакие средние колесики не нужны.
Вы не готовы! :pc2:
Изображение

В сети
Аватара пользователя

Dja
Сообщения: 4589
Зарегистрирован: 27 авг 2016, 17:03
Решено: 14
Откуда: Voskresensk
Благодарил (а): 622 раза
Поблагодарили: 486 раз

Контекстное меню ФМ nemo

Сообщение Dja » 21 фев 2017, 03:04

adminka писал(а): кто такие "корчитчане"?
Кто использует cinnamon (корицу).
adminka писал(а): Dja про ярлык что-то говорил
Всё верно, немного спутал ярлык и ссылку. Но ведь по сути это одно и тоже. (хоть и отличается по вашему описанию). Смысловая нагрузка у них одна. Кстати "ярлык", описанный Вами в #4 есть ничто иное как кнопка запуска. Так что здесь в определениях немного путанница. А спутал я потому что никогда этим не пользуюсь. Максимум я добавлял объекты (директории) в боковую панель ФМ через пкм. Сами же симлинки делал только для апача в консоли.
В ссылках я смысла не вижу. Рабочий стол для меня - всего лишь папка. Но тем не менее практически неприкасаемая ))) Однако, если рабочий стол - папка, значит и целевой папкой может стать любая другая. Незачем над рабочим столом извращаться. Имхо. :hi3:
Новичок? - ознакомься с правилами
и Панель форматирования
Изображение
IRC-канал #linuxmint-ru на сервере irc.spotchat.org
Изображение

Аватара пользователя

Автор темы
root
Сообщения: 852
Зарегистрирован: 16 фев 2017, 17:03
Решено: 5
Откуда: г. Хабаровск
Благодарил (а): 264 раза
Поблагодарили: 226 раз

Контекстное меню ФМ nemo

Сообщение root » 21 фев 2017, 03:41

Кнопка запуска, запись рабочего стола, да, соглашусь, что ярлык - не совсем корректное название. Зато более знакомое для всех) Думаю, вопросов было бы больше, если б я сказал:"кнопка запуска")))
Dja писал(а): Рабочий стол для меня - всего лишь папка. Но тем не менее практически неприкасаемая ))) Однако, если рабочий стол - папка, значит и целевой папкой может стать любая другая. Незачем над рабочим столом извращаться. Имхо.
Если честно, не понял, к чему вы это сказали и что имели ввиду? :hi3:
Вы не готовы! :pc2:
Изображение

В сети
Аватара пользователя

Dja
Сообщения: 4589
Зарегистрирован: 27 авг 2016, 17:03
Решено: 14
Откуда: Voskresensk
Благодарил (а): 622 раза
Поблагодарили: 486 раз

Контекстное меню ФМ nemo

Сообщение Dja » 21 фев 2017, 03:48

adminka, о мании людей использовать рабочий стол в качестве помойки :-D
Новичок? - ознакомься с правилами
и Панель форматирования
Изображение
IRC-канал #linuxmint-ru на сервере irc.spotchat.org
Изображение

Аватара пользователя

Автор темы
root
Сообщения: 852
Зарегистрирован: 16 фев 2017, 17:03
Решено: 5
Откуда: г. Хабаровск
Благодарил (а): 264 раза
Поблагодарили: 226 раз

Контекстное меню ФМ nemo

Сообщение root » 21 фев 2017, 03:53

Не по теме
Dja писал(а): о магии людей использовать рабочий стол в качестве помойки
Раньше так делал :-D В Сирене добавили возможность добавлять панели с боку) Сейчас этим не грешу, стоит скрытая боковая панель с таймером задержки перед показом и скрытием. Значки прикрепил, в целом, удобненько, :thumbs:
Последний раз редактировалось пользователем 1 root; всего редактировалось раз: 21
Вы не готовы! :pc2:
Изображение

В сети
Аватара пользователя

Dja
Сообщения: 4589
Зарегистрирован: 27 авг 2016, 17:03
Решено: 14
Откуда: Voskresensk
Благодарил (а): 622 раза
Поблагодарили: 486 раз

Контекстное меню ФМ nemo

Сообщение Dja » 21 фев 2017, 05:06

Не по теме
adminka, я за полки
app.php/gallery/image/5/source
Кстати в корице их показали. Но вот она сама с практической стороны не очень Xfce VS Cinnamon (Пост Dja #10945)
P.S. подловили :-D
Новичок? - ознакомься с правилами
и Панель форматирования
Изображение
IRC-канал #linuxmint-ru на сервере irc.spotchat.org
Изображение

Аватара пользователя

Автор темы
root
Сообщения: 852
Зарегистрирован: 16 фев 2017, 17:03
Решено: 5
Откуда: г. Хабаровск
Благодарил (а): 264 раза
Поблагодарили: 226 раз

Контекстное меню ФМ nemo

Сообщение root » 21 фев 2017, 05:51

Не по теме
Dja, полки, конечно, тема, но, имхо, они не особо актуальны, ибо в меню все итак отсортировано, а часто используемые приложения можно запихать на панель, часто используемые папки - на боковую панель ФМ. Тут, как говорится, на вкус и цвет)
Хм, странно, у меня Cinnamon 1% процессора кушает...
А справа снизу conky?)
Вы не готовы! :pc2:
Изображение

В сети
Аватара пользователя

Dja
Сообщения: 4589
Зарегистрирован: 27 авг 2016, 17:03
Решено: 14
Откуда: Voskresensk
Благодарил (а): 622 раза
Поблагодарили: 486 раз

Контекстное меню ФМ nemo

Сообщение Dja » 21 фев 2017, 06:38

Не по теме
adminka писал(а): А справа снизу conky?)
они. только сейчас уже сверху (между панелями)
17-02-21-001.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Новичок? - ознакомься с правилами
и Панель форматирования
Изображение
IRC-канал #linuxmint-ru на сервере irc.spotchat.org
Изображение

Вернуться в «Руководства»