Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Поиск в dash с ошибочной раскладкой.  (Прочитано 2469 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Сперанский

  • Автор темы
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4055
  • Dictum ac factum
    • Просмотр профиля
Идея возникла из этой темы, и заключается в том, чтобы при наборе имени в неправильной раскладке (cybvjr 'rhfyf) поиск выдавал бы результат (снимок экрана).

Демо-картинка:


Поиск по теме дал результаты:
1) у Dash нет конфигов, поэтому сделать как в vim (set langmap...) не получится;
2) в последних версиях Unity поиск в Dash так же работает и по параметру Keywords в .desktop- файлах.
3) русские названия программ, по которым происходит поиск в dash хранятся в бинарных .mo файлах;
4) бинарные .mo файлы компилируются из текстовых .po-файлов, которые создают переводчики;
5) текстовые .po файлы доступны всем желающим в исходниках в репозиториях, которые можно скачать командой:
Код: (bash) [Выделить]
apt-get source <имя_пакета>

Моё видение решения вопроса:
Можно написать скрипт, который будет:
1) просматривать все .desktop -файлы на компе;
2) для пакетов из репозитория (для которых есть исходники):
2.1) качать для каждого пакета исходники, извлекать из файла <имя_пакета>/po/ru.po локализованные имена пакетов;
Тут будет большой траффик, но достаточно сделать один раз, а потом только искать для новых пакетов, все равно новые пакеты там появляются крайне редко.
2.2) складывать их в файле по принципу:
<имя_пакета> слово;слово2;слово3;словоN
<имя_пакета2> слово;слово2;слово3;словоN
3) для сторонних пакетов:
3.1) искать в .desktop файле указанное локализованное имя;
3.2) спрашивать у пользователя дополнительные ключевые слова;
3.3)складывать их в файле по принципу:
<имя_пакета> слово;слово2;слово3;словоN
<имя_пакета2> слово;слово2;слово3;словоN
4) производить запись ключевых слов в соответствующие .desktop-файлы в строку Keywords в неправильно набранной раскладке (ytghfdbkmyj yf,hfyyjq hfcrkflrt)
5) радовать пользователя!

Режимы работы скрипта:
<имя_скрипта> write- записать ключевые слова из файла.
<имя_скрипта> download-скачать и прочитать исходники для всех актуальных программ;
<имя_скрипта> update- найти и прочитать исходники для новых пакетов, если исходников нет то указать ключевые слова вручную.
<имя_скрипта> manage <имя пакета>- вручную указать ключевые слова для пакета <имя_пакета>

Режим работы демона (это не знаю как реализовать):
отслеживать появление новых .desktop файлов и запускать для него <имя_скрипта> update (просмотреть исходники или указать вручную)

Скрипт будет "поставляться" вместе со стандартным файлом ключевых слов, так что для рядового пользователя необходимо будет только сделать <имя_скрипта> write, что бы получить поиск по стандартным программам в неправильной раскладке.

Так как мой уровень в bash не очень хорош. То от сообщества жду комментариев по алгоритму и поправки моего быдлокода, которого я будут тут выкладывать.

Рабочий скрипт не готов!
« Последнее редактирование: 23 Мая 2012, 16:17:33 от Пупизоид »

Оффлайн Сперанский

  • Автор темы
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4055
  • Dictum ac factum
    • Просмотр профиля
Re: Поиск в dash с ошибочной раскладкой.
« Ответ #1 : 23 Мая 2012, 13:43:09 »
Итак, что имею на данный момент:
Код: (bash) [Выделить]
#!/bin/bash
string=`cat /usr/share/applications/*.desktop | grep -E "^Exec=|^NoDisplay=" | sed s/Exec=//g | sed s/NoDisplay=//g | cut -d ' ' -f 1`
array=( $string )
for i in $(seq 0 $((${#array[@]} - 1))); do
if [ "${array[i+1]}" = "true" ]; then
continue
else
if [ "${array[i]}" = "${array[i-1]}" -o "${array[i]}" = "${array[i-2]}" -o "${array[i]}" = "true" -o "${array[i]}" = "false" ]; then
continue
else
array[i]=`basename ${array[i]}` &> /dev/null
echo ${array[i]}
apt-get source ${array[i]} &> /dev/null
cat ${array[i]}*/po/ru.po | awk -F'[/"]' '/^#: .*desktop/ {sub(".in.*.h:.*",""); desktop[k++]=$NF} /^msgstr/ {for(i=0;i<k;i++)print desktop[i], $2;k=0}'>> keywords.base
echo "keywards for ${array[i]} added!"
rm -rf ${array[i]}*
echo "Dirs of ${array[i]} removed!"
fi
fi
done
В чем затык:
1) никак не могу отфильтровать входной поток имен приложений, что бы не было дублей, сейчас вывод перед скачкой архивов имеет вид:
gnome-control-center
alacarte
audacity
baobab
gnome-control-center
brasero
ccsm
checkbox-qt
chromium-browser
chromium-browser
chromium-browser
chromium-browser
deadbeef
uxterm
xterm
gnome-control-center
deja-dup
deja-dup-preferences
deja-dup
doublecmd
dropbox
eog
evince
exo-open
exo-preferred-applications
feh
file-roller
sol
gcalctool
gconf-editor
gdebi-gtk
gedit
gimp-2.6
globaltime
gnome-control-center
gnome-color-chooser
gnome-contacts
gnome-control-center
gnome-control-center
gnome-nettool
gnome-control-center
gnome-power-statistics
gnome-screenshot
gnome-control-center
gnome-sound-recorder
gnome-sudoku
gnome-system-log
gnome-system-monitor
gnome-terminal
gnome-control-center
gnome-file-share-properties
gnomine
gparted-pkexec
gtg
gtg_new_task
gucharmap
gvim
htop
ibus-daemon
ibus-setup
im-switch
gnome-control-center
inkscape
itmagessrvd
itweb-settings
jockey-gtk
keepassx
landscape-client-ui-install
gnome-language-selector
libreoffice
liferea
xlinks2
luakit
lxappearance
mahjongg
mc
metromap
env
myrulib
mytetra
nautilus
nm-connection-editor
onboard
onboard-settings
policytool
orca
palimpsest
pidgin
pinta
qtconfig-qt3
qtconfig-qt4
recoll
remmina
seahorse
gnome-session-properties
shotwell
simple-scan
skype
sol
synaptic-pkexec
synaptic
system-config-printer
teamviewer
teeworlds
thunderbird
transmission-gtk
amdcccle
amdxdg-su
software-center
ubuntu-tweak
unetbootin
update-manager
usb-creator-gtk
users-admin
vino-preferences
VirtualBox
vkplayer
vlc
xdg-open
notepad
wine
winecfg
winetricks
xdiagnose
orage
xmind
yelp
env
как видно- очень много дублирований.
2) иногда файлы локализации лежат не в папке po, а в другой (встречались случаи- в папке locale). Ну эту проблему легко решить командой find ru.po, так что это не критично.

Оффлайн Phlya

  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: Поиск в dash с ошибочной раскладкой.
« Ответ #2 : 23 Мая 2012, 16:11:21 »
Очень крутое начало, BASH я, к сожалению, практически не знаю, поэтому помочь не могу(
(Опечатка в 6 строчке с конце - keywOrds)

И я правильно понял, что скрипт уже рабочий?

Пользователь решил продолжить мысль 23 Мая 2012, 16:13:11:
Ах, да. И сколько примерно Вам пришлось скачать для этого списка приложений?
И возможно ли сделать так, чтобы при установке нового приложения для него срабатывал этот скрипт?
« Последнее редактирование: 23 Мая 2012, 16:13:11 от Phlya »
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн Сперанский

  • Автор темы
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4055
  • Dictum ac factum
    • Просмотр профиля
Re: Поиск в dash с ошибочной раскладкой.
« Ответ #3 : 23 Мая 2012, 16:16:24 »
Нет, скрипт не рабочий, архивы я еще не качал, когда доделаю, выложу сюда и скрипт и файл с ключевыми словами для всех стандартных приложений.

Оффлайн ZwS

  • Старожил
  • *
  • Сообщений: 1674
    • Просмотр профиля
Re: Поиск в dash с ошибочной раскладкой.
« Ответ #4 : 23 Мая 2012, 16:26:41 »
все программы убунтовые переводятся при помощи лаунчпада. с лаунчпада можно вытянуть po файлик на странице https://translations.launchpad.net/ubuntu/precise/+source/имя_пакета/+pots/имя_пакета/ru/+export . например https://translations.launchpad.net/ubuntu/precise/+source/gedit/+pots/gedit/ru/+export . в чем проблема данного способа - без регистрации по файлик не получить+он шлется на емеил.
зы. выкачивать исходники программ очень нехорошее дело, потому как некоторые могут очень много весить. тот же хромиум 1,2 Гб весит.
Dell Inspiron One 2330 | Intel+Radeon HD7650A | 8GB RAM | Ubuntu GNOME 17.10

Оффлайн Phlya

  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: Поиск в dash с ошибочной раскладкой.
« Ответ #5 : 23 Мая 2012, 16:29:46 »
зы. выкачивать исходники программ очень нехорошее дело, потому как некоторые могут очень много весить. тот же хромиум 1,2 Гб весит.
Вот это я и подозревал((

Пользователь решил продолжить мысль 23 Мая 2012, 16:44:29:
Кстати, кажется, забыли про то, что должна быть возможность набирать в русской раскладке английские названия приложений.

Пользователь решил продолжить мысль 23 Мая 2012, 16:45:05:
И, раз со скачиванием исходников лучше не связываться, может лучше исходники даша посмотреть?..
« Последнее редактирование: 23 Мая 2012, 16:45:05 от Phlya »
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн Сперанский

  • Автор темы
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4055
  • Dictum ac factum
    • Просмотр профиля
Re: Поиск в dash с ошибочной раскладкой.
« Ответ #6 : 23 Мая 2012, 16:49:00 »
все программы убунтовые переводятся при помощи лаунчпада. с лаунчпада можно вытянуть po файлик на странице https://translations.launchpad.net/ubuntu/precise/+source/имя_пакета/+pots/имя_пакета/ru/+export . например https://translations.launchpad.net/ubuntu/precise/+source/gedit/+pots/gedit/ru/+export . в чем проблема данного способа - без регистрации по файлик не получить+он шлется на емеил.
зы. выкачивать исходники программ очень нехорошее дело, потому как некоторые могут очень много весить. тот же хромиум 1,2 Гб весит.
Исходники chromium по моему около 400Мб только, согласен, что объемы будут большие, но я же это сделаю только один раз, выложу сюда потом получившийся файл. Если есть возможность автоматизировать запрос-прием и разбор файла с лаунчпада, и вы его знаете, подскажите.

Пользователь решил продолжить мысль 23 Мая 2012, 16:50:59:
И, раз со скачиванием исходников лучше не связываться, может лучше исходники даша посмотреть?..
даш то наверно вообще на каком нибудь страшном языке программирования написан, я в них не бум бум :)
« Последнее редактирование: 23 Мая 2012, 16:50:59 от Пупизоид »

Оффлайн Phlya

  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: Поиск в dash с ошибочной раскладкой.
« Ответ #7 : 23 Мая 2012, 17:29:16 »
даш то наверно вообще на каком нибудь страшном языке программирования написан, я в них не бум бум :)
Сейчас попробую посмотреть... Питон, небось...

А, не, ни фига, С, С++ и vala, видимо... Это без меня тогда =)
« Последнее редактирование: 23 Мая 2012, 17:37:17 от Phlya »
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн Vampireos

  • Новичок
  • *
  • Сообщений: 18
  • Я Великий Блек Стар!!! Я удивлю богов! (BlackStar)
    • Просмотр профиля
    • Небо.ги
Re: Поиск в dash с ошибочной раскладкой.
« Ответ #8 : 29 Декабря 2013, 17:26:05 »
xneur переключает раскладку даже там ;)
Выражение «Я боюсь себе даже представить» — в корне неверно. Ведь люди боятся потому, что представляют. (Пожиратель Душ,Кишин Асура)

Оффлайн JmAbuDabi

  • Старожил
  • *
  • Сообщений: 2468
  • 나는 빅터 해요. 나는 프로그래머입니다
    • Просмотр профиля
Re: Поиск в dash с ошибочной раскладкой.
« Ответ #9 : 04 Января 2014, 15:02:13 »
Сперанский,
Сохраняй вывод в переменную, а потом

echo $a | sort -u
И все дубли "мертвы"
Покой – это не место, где тихо и мирно, где нет шума и беспокойства.
Покой – это когда при всем этом, вы сохраняете мир и спокойствие в своем сердце.

Оффлайн viktand

  • Участник
  • *
  • Сообщений: 190
    • Просмотр профиля
Re: Поиск в dash с ошибочной раскладкой.
« Ответ #10 : 06 Января 2014, 11:11:34 »
Склепал по быстрому программку, которая в папке /usr/share/applications перебирает все desktop'ы, находит строку "Name=..." и добавляет "Keywords=^^^", где ^^^ - это русские кракозябры из Name'а.

Т.е. было например "Name=gimp" добавилось "Keywords=пшьз".

В принципе, все получилось. Работает поиск, но почему-то не для всех файлов. Тот же gimp находится, а firefox нет. Почему, так и не понял.

Можно конечно глобально перетрясти весь компьютер на поиск десктопов, может и заработает. Но чё-то очкую.

Кому интересно можете попробовать. Бинарник (запускать под рутом) и исходники Qt5 Только на всякий случай сделайте копию той папки сначала.

 

Страница сгенерирована за 0.044 секунд. Запросов: 23.