Добавить команду в контекстное меню KDE (добавление музыки в Amarok)

Модератор: Модераторы разделов

KDimanB
Сообщения: 143
ОС: Debian (squeeze), Slax LiveCD

Добавить команду в контекстное меню KDE

Сообщение KDimanB »

Всем привет.

В общем есть такая классная функция у WinAmp в Windows - добавить папку в проигрыватель. После чего все музыкальные файлы в папке и подпапках добавляются к списку.

Мне надоело бегать с Амароком по папкам - решил тоже сделать аналогичное (хотя, вероятно и можно из Амарока запускать - я привык из окна файлового менеджера).

Т.е. есть команда:
find /home/diman/music -name *mp3 -exec amarok -e {} \;

Добавляет музыку (mp3) из папки music и всех подпапок в Амарок.
Вот как бы добавить в контекстное меню KDE пункт, который вызывал бы эту bash-команду применительно к выделенной папке (или хотя бы текущей)?

P.S.: да, посмотрел, из Амарока можно добавить целую папку, но не суть важно ))
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: Добавить команду в контекстное меню KDE

Сообщение Denjs »

если в лоб - то можно "открыть в" и выбрать ваш bash скрипт с указанием "запомнить" ...

но вообще конечно хотелось бы узнать решение о том как добавить "пунктик" программно и в "коренное меню" контекстного меню ))
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
KDimanB
Сообщения: 143
ОС: Debian (squeeze), Slax LiveCD

Re: Добавить команду в контекстное меню KDE

Сообщение KDimanB »

Гм...

В общем инструкция есть тут:
http://developer.kde.org/documentation/tut...rvicemenus.html

Я создал файлик "amarok-add-directory.desktop", кинул его в "/home/diman/.kde/share/apps/konqueror/servicemenus/". Внес в него код:

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

[Desktop Entry]
ServiceTypes=inode/directory
Actions=addDir

[Desktop Action addDir]
Name=Add to Amarok
Exec=/bin/sh -c "find %U -name *mp3 -exec amarok -e {} \;"


сохранил. KDE все это моментально подхватывает. Т.е. реально моментально - любое изменение в файле тут же фиксируется (ну в смысле при вызове контекстного меню, что не суть важно).

И действительно - при нажатии на папку появился пункт - "Add to Amarok". Моей радости не было бы предела, если бы это еще работало :)

Программирования тут, как выяснилось - фактичеси не оказалось ;)

Хм, что же тут не работает... о_О

***
Тааак... кажется команда не принимает путь %U, потому что если в нём есть пробелы (а я тестил ан таких папках) - ничего не происходит.

***
Ах вот оно что.
Он не добавляет если открыто окно со строкой пути вида:
"system:/media/hda5"

А так все работает вроде ^_^
Спасибо сказали:
KDimanB
Сообщения: 143
ОС: Debian (squeeze), Slax LiveCD

Re: Добавить команду в контекстное меню KDE

Сообщение KDimanB »

В общем вот итоговый код (в поиске теперь iname, плюс выдрал откуда-то наобум значок Амарока):

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

[Desktop Entry]
ServiceTypes=inode/directory
Actions=addDir

[Desktop Action addDir]
Name=Add to Amarok
Icon=/usr/share/icons/hicolor/16x16/apps/amarok.png
Exec=/bin/sh -c "find %U -iname *mp3 -exec amarok -e {} \;"


Все бы ничего, но надо бы как-то к поиску теперь прикрутить еще ogg, flac, wma.
Подскажите, пожалуйста! :)
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: Добавить команду в контекстное меню KDE

Сообщение Denjs »

о! спасибо за прямую инфу по контекстному меню)

>> прикрутить еще ogg, flac, wma.
>>"find %U -iname *mp3 -exec amarok -e {} \;"
судя по ману на find, можно поиграться с регулярными выражениями и вместо -iname использовать -regex
но по регулярным выражениям я вам ничего не подскажу.
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Добавить команду в контекстное меню KDE

Сообщение NickLion »

ну если регулярки использовать, то тогда надо:
(.+mp3)|(.+ogg)|(.+wma)
Ну, думаю суть ясна :) "()" - это группировка, "." - любой символ, "+" - повторяется 1 или болеее раз, "|" - операция "или".
Спасибо сказали:
KDimanB
Сообщения: 143
ОС: Debian (squeeze), Slax LiveCD

Re: Добавить команду в контекстное меню KDE

Сообщение KDimanB »

Что-то не работает, или я не правильно вставляю :)

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

Exec=/bin/sh -c "find %U -iregex (.+mp3)|(.+ogg)|(.+wma) -exec amarok -e {} \;"
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Добавить команду в контекстное меню KDE

Сообщение NickLion »

Посмотрел как этот find работает... там по умолчанию стиль регулярок - емакса, не знаю, что там отличается, но действительно не работает, предложу просто установить стиль в POSIX:

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

find %U -regextype posix-extended -iregex "(.+mp3)|(.+ogg)|(.+wma)" ...

кавычки нужны для сложных выражений.
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Добавить команду в контекстное меню KDE

Сообщение Rootlexx »

Diman писал(а):
04.01.2009 22:54
Тааак... кажется команда не принимает путь %U, потому что если в нём есть пробелы (а я тестил ан таких папках) - ничего не происходит.

***
Ах вот оно что.
Он не добавляет если открыто окно со строкой пути вида:
"system:/media/hda5"

Ну так не используйте %U. На этом месте можно ставить следующие буквы: u, f, d — причём если они будут в верхнем регистре, то вместо них будет подставляться список выделенных файлов/каталогов в одну команду, а если в нижнем — команда будет вызываться для каждого файла в отдельности. Означают буквы следующее:

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

%f, %F — элемент/список элементов в виде file:///путь;
%u, %U — URI элемента (как отображается, то есть может быть и file:/, а может и ftp:/, settings:/, media:/ и так далее);
%d, %D — каталог/список каталогов, в которых находятся открываемые элементы; формат аналогичен f.

Правда, я натыкался на неприятный баг: элементы с %f и %d просто не отображались в контекстном меню для таких протоколов как system:/ и media:/. Не в курсе, как там дела сейчас обстоят, возможно, починили.
Спасибо сказали: