Sunday, July 3, 2011

"ы" і "э"

В мене часто так буває, що треба знайти шось в неті російською мовою. Більшість букв можна замінити українськими аналогами, але найбільші проблеми з "ы" і "э". Тримати заради них ше одну розкладку не хочетсья, тому я завжди шукав в інтернеті десь в тексті ці букви і копіював їх. Але то схарило і я вирішив написати мінімальну програмулю, яка буде сама копіювати в буфер то шо мені треба. Програмуля використовує gtk-clipboard - очевидно буде працювати тільки в лінуксі, хоча хтось може взяти ідею і наваяти шось подібне і під MacOS :)

Зразу попереджаю - я не професійний gtk-девелопер. Карочє код:

/* файл назвем для прикладу main.c */

#include <gtk/gtk.h>
#include <gdk/gdk.h>
#include <string.h>

#define BUFFER_LEN 100

int main (int argc, char **argv) {
char message[BUFFER_LEN];
memset(message, 0, BUFFER_LEN);

if (argc == 1) {
return 0;
}

/* initialize GTK */
gtk_init (&argc, &argv);

/* select needed phrase */
switch (atoi(argv[1])) {
case 1:
sprintf(message, "%s", "ы");
break;
case 2:
sprintf(message, "%s", "э");
break;
/* here you can put your own variants */
default:
sprintf(message, "%s", "хз");
}

/* set the clipboard text */
gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELEC
TION_CLIPBOARD), message, strlen(message));

/* store the clipboard text */
gtk_clipboard_store(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD));

return 0;
}

компілюєтсья то всьо рядком:

cc `pkg-config --cflags --libs gtk+-2.0` main.c -o copy_buffer

треба шоб були девелоперські ліби для gtk ну і сішний компілятор

на виході отримуємо бінарнийк copy_buffer, який приймає один параметр - цифру. Його (бінарник) треба скопіювати в /usr/local/bin шоб система його знаходила.
В середині є switch, який в залежності від того, яка цифра (параметр) передана в програму, буде класти в буфер то, шо треба. Цей switch можна собі розширити і запхати туди цілі фрази, якшо часто приходитсья шось велике набирати.

Наступний крок - визначаємо клавіші під різні варіанти запуску програмулі.

Для цього я запустив CompizConfig Settings Manager і там в розділі General/Commands створив дві команди: "copy_buffer 1" і "copy_buffer 2". Перша, згідно switch'а в коді програми, покладе в буфер "ы", друга відповідно "э". Ну і якшо ми запустим програму з якимось іншим параметром - то отримаєм "хз". У вкладці Key Bindings встановив їм комбінаційї "win+1" і "win+2" відповідно.

Як воно працює?
Сижу я в інтернеті і хочу когось забакланити десь на російському форумі. Пишу "Да иди т? со своей ?нтропией!". На місці знака питання натискаю win+1 і Ctrl+V, а на місці другого win+2 і Ctrl+V. І всэ)

No comments: