- PVSM.RU - https://www.pvsm.ru -

Вычисление арифметических выражений в текстовом редакторе

В своей книге «Интерфейс: новые направления в проектировании компьютерных систем» Джефф Раскин описывает возможность вычисления арифметических выражений прямо в окне текстового редактора, без необходимости запуска калькулятора. Будучи вдохновлённым этой книгой, а также статьями boo1ean [1] «Перевод выделенного текста с любого языка на русский» [2] и imitsuran [3] «Исправление раскладки клавиатуры а-ля Punto Switcher на bash» [4] решил написать реализацию этой задумки для ОС Linux. В результате имеем простой скрипт, вызываемый горячей клавишей, который вычисляет выделенные арифметические выражения, заменяя их результатами вычислений.

Решение

Для работы скрипта необходимы следующие пакеты: 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 (в режиме переименования файлов).

Скрипт можно скачать по ссылке [5].

Автор: ivn86

Источник [6]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/linux/34538

Ссылки в тексте:

[1] boo1ean: http://habrahabr.ru/users/boo1ean/

[2] «Перевод выделенного текста с любого языка на русский» : http://habrahabr.ru/post/137215/

[3] imitsuran: http://habrahabr.ru/users/imitsuran/

[4] «Исправление раскладки клавиатуры а-ля Punto Switcher на bash»: http://habrahabr.ru/post/120502/

[5] по ссылке: https://dl.dropboxusercontent.com/u/15448112/selcalc

[6] Источник: http://habrahabr.ru/post/180027/