Контекстное меню ФМ nemo (тема от root/adminka)

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

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

Контекстное меню ФМ nemo (тема от root/adminka)

Сообщение 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")
#
# Там, где массив разделяется и заканчивается ";", НЕ нужно вставлять лишние пробелы перед или до ";"


Прежде чем кинуться создавать КМ, вы должны учесть 2 вещи:
1) Многие программы способны принимать передаваемые параметры сразу. Я на этом часто спотыкался: я создавал КМ, а потом выяснялось, что оно в принципе не нужно. Например, КМ "КОНВЕРТИРОВАНИЕ АУДИО-ФАЙЛОВ", в котором использовалось приложение soundconverter. В данном случаи, не зачем было изобретать велосипед, достаточно было выделить аудио-файлы и открыть их через КМ "Открыть с помощью --> SoundConverter" :hoho:
2) Есть масса уже готовых решений, необязательно создавать что-то свое. Ниже я дам краткую информацию о некоторых интересных расширениях nemo, которые доступны в репозитории. Установить любое из них можно, выполнив в терминале: apt install название_пакета
  • nemo-image-converter - добавляет два КМ: "Масштабировать изображения" и "Вращать изображения". Подробнее можете почитать здесь.
  • nemo-compare - КМ "Сравнить". Использует meld для сравнения файлов и папок.
  • nemo-pastebin - позволяет через соответствующее КМ быстро отправить текст на pastebin. На нашем форуме встроена интеграция с данным сервисом, поэтому вы можете использовать данный способ, чтобы оставлять длинный текст или большие логи (вместо использования тега [code][/code]; просто вставьте полученную ссылку в свое сообщение и нажмите "Предпросмотр). Хотя, честности ради, есть и другой путь для реализации той же цели.
  • nemo-seahorse - КМ "Зашифровать" и "Подпись". Позволяет зашифровать и дешифровать файлы OpenPGP с помощью GnuPG.
  • nemo-filename-repairer - КМ для восстановления кодировки в названии каталогов
  • nemo-owncloud - добавляет интеграцию с ownCloud
  • nemo-dropbox - добавляет интеграцию с dropbox
  • nemo-media-columns - вывод информации о метаданных музыки/EXIF ​​и PDF при отображении файлов списком (Ctrl+2)
  • nemo-gtkhash - добавляет вкладку "Хэши" (ПКМ по файлу --> Свойства).
  • nemo-audio-tab - добавляет вкладку "Звук" (ПКМ по файлу --> Свойства). Позволяет посмотреть метаданные аудиофайла.

Все просто :smile: Ну, а теперь к практическим примерам.
Создадим файл 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;
В этом примере мы напишем КМ для антивируса 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:
Порой хочется посмотреть, сколько места занимают та или иная папка, тот или иной файл в дереве каталогов. Соответствующий пункт в ФМ 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:
Для работы данного КМ нам понадобится 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 исполняемым (ПКМ->Свойства->Права->Разрешить исполнять как программу
Нам понадобится программа 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
После нажатия кнопки "ОК", управление передастся нашему скрипту, который создаст в родительской директории объединенное результирующие изображение.
По наводке пользователя asa добавляю данное КМ для размещения изображений на imgur.com - онлайн-сервисе загрузки, хранения и обмена фото-изображениями. Прежде всего, проверьте, установлены ли у вас необходимые зависимости:
sudo apt install zenity curl gawk

В соответствующей папке необходимо создать 2 файла:

Само КМ - upload_to_imgur.nemo_action
[Nemo Action]
Name=Upload image to imgur
Name[ru]=Загрузить изображение на imgur
Exec=<upload_to_imgur.sh -f %F>
Selection=s
Mimetypes=image/*;
EscapeSpaces=true
Icon-Name=document-send-symbolic
Dependencies=zenity;gawk;curl;
И скрипт (я взял его отсюда) upload_to_imgur.sh :

Не забываем сделать скрипт upload_to_imgur.sh исполняемым (ПКМ->Свойства->Права->Разрешить исполнять как программу).

КМ будет доступно при выборе 1 изображения. Выглядит это примерно так (gif-ка):
upload_to_imgur.gif
По наводке пользователя Faust3000 размещаю данное КМ. Это аналог КМ "обновить", как у Винды, только для Линукса. Для его работы необходимо установить xdotool - sudo apt install xdotool . Затем в соответствующей папке создайте файл refresh.nemo_action с содержимым:
[Nemo Action]
Name=Refresh
Name[ru]=Обновить
Comment=It's like pressing Ctrl+R or F5
Exec=xdotool key ctrl+r
Selection=none
Extensions=any;
Icon-Name=view-refresh
Dependencies=xdotool;
КМ будет доступно при фоновом клике ПКМ.
Это не совсем КМ в рассматриваемом ранее понимании, скорее, это расширение, добавляющее его. Сначала я хотел создать отдельную тему, но позже решил, что хранить все в одном месте - хорошая идея :-D Пожалуйста, ознакомьтесь со справочной информацией прежде, чем продолжить. Для тех, кто не дружит с английским, могу предложить ссылку с переводом страницы через гугл переводчик.

Итак, в терминале последовательно выполните следующие команды:

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

cd ~/Загрузки
wget http://download.tuxfamily.org/wipetools/releases/nautilus-wipe/nautilus-wipe-0.3.tar.gz
tar -xvf nautilus-wipe-0.3.tar.gz
cd nautilus-wipe-0.3/
sudo apt install libxml2-utils itstool libnemo-extension-dev libgsecuredelete-dev
./configure --with-nautilus=nemo
make
sudo make install
nemo -q && nemo-desktop -q
cd .. && rm -rf ./nautilus-wipe-0.3 ./nautilus-wipe-0.3.tar.gz
  1. cd ~/Загрузки - переходим в папку ~/Загрузки
  2. wget http://download.tuxfamily.org/wipetools/releases/nautilus-wipe/nautilus-wipe-0.3.tar.gz - скачиваем в неё архив с расширением
  3. tar -xvf nautilus-wipe-0.3.tar.gz - разархивируем
  4. cd nautilus-wipe-0.3/ - переходим в разархивированную папку
  5. sudo apt install libxml2-utils itstool libnemo-extension-dev libgsecuredelete-dev - устанавливаем необходимые для сборки зависимости
  6. ./configure --with-nautilus=nemo - конфигурируем
  7. make - делаем
  8. sudo make install - устанавливаем
  9. nemo -q && nemo-desktop -q - закрываем все окна nemo и перезапускаем рабочий стол
  10. cd .. && rm -rf ./nautilus-wipe-0.3 ./nautilus-wipe-0.3.tar.gz - удаляем ранее скаченное и распакованное

Готово! Если все прошло без ошибок, то после этого у вас появятся 2 КМ:
1) Wipe available disk space, которое появится в любом случаи (т.е. при фоновом клике, при клике на любою папку или файл). Оно позволит затереть/форматировать дисковое пространство раздела. Будьте аккуратны с ним, не используйте бездумно (именно поэтому ранее я предложил вам ознакомиться со справочной информацией на английском или хотя бы на русском).
2) Затереть, которое появится при клике на любую папку или файл, можно выбрать как один, так и несколько объектов. После нажатия появится окно подтверждения:
wipe.png
За прошедшие 2 года это КМ служило мне верой и правдой и частенько меня выручало. Я не выложил его сразу, ввиду простоты и возможности сделать тоже самое множеством других способов. Но ни в виде закладок в nemo, ни в виде симлинков на папки, а именно в виде КМ, доступного только при фоновом клике по рабочему столу, мне нравится это больше всего. Может и вам понравится?!

Сначала о реализации. Первым делом в соответствующей папке нужно создать файл all.applications.nemo_action с содержимым:
[Nemo Action]
Name=All applications
Name[ru]=Все приложения
Exec=<all.applications.sh>
Selection=none
Extensions=any;
Conditions=desktop;
Icon-Name=cs-extensions
Рядом - поместить скрипт all.applications.sh :

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

#!/bin/bash
nemo /usr/share/applications/
sleep 1
nemo ~/.local/share/applications/
Не забываем сделать скрипт all.applications.sh исполняемым (ПКМ->Свойства->Права->Разрешить исполнять как программу).

При нажатии на КМ скрипт откроет 2 папки /usr/share/applications/ и ~/.local/share/applications/ в ФМ nemo.
all.applications.png
Зачем это нужно? В этих папках хранятся все приложения, доступные из "Меню" (и некоторые скрытые, но это редкий случай). Чаще всего, я использую это, чтобы посмотреть, какую команду нужно ввести в терминале, дабы запустить программу. Для этого нужно открыть ярлык с помощью текстового редактора и подсмотреть параметр Exec (например, для ярлыка "Менеджер программ" - Exec=mintinstall, соответственно, из терминала его можно вызвать командой mintinstall). Реже использую, чтобы добавить свои ярлыки в меню или скрыть ненужные (надеюсь, вы не забыли про параметр Active=false ?! :smile: ).
Для работы КМ нам понадобится утилита btfs, которую нужно установить командой: apt install btfs

Далее необходимо создать файлы:

/usr/share/nemo/actions/btfs_mount.nemo_action со следующим содержимым:
[Nemo Action]
Name=Mount the torrent files
Name[ru]=Монтировать торрент-файл(ы)
Comment=Mount %F
Comment[ru]=Монтировать %F
Exec=<btfs.sh -m %F>
Selection=notnone
Extensions=torrent;
Icon-Name=application-x-bittorrent
Quote=single
Dependencies=btfs;zenity;
/usr/share/nemo/actions/btfs_umount.nemo_action :
[Nemo Action]
Name=Umount a torrent files
Name[ru]=Отмонтировать торрент-файлы
Exec=<btfs.sh -u>
Selection=none
Extensions=any;
Icon-Name=application-x-bittorrent
Dependencies=btfs;zenity;
И обрабатывающий скрипт /usr/share/nemo/actions/btfs.sh:

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

#!/bin/bash
# Скрипт для монтирования/размонтирования торрент-файлов средствами btfs от root/adminka
# Зависимости: btfs, zenity, awk, sed, wc

help="Должна быть указана только одна из перечисленных ниже опции:\n\t<b>-m</b> patch\t\tопция монтирования, patch - полный путь до монтируемого торрент-файла\n\t<b>-u</b>\t\t\t\tопция размонтирования, <u>путь указывать не нужно</u>, он сам извлекается из /etc/mtab"
if [[ $# -ge 2 && "$1" = "-m" ]]; then
    patch_mas=("$@");
    for i in "${patch_mas[@]:1:$[${#patch_mas[@]} - 1]}"; do
        if [[ ! -f  "$i" || ! -r  "$i" ]]; then patch_err_mas=("${patch_err_mas[@]}" "$i\n\n")
        else patch_good_mas=("${patch_good_mas[@]}" "$i"); fi
    done
    if [[ ${#patch_err_mas[@]} > 0 ]]; then
        if [[ ${#patch_err_mas[@]} = 1 ]]; then zenity --error --width=700 --title="Операция отменена" --text="Файл\n\n<b>$(echo ${patch_err_mas[@]})</b>не существует или не доступен для чтения!"
        else zenity --error --width=700 --title="Операция отменена" --text="Файлы\n\n<b>$(echo ${patch_err_mas[@]})</b>не существуют или не доступны для чтения!"; fi
        exit 1
    fi
    for i in "${patch_good_mas[@]}"; do
        test_patch=0
        while [[ $test_patch = 0 || $(ls -s "$mount_point" | grep итого | awk '{print $2}') != 0 || ! -w "$mount_point" || ! -r "$mount_point" ]]; do
            if [[ $test_patch = 0 ]]; then
                mount_point=`zenity --title="Куда монтировать ${i##*/}?" --file-selection --directory --filename="$i"`
                if [[ $? = 1 ]]; then mount_point=""; break; fi
                test_patch=1
            else
                if [[ ! -w "$mount_point" || ! -r "$mount_point" ]]
                then text_err="Директория <b><i>$mount_point</i></b> не доступна чтения и/или записи!"
                else text_err="Точка монтирования <b><i>$mount_point</i></b> должна быть пустой!"; fi

                zenity --question --ok-label="Да" --cancel-label="Нет" --width=500 --title="Ошибка выбора директории" --text="$text_err <i>Хотите указать другую?</i>"
                if [[ $? = 1 ]]; then mount_point=""; break; else test_patch=0; fi
            fi
        done
        if [[ "$mount_point" = "" ]]
        then zenity --warning --width=500 --text="Вы не указали директорию монтирования для файла \"<b><i>${i##*/}</i></b>\", поэтому он будет пропущен!"
        else btfs "$i" "$mount_point"; fi
    done
elif [[ $# = 1 && "$1" = "-u" ]]; then
    count=$(sed -n '/btfs/p' /etc/mtab | wc -l)
    if [[ $count = 0 ]]; then zenity --info --width=300 --title="Нечего отмонтировать" --text="Файл <b>/etc/mtab</b> не содержит информации о наличии примонтированных торрент-файлов!"; exit; fi
    count=$[count*2]
    for ((i=0; i<count; i=i+2))
    do
        patch_mas[$i]='""'
        patch_mas[$i+1]="$(sed -n '/btfs/p' /etc/mtab | awk '{print $2}' | sed 's/\\040/\ /g' | sed -n "$[(count-i)/2]""p")"
    done
    patch_mas[0]='TRUE'
    upatch=`zenity --list --title="Что отмонтировать?" --text="Укажите, какие папки должны быть отмонтированы" \
    --checklist --separator="\n" --hide-header --column="" --column="" \
    "${patch_mas[@]}"`
    zenity --question --ok-label="Да" --cancel-label="Нет" --width=500 --title="Удалить пустые папки?" --text="Удалить директорий бывших точек монтирования?"
    if [[ $? = 0 ]]; then rm_dir="yes"; fi
    count="$(echo "$upatch" | wc -l)"
    for ((i=1; i<=count; i++)); do
        umount_point=$(echo "$upatch" | sed -n "$i""p");
        fusermount -u "$umount_point"
        if [[ $? = 1 ]]
            then zenity --error --width=500 --title="Ошибка размонтирования" --text="Директория \"<b>$umount_point</b>\" занята!"
            else if [[ "$rm_dir" = "yes" ]]; then rm -rf "$umount_point"; fi
        fi
    done
else zenity --error --width=700 --title="Неверные параметры!" --text="$help"; exit; fi
Не забываем сделать скрипт btfs.sh исполняемым (ПКМ->Свойства->Права->Разрешить исполнять как программу) или sudo chmod a+x /usr/share/nemo/actions/btfs.sh

По итогу мы имеем 2 КМ: одно - для монтирования (доступно при одиночном или множественном выборе файлов с расширением .torrent), другое - для отмонтирования (доступно при фоновом клике); и скрипт, который выполняет всю грязную работу. Сразу оговорюсь, КМ работает только с папками, которые вам (вашему пользователю) доступны для записи, а монтирование, как известно, возможно только в пустую папку.

Работу КМ прекрасно демонстрирует эта gif-ка

---------------------------------------------------------------------------
Отныне эта тема закрыта, ввиду отбитого у меня желания участвовать в жизни и продвижении данного ресурса. В планах - в течении года перенести её на личный блог и переработать/обновить. Блог пока не создан, но это только пока... Тем временем, вы можете периодически проверять КМ на github.com от demonlibra, он часто добавляет новые и обновляет старые. Спасибо за внимание! :smile:
 
 
 
Непрактичные, недописанные или непроверенные мной КМ
Не знаю, к сожалению или к счастью, но 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:
Идея (скрипт) была позаимствована отсюда. КМ позволяет быстро получить информацию о аудио и/или видеофайле. Оно будет доступно при выборе 1 аудио или видеофайла, а результат его работы будет выглядеть примерно так:
media-info.sh.png
Для реализации создайте в соответствующей папке файл media-info.nemo_action с содержимым:
[Nemo Action]
Name=Displays encoding information for an audio or video file
Name[ru]=Отобразить информацию о медиафайле
Exec=<media-info.sh -f %F>
Selection=s
Mimetypes=video/*;audio/*;
Icon-Name=unknown
Dependencies=zenity;ffmpeg;
EscapeSpaces=true
Рядышком поместите скрипт media-info.sh :


Не забудьте сделать скрипт media-info.sh исполняемым (ПКМ->Свойства->Права->Разрешить исполнять как программу).

Вы можете установить mediainfo-gui:
sudo apt install mediainfo-gui

И использовать его из КМ "Открыть с помощью --> MediaInfo".
mediainfo-gui.png
На заметку: в меню "View" можно выбрать несколько форматов вывода информации. Для рядового пользователя, по-моему мнению, самым удобным будет пункт "Text".

Подробнее о методике можно узнать здесь Работа с буфером обмена в 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

КМ для смены кодировки текстовых файлов на системную UTF-8. Пригодится при использовании текстовых файлов с Винды, когда в текстовом редакторе, вместо кириллицы, отображаются кракозябры. Перекодировать можно как и отдельный файл, так и несколько.
Для работы потребуется пакет enca - sudo apt install enca

Затем в соответствующей папке создаем файл UTF-8.nemo_action с содержимым:
[Nemo Action]
Name=Recode to UTF-8
Name[ru]=Перекодировать в UTF-8
Exec=enconv -x utf-8 %F
Selection=notnone
Mimetypes=text/*;
EscapeSpaces=true
Icon-Name=kr_comparedirs
Dependencies=enca;
Done!

Примечание: в таком виде я не приемлю данное КМ, т.к. решить проблему "кракозябр" можно раз и навсегда лишь 1 командой в терминале. С другой стороны, enca не ограничивается одним лишь UTF-8. Можно было бы организовать zenity-интерфейс с возможностью выбрать не только UTF-8... В таком формате это выглядело бы лучше. Пока реализовывать это у меня нет интереса, поэтому этот пример попал под спойлер "архив"...

Transfer.sh - сервер, на который вы можете загрузить файлы до 10 гб для временного хранения (до 14 дней). В основном применяется, когда необходимо передать файлы м/ду устройствами. Обычно загрузка файлов на transfer.sh происходит через интерфейс командной строки посредством утилиты curl, поэтому, если она у вас не установлена, выполните - sudo apt install curl . Напишем КМ, чтобы не лезть постоянно в терминал:

В соответствующей папке создаем файл transfer_sh.nemo_action с содержимым:
[Nemo Action]
Name=Upload file to Transfer.sh
Name[ru]=Загрузить файл на Transfer.sh
Exec=<transfersh.sh %F>
Selection=s
Extensions=nodirs;
Quote=double
Icon-Name=cs-online-accounts
Dependencies=curl;
Рядышком создаем обрабатывающий скрипт - transfersh.sh :

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

#!/bin/bash

fullpathname=$@			#Получаем полный путь к файлу
name=${fullpathname##*/}	#Получаем расширение
name=${name//" "/"_"}		#Заменяем пробелы нижними подчеркиваниями

#Загрузка файла на Transfer.sh
link=`curl --upload-file "$fullpathname" "https://transfer.sh/$name"`
status=$?

if [ $status = 0 ]
	then 
		#Копирование ссылки в буфер обмена
		echo -n "$link" | xclip -i -selection clipboard

		#Запись истории
		echo $(date +%F) "$link" >> $HOME/.transfer

		notify-send -t 10000 -i "gtk-ok" "Загрузка завершена" "Ссылка скопирована в буфер обмена:\n$link"
	else
		notify-send -t 10000 -i "error" "Transfer.sh" "При загрузке возникла ошибка: $status"
fi
Не забываем сделать скрипт transfersh.sh исполняемым (ПКМ->Свойства->Права->Разрешить исполнять как программу) или sudo chmod a+x /usr/share/nemo/actions/transfersh.sh
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось пользователем 68 root; всего редактировалось раз: 12
Вы не готовы! :pc2:
Изображение

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

zuzabrik
Сообщения: 1563
Зарегистрирован: 29 авг 2016, 09:08
Решено: 19
Благодарил (а): 100 раз
Поблагодарили: 493 раза

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

x230
Сообщения: 1543
Зарегистрирован: 02 сен 2016, 19:07
Решено: 5
Откуда: Курилы/Сахалин/Кубань
Благодарил (а): 274 раза
Поблагодарили: 391 раз

Контекстное меню ФМ 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: Cinnamon 3.6.7 Ядро: 4.15.0-52 Browsers: Pale Moon 28.* и SlimJet 23.*; Железо: Intel Core i3-3210; Mem 4GB; VGA - на борту.

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

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

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

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

x230 писал(а): без посл.указания пути для сохранения и вообще без подобный промежут.шагов.
для этого корчитчане юзают среднюю кнопку

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

x230
Сообщения: 1543
Зарегистрирован: 02 сен 2016, 19:07
Решено: 5
Откуда: Курилы/Сахалин/Кубань
Благодарил (а): 274 раза
Поблагодарили: 391 раз

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

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

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

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

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

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

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

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

P.S. не всегда есть под рукой мышь. Т.е. средняя кнопка. Видимо те, кто пилит cinnamon об этом и не подумали. Действительно....зачем... когда у них то есть мышь.

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

x230
Сообщения: 1543
Зарегистрирован: 02 сен 2016, 19:07
Решено: 5
Откуда: Курилы/Сахалин/Кубань
Благодарил (а): 274 раза
Поблагодарили: 391 раз

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

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

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

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

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

Контекстное меню ФМ 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
Сообщения: 942
Зарегистрирован: 16 фев 2017, 17:03
Решено: 5
Откуда: г. Хабаровск
Благодарил (а): 284 раза
Поблагодарили: 259 раз

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

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

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

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

x230
Сообщения: 1543
Зарегистрирован: 02 сен 2016, 19:07
Решено: 5
Откуда: Курилы/Сахалин/Кубань
Благодарил (а): 274 раза
Поблагодарили: 391 раз

Контекстное меню ФМ 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: Cinnamon 3.6.7 Ядро: 4.15.0-52 Browsers: Pale Moon 28.* и SlimJet 23.*; Железо: Intel Core i3-3210; Mem 4GB; VGA - на борту.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

adminka, о мании людей использовать рабочий стол в качестве помойки :-D

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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