Решение
Для работы скрипта необходимы следующие пакеты: xsel, xvkbd и bc. Устанавливаем:
sudo aptitude install xsel xvkbd bc
Далее открываем любой текстовый редактор и пишем:
#!/bin/sh PRECISION=4; SELECTION=$(xsel -o); if [ $SELECTION = "" ]; then exit 1; fi RESULT=$(echo "scale=$PRECISION;$SELECTION" | bc); if [ $RESULT ]; then BOOFER=$(xsel -b); echo -n "$RESULT" | xsel -b -i; xvkbd -xsendevent -text "\[Control_L]\[v]"; echo -n "$BOOFER" | xsel -b -i fi
В переменной PRECISION указываем точность десятичной дроби (в представленном варианте 4 знака после запятой). В переменную SELECTION записываем выделенное арифметическое выражение, и если выделение не пустое, то вычисляем его значение с помощью bc, результат записываем в переменную RESULT. Если результат не нулевой, то в переменную BOOFER записываем текущее содержимое буфера обмена, переписываем содержимое буфера обмена результатом вычисления и с помощью утилиты xvkbd вставляем через эмуляцию Ctrl+V (т.к. вычисляемое выражение выделено, то вставка перепишет его результатом). Возвращаем пользователю содержимое буфера обмена.
Сохраняем файл, например, под именем selcalc, даём права на выполнение и переносим в /usr/bin:
sudo chmod +x ./selcalc && sudo mv ./selcalc /usr/bin/
Назначаем горячую клавишу на запуск скрипта, например Ctrl+Shift+C (я воспользовался стандартными средствами GNOME 2).
Использование
- выделяем арифметическое выражение
- нажимаем Ctrl+Shift+C
- на месте выделенного выражения видим результат вычисления
Плюсы и минусы
+ Вычисление арифметических выражений без необходимости запуска калькулятора
+ Поддержка сложных выражений (фактически любые выражения, которые способен вычислить bc, включая управление приоритетами вычислений, возведение в степень и пр.)
— Не работает в текстовых редакторах, не поддерживающих вставку через Ctrl+V, криво работает в некоторых редакторах (Mozilla Thunderbird, Skype)
Проверено в Open Office, Sublime Text 2, gedit, Pidgin, Nautilus (в режиме переименования файлов).
Скрипт можно скачать по ссылке.
ссылка на оригинал статьи http://habrahabr.ru/post/180027/
Добавить комментарий