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


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: xNeur - Punto Switcher for Linux (Архив)  (Прочитано 653061 раз)

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

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
Re: xNeur - Punto Switcher for Linux
« Ответ #3615 : 08 Апреля 2011, 20:39:23 »
Заметил такую странность: если открыть диалог запуска программ (krunner, по умолчанию вызывается по alt+F2), после этого почему-то xneur не переключает раскладки, как автоматически, так и выделенный текст, до тех пор, пока я не перезапущу xneur
В данный момент стоит xneur версии svn885, KDE 4.6.2
А если ещё раз вызвать диалог, не перезапуская XNeur?
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн mityi

  • Участник
  • *
  • Сообщений: 103
  • Kubuntu 16.04
    • Просмотр профиля
Re: xNeur - Punto Switcher for Linux
« Ответ #3616 : 08 Апреля 2011, 22:19:31 »
Заметил такую странность: если открыть диалог запуска программ (krunner, по умолчанию вызывается по alt+F2), после этого почему-то xneur не переключает раскладки, как автоматически, так и выделенный текст, до тех пор, пока я не перезапущу xneur
В данный момент стоит xneur версии svn885, KDE 4.6.2
Проверил, у меня xneur перестает переключать не из-за этого. После вызова krunner работал нормально. У меня отваливается переключение через некоторое время после перезапуска, специально вызвать пока не получается.

Оффлайн mehanoid

  • Участник
  • *
  • Сообщений: 149
  • Arch Linux user
    • Просмотр профиля
Re: xNeur - Punto Switcher for Linux
« Ответ #3617 : 08 Апреля 2011, 23:35:12 »
Заметил такую странность: если открыть диалог запуска программ (krunner, по умолчанию вызывается по alt+F2), после этого почему-то xneur не переключает раскладки, как автоматически, так и выделенный текст, до тех пор, пока я не перезапущу xneur
В данный момент стоит xneur версии svn885, KDE 4.6.2
А если ещё раз вызвать диалог, не перезапуская XNeur?
Нет, как вырубился после запуска krunner, так и всё.

Кусочек лога:
(Нажмите, чтобы показать/скрыть)
Вначале всё работает нормально (окно "Geany"), затем запускается krunner, тоже пока всё нормально.
Но потому закрываю krunner, фокус передаётся обратно на окно Geany, вот в этом месте, но xneur почему-то пишет, что фокус передан на окно с ID 1 и всё, дальше пишет только про нажатия мыши, раскладки не переключает, нажатия клавиш не перехватывает, фокус никуда не передаёт:
[DBG] 23:22:15 Сфокусировано окно 1
[DBG] 23:22:15 Обрабатывается новое окно (ID 1) с именем '(null)' (статус Processed, режим Default)
[DBG] 23:22:15 Перехват событий в окне (ID 1) с именем '(null)' включен

Оффлайн lion9

  • Участник
  • *
  • Сообщений: 163
    • Просмотр профиля
    • Веб-кирпичи
Re: xNeur - Punto Switcher for Linux
« Ответ #3618 : 08 Апреля 2011, 23:46:15 »
Собрал версию 887 из svn, всё скомпилилось, но получаю:


gxneur
bash: /usr/bin/gxneur: Нет такого файла или каталога

C sudo запускается.

при этой сам демон xneur работает от простого пользователя, не от рута.

В чём может быть косяк? Компилил не под рутом.


UPD - после ребута всё заработало. Проблема с отваливанием после некоторого времени работы осталась.
« Последнее редактирование: 09 Апреля 2011, 00:20:22 от lion9 »

Оффлайн mehanoid

  • Участник
  • *
  • Сообщений: 149
  • Arch Linux user
    • Просмотр профиля
Re: xNeur - Punto Switcher for Linux
« Ответ #3619 : 09 Апреля 2011, 02:21:23 »
Ещё один момент. Глюк, про который я писал, проявляется при включенном compiz. С kwin всё нормально.

Оффлайн Clr

  • Любитель
  • *
  • Сообщений: 56
    • Просмотр профиля
    • MakeLinux — всё о настройке Linux систем
Re: xNeur - Punto Switcher for Linux
« Ответ #3620 : 09 Апреля 2011, 09:01:16 »
1. Кэш для keymap_get_ascii.
2. Исправление сообщения об ошибке в keycode_to_symbol_real.

Index: lib/main/keymap.c
===================================================================
--- lib/main/keymap.c (revision 887)
+++ lib/main/keymap.c (working copy)
@@ -134,8 +134,8 @@
  }
  }
 
- log_message(ERROR, _("Not find symbol for keycode %d and modifier 0x%x!"), event.xkey.keycode, event.xkey.state);
- log_message(ERROR, _("Try run the programm with command \"env LC_ALL=<LOCALE> %s\", \nwhere LOCALE available over command \"locale -a\""), PACKAGE);
+ log_message(ERROR, _("Failed to look up symbol for keycode %d and modifier 0x%x!"), event.xkey.keycode, event.xkey.state);
+ log_message(ERROR, _("Try run the program with command \"env LC_ALL=<LOCALE> %s\", \nwhere LOCALE available over command \"locale -a\""), PACKAGE);
  symbol[0] = NULLSYM;
  strcat(symbol, " ");
 
@@ -149,11 +149,13 @@
 }
 
 #define keycode_to_symbol_cache_size 64
+
 static struct keycode_to_symbol_pair
 {
  KeyCode kc; int group; int state;
  char* symbol; size_t symbol_size;
 } keycode_to_symbol_cache[keycode_to_symbol_cache_size];
+
 size_t keycode_to_symbol_cache_pos = 0;
 
 char* keycode_to_symbol(KeyCode kc, int group, int state)
@@ -194,18 +196,6 @@
  return symbol;
 }
 
-void purge_keymap_caches(void)
-{
- for (int i = 0; i < keycode_to_symbol_cache_size; i++)
- {
- struct keycode_to_symbol_pair* p = keycode_to_symbol_cache + i;
- if (p->symbol)
- free(p->symbol),
- p->symbol = NULL,
- p->symbol_size = 0;
- }
-}
-
 int get_keycode_mod(int group)
 {
  return keyboard_groups[group];
@@ -273,7 +263,7 @@
  return TRUE;
 }
 
-static char keymap_get_ascii(struct _keymap *p, const char *sym, int* preferred_lang, KeyCode *kc, int *modifier, size_t* symbol_len)
+static char keymap_get_ascii_real(struct _keymap *p, const char *sym, int* preferred_lang, KeyCode *kc, int *modifier, size_t* symbol_len)
 {
  Display *display = XOpenDisplay(NULL);
 
@@ -385,6 +375,70 @@
  return NULLSYM;
 }
 
+#define symbol_to_keycode_cache_size 64
+
+static struct symbol_to_keycode_pair
+{
+ char* symbol; size_t symbol_size; int preferred_lang;
+ KeyCode kc; int modifier; char ascii; int preferred_lang_result;
+} symbol_to_keycode_cache[symbol_to_keycode_cache_size];
+
+size_t symbol_to_keycode_cache_pos = 0;
+
+
+static char keymap_get_ascii(struct _keymap *p, const char *sym, int* preferred_lang, KeyCode *kc, int *modifier, size_t* symbol_len)
+{
+ struct symbol_to_keycode_pair *pr = NULL;
+
+ int _preferred_lang = 0;
+ if (preferred_lang)
+ _preferred_lang = *preferred_lang;
+
+ size_t sym_size = strlen(sym);
+
+ /* Look up cache */
+
+ for (int i = 0; i < symbol_to_keycode_cache_size; i++) {
+ pr = symbol_to_keycode_cache + i;
+ if (pr->symbol &&
+     pr->symbol_size <= sym_size &&
+     pr->preferred_lang == _preferred_lang &&
+     memcmp(pr->symbol, sym, pr->symbol_size) == 0)
+ goto ret;
+ }
+
+ /* Miss */
+
+ int preferred_lang_result = _preferred_lang;
+ char ascii = keymap_get_ascii_real(p, sym, &preferred_lang_result, kc, modifier, &sym_size);
+ if (!ascii)
+ return ascii;
+
+ symbol_to_keycode_cache_pos = (symbol_to_keycode_cache_pos + 1) % symbol_to_keycode_cache_size;
+
+ pr = symbol_to_keycode_cache + symbol_to_keycode_cache_pos;
+
+ pr->symbol = realloc(pr->symbol, sym_size + 1);
+ memcpy(pr->symbol, sym, sym_size);
+ pr->symbol[sym_size] = 0;
+ pr->symbol_size = sym_size;
+ pr->preferred_lang = _preferred_lang;
+ pr->kc = *kc;
+ pr->modifier = *modifier;
+ pr->preferred_lang_result = preferred_lang_result;
+ pr->ascii = ascii;
+
+ ret:
+
+ if (preferred_lang)
+ *preferred_lang = pr->preferred_lang_result;
+ if (symbol_len)
+ *symbol_len = pr->symbol_size;
+ *kc = pr->kc;
+ *modifier = pr->modifier;
+ return pr->ascii;
+}
+
 static char keymap_get_cur_ascii_char(struct _keymap *p, XEvent e)
 {
  XKeyEvent *ke = (XKeyEvent *) &e;
@@ -593,3 +647,27 @@
 
  return p;
 }
+
+void purge_keymap_caches(void)
+{
+ for (int i = 0; i < keycode_to_symbol_cache_size; i++)
+ {
+ struct keycode_to_symbol_pair* p = keycode_to_symbol_cache + i;
+ if (p->symbol)
+ free(p->symbol),
+ p->symbol = NULL,
+ p->symbol_size = 0;
+ }
+
+ for (int i = 0; i < symbol_to_keycode_cache_size; i++)
+ {
+ struct symbol_to_keycode_pair* p = symbol_to_keycode_cache + i;
+ if (p->symbol)
+ free(p->symbol),
+ p->symbol = NULL,
+ p->symbol_size = 0;
+ }
+
+}
+
+

Оффлайн Crew

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1384
  • xneur 0.20.0
    • Просмотр профиля
Re: xNeur - Punto Switcher for Linux
« Ответ #3621 : 09 Апреля 2011, 09:16:16 »
Залил в svn 888.
PPA cо стабильными сборками xneur: ppa:andrew-crew-kuznetsov/xneur-stable
PPA c "ночными" сборками xneur: ppa:andrew-crew-kuznetsov/xneur-unstable

Оффлайн Attid

  • Участник
  • *
  • Сообщений: 177
    • Просмотр профиля
Re: xNeur - Punto Switcher for Linux
« Ответ #3622 : 09 Апреля 2011, 11:10:36 »
а можно кнопочку на исправление буфера обмена ? сейчас кнопка есть, но она из буфера обмена вставляет в активное окно  активное окно, а это не везде работает, например lazarus и в скайпе через раз. а с буфером все работают отлично.

т.е. хочется горячу клавишу чтобы исправляло буфер обмена и в нем остался уже исправленный текст.

Оффлайн Crew

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1384
  • xneur 0.20.0
    • Просмотр профиля
Re: xNeur - Punto Switcher for Linux
« Ответ #3623 : 09 Апреля 2011, 11:15:51 »
Вообще такое сочетание клавиш есть в настройке. Называется "Коррекция буфера обмена".
PPA cо стабильными сборками xneur: ppa:andrew-crew-kuznetsov/xneur-stable
PPA c "ночными" сборками xneur: ppa:andrew-crew-kuznetsov/xneur-unstable

Оффлайн lion9

  • Участник
  • *
  • Сообщений: 163
    • Просмотр профиля
    • Веб-кирпичи
Re: xNeur - Punto Switcher for Linux
« Ответ #3624 : 09 Апреля 2011, 11:17:42 »
Пожалуйста, проясните для меня два вопроса:

1. Я поставил версию 887 из SVN. Как я могу удалить программу, поставленную их SVN?

2. Как обновить версию программы, поставленной из svn? Выполнить в той же папке, куда качал ранее исходники
[code]svn co svn://xneur.ru:3690/xneur/xneur xneur
и пересобрать?

3. Установленный из SVN xneur имеет версию 0.12.0.

xneur -v
Xneur - automatic keyboard switcher (version 0.12.0)
mailto: andrewcrew@rambler.ru
web: http://www.xneur.ru/

А где посмотреть его ревизию - 887 и т.д.?[/code]
« Последнее редактирование: 09 Апреля 2011, 11:29:58 от lion9 »

Оффлайн Crew

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1384
  • xneur 0.20.0
    • Просмотр профиля
Re: xNeur - Punto Switcher for Linux
« Ответ #3625 : 09 Апреля 2011, 11:24:51 »
1. Кэш для keymap_get_ascii.
2. Исправление сообщения об ошибке в keycode_to_symbol_real.

Я вот хотел узнать, чем обусловлен размер кеша 64?

Пользователь решил продолжить мысль 09 Апреля 2011, 11:29:46:
Пожалуйста, проясните для меня два вопроса:

1. Я поставил версию 887 из SVN. Как я могу удалить программу, поставленную их SVN?

2. Как обновить версию программы, поставленной из svn? Выполнить в той же папке, куда качал ранее исходники
svn co svn://xneur.ru:3690/xneur/xneur xneur и пересобрать?

3. Установленный из SVN xneur имеет версию 0.12.0. А где посмотреть его ревизию - 887 и т.д.?

1. Удаление командой "sudo make uninstall"
2. Обновить командой "svn up" в той папке, куда качали.
3. Ревизию только той же командой, что и в п.2.
« Последнее редактирование: 09 Апреля 2011, 11:29:46 от Crew »
PPA cо стабильными сборками xneur: ppa:andrew-crew-kuznetsov/xneur-stable
PPA c "ночными" сборками xneur: ppa:andrew-crew-kuznetsov/xneur-unstable

Оффлайн lion9

  • Участник
  • *
  • Сообщений: 163
    • Просмотр профиля
    • Веб-кирпичи
Re: xNeur - Punto Switcher for Linux
« Ответ #3626 : 09 Апреля 2011, 11:32:43 »
1. Удаление командой "sudo make uninstall"

Благодарю. Удалять с помощью "sudo make uninstall" обязательно? Сейчас вроде нормально и так обновилось. Кроме того, а если я хочу установить более раннюю ревизию, какой должна быть команда?
« Последнее редактирование: 09 Апреля 2011, 11:35:45 от lion9 »

Оффлайн Crew

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1384
  • xneur 0.20.0
    • Просмотр профиля
Re: xNeur - Punto Switcher for Linux
« Ответ #3627 : 09 Апреля 2011, 11:35:32 »
Удалять необязательно. Удалять надо, если вы из пакетов ставить потом будете.
PPA cо стабильными сборками xneur: ppa:andrew-crew-kuznetsov/xneur-stable
PPA c "ночными" сборками xneur: ppa:andrew-crew-kuznetsov/xneur-unstable

Оффлайн Attid

  • Участник
  • *
  • Сообщений: 177
    • Просмотр профиля
Re: xNeur - Punto Switcher for Linux
« Ответ #3628 : 09 Апреля 2011, 11:35:43 »
Вообще такое сочетание клавиш есть в настройке. Называется "Коррекция буфера обмена".

он оставляет в буфере обмена то что там есть, и пытается вставить в активное окно откоректированный текст.  т.е. это не "коррекция буфера обмена"  а "вставить откоректированный текст из буфера"

Оффлайн ism

  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Re: xNeur - Punto Switcher for Linux
« Ответ #3629 : 09 Апреля 2011, 14:26:03 »
Привет, тут интересная штука выяснилась, при запущенном демоне xneur по вкладкам в меню настроек gxneur невозможно переключиться, они просто не реагируют. Останавливаю демон, в gxneur все нормально. не знаю на что грешить.  Также подобное встречалось в gnome-mplayer, пока не остановил xneur вкладки не переключались.

Во время проблемы пишет
 [TRA] 12:57:22 Получено Button1Press в окне 349 с подокном 29390995 (тип события 4)
и т.д.

xneur-0.12.0-2.1.i586.rpm
libxneur12-0.12.0-2.1.i586.rpm
gxneur-0.12.0-1.1.i586.rpm  

Что интересно, это проявилось на обновленном компе с новой видеокартой, на старом проблем не было в той же версии Linux Opensuse 11.4

и еще не запоминается галочка "Запускать автоматически при старте системы"

 

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