Флуд
   3111

notify-send & sed [Решено]

Юзаю translate-shell как онлайн-(и оффлайн)- переводчик. Настроил его на перевод буфера.
#!/bin/sh
a=`xclip -o | trans :ru -no-ansi -b -l | sed 's/\[\[\[\"//' | cut -d \" -f 1`

notify-send -u critical "Перевод" "$a"

echo $a | xclip -selection clipboard

Но с некоторых пор что-то в notify-send изменилось, и теперь он режет на 40 символов длинные строки в body. Тупо обрезает, и нихера не видно.
Пока что я (временно) добавил в команду обработки буфера sed 's/.\{40\}/&\n/g', так и живу. Но это- костыль, а у иеня и так вся система на костылях и скоро, чую, рухнет Хотя как-то пятый год держится, я аж сам НАХОЖУСЬ В КРАЙНЕМ НЕДОУМЕНИИ…

Но sed не знает грамматики, и тупо режет строку по 40 символов.

Флуд: notify-send & sed
Мне читать такое неудобно.
Может есть способ сделать поизящней?
?
Правильные ответы начинаются с правильных вопросов.

8 комментариев

avatar
Пост и скрипт от очень хорошего человека kachnu.
На арче не тестирован, в убунту и дебиан работает на отлично! Процитирую пост:

Вашему вниманию предоставляется скрипт по переводу текста, прошу проверить его работу.
что он делает — он берет текст из буфера обмена, переводит его в гугле, гугловый ответ парсит и выводит в виде всплывающего сообщения или окна (ненужное закоментировать)
отличие от того варианта что выложен в сети myubuntu.ru/programmy/perevodite-lyuboj-vybrannyj-tekst-s-pomoshchyu-kombinatsii-klavish-i-opoveshchenij — данный скрипт переводит (точнее сказать выводит) весь выделенный текст, а не только до первой точки.
итак для работы скрипта поставим дополнительное ПО
sudo apt install libnotify-bin wget xsel xclip zenity

и сам скрипт my_translate.sh

#!/usr/bin/env bash
# язык на который осуществяется перевод, например:
# uk-українська, ru-русский, be-беларуска, en-english
LNG=«ru»

text="$(xsel -o)"
translate="$(wget -U «Mozilla/5.0» -qO — \
«translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=$LNG&dt=t&q=$(echo $text | sed „s/[\“'<>]//g»)" \
| awk -F«null,\»" '{print $1}' | awk -F".[[,]\"" '{ i=2; while (i<=NF) {print $i; i=i+2}}')"

# сохранить перевод в буфер обмена
echo "$translate" | xclip -selection clipboard

# вывести во всплывающем сообщении
notify-send -t 10000 --icon=info "$text" "$translate"

# вывести в окне
echo -e "$text\n ################### \n$translate" | zenity --text-info --title=«Translation»

exit 0

берете скрипт, делаете его исполняемым, привязываете его к хоткеям, потом просто выделив текст и нажав на хоткей — маете перевод.[/quote]
Последний раз редактировалось
+2
avatar
lynx03, спасибо. Но дай ссылку на оригинал. Или поправь, plz, вёрстку. А то ничего непонятно.
?
Правильные ответы начинаются с правильных вопросов.
0
avatar
Скрипт не работает. Выдаёт ошибку.
строка 9: неожиданный EOF при поиске соответствующего `''
строка 22: ошибка синтаксиса: неожиданный конец файла
0
avatar
Разумеется. Форумный парсер местами поменял кавычки-лапки на елочки.
Последний раз редактировалось
0
avatar
#!/bin/bash

# Сценарий с помощью translate-shell (https://github.com/soimort/translate-shell), xclip и libnotify
# переводит выделенный до этого текст с русского на английский или с любого языка на русский
# и выводит перевод как системное уведомление, одновременно добавляя его 
# в накопитель /tmp/trans.txt и буфер обмена

# Идеально запускать комбинацией клавиш

notify-send -i dialog-question -t 2000 "Ищу перевод..." " "

	cp /dev/null $HOME/.trans.txt
    
    TEXT=$(xclip -o)
    IDENT=$(translate-shell -id "$TEXT" | grep Code | grep ru)
	
	if [ "$IDENT" ]; then
	
    TRANS=$(translate-shell -b -t en "$TEXT" -o $HOME/.trans.txt)
	
	else
	
    TRANS=$(translate-shell -b -t ru "$TEXT" -o $HOME/.trans.txt)
	
	fi
	
	$TRANS

    TRAX=$(cat $HOME/.trans.txt)

	if [ "$TRAX" ]; then
	  
notify-send -i dialog-information "ПЕРЕВОД:" "$TRAX"
	
	echo -e "$TRAX \n" >> /tmp/trans.txt
	xclip -i $HOME/.trans.txt -selection clipboard
	   	   
	else
	
notify-send -i dialog-error -t 7000 "ОШИБКА: Отсутствует перевод" "Нет связи с сервисом \n или выделена пустая строка"
	    
	fi

Последний раз редактировалось
+4
avatar
jacobtey
Спасибо! Очень полезный скрипт. Теперь могу где угодно набирать русский текст, выделять его, затем по быстрым клавишам перевожу на английский и по Ctrl+V заменяю русский текст на английский. Очень удобно в переписке.
Кроме того, он он дишён недостатка перевода простым способом(без translate-shell). Там перевод получается разорванным и выскакиваеn всё время длинный цифробуквеный код(как я понял md5sum), который портит всю картинку. Но тот быстрее.
Последний раз редактировалось
0
avatar
Всем спасибо, красивые скрипты.
Но у меня почему-то и в них notify-send чудит: при попытке вывести длинную строку в тело сообщения — выводит лишь первые 40 символов из нее. Приходится принудительно резать длинную строку по 40 символов. sed с этим справляется, но механически, неаккуратно. А хочется красиво, чтоб слова переносились...
Не прошло и года, как… (барабанная дробь)… я, тормоз, вспомнил про fold.
В итоге вот чего мне хотелось.


#!/bin/sh
a=`xclip -o | translate-shell :ru -no-ansi -b -l | fold -sw40`
notify-send -u critical "Перевод" "$a"
echo $a | xclip -selection clipboard

Решено.
Последний раз редактировалось
?
Правильные ответы начинаются с правильных вопросов.
+1
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.