LINUX.ORG.RU

Сообщения geekless

 

[лоргугл] Нормальные приложения для рисования диаграмм есть какие?

Форум — Desktop

Собственно, сабж.

Ну и второй вопрос, риторический: это нормально, что в 2012 году ни LODraw, ни Dia не умеют такую вещь как «назначить выделенным элементам одинаковую ширину»? Всё настолько плохо, да?

 

geekless
()

[лоргугл] Внезапно, текстовые редакторы

Форум — General

Собственно, да: лоргугла тред, чтобы составить список. Давайте поговорим о велосип^Wредакторах. Итак, какие вы знаете текстовые редакторы, которые подходят под следующие условия:

  • Графический интерфейс, не консолька.
  • Не emacs (и не клоны/производные).
  • Не vim (и не клоны/производные).
  • Не на виджете от gtksourceview, scite или kwrite.
  • Не говно мамонта из эпохи однобайтовых кодировок.
  • Расширябельные/скриптуемые.

Спрашиваю чисто для расширения кругозора.

P.S. Разумеется, под GNU/Linux, не под оффтопик. Странно, что на форуме о Linux приходится писать такое уточнение. :}

 

geekless
()

[радости тред]3.2 и 12309

Форум — Talks

Снял двухмегабайтовые ограничения на буфер записи:

[root ~]# echo 50 > /proc/sys/vm/dirty_background_ratio 
[root ~]# echo 50 > /proc/sys/vm/dirty_ratio 

Запустил dd. Типичные размеры буферов во время копирования:

$ egrep 'Dirty|Writeback:' /proc/meminfo 
Dirty:            333220 kB
Writeback:         24764 kB

Скорость:

$ dd if=/dev/zero bs=1M > ~/tmp/blob
dd: запись «стандартный вывод»: На устройстве кончилось место
4511+0 записей считано
4510+0 записей написано
 скопировано 4729249792 байта (4,7 GB), 108,881 c, 43,4 MB/c

Тормозов нет. Вообще нет. Это успех, господа.

P.S. Для тех, кому 3.2 не помог, обещают ништяки в 3.3:


Fixes for those went into 3.3-rc1. Quoting from this weeks LWN.net kernel page
(I'm quite sure Jonathan won't mind):

"""
There have been some significant changes made to the memory compaction code to
avoid the lengthy stalls experienced by some users when writing data to slow
devices (USB keys, for example). This problem was described in this article
(http://lwn.net/Articles/467328/), but the solution has evolved considerably.
By making a number of changes to how compaction works, the memory management
hackers (and Mel Gorman in particular) were able to avoid disabling synchronous
compaction, which had the unfortunate effect of reducing huge page usage. See
this commit (
http://git.kernel.org/linus/a77ebd333cd810d7b680d544be88c875131c2bd3 ) for a
lot of information on how this problem was addressed. 
"""

 

geekless
()

[gtk] balloon messages

Форум — Development

Есть ли сабж в gtk (или в виде сторонней библиотеки для gtk)? В справочнике API не нашел, нагуглить не удалось.

 

geekless
()

Вот потому и [не готов]

Форум — Talks

Пытаюсь «простому пользователю» поставить наш ненаглядный линукс. Попытки найти вменяемый файловый менеджер и рисовалку иконок на рабочем столе:

  • tuxcmd. Нет интеграции с «открыть с помощью». Совсем. Не реализован диалог свойств файлов.
  • doublecmd. Невозможно выбрать дефолтное приложение для «открыть с помощью». Нет варианта «открыть с помощью» -> выбрать приложение вручную. Тормозит.
  • thunar. Нет подменю «открыть с помощью» для каталогов. Видимо, тупо отрублен показ меню в исходнике (нахрена?!) — для обычных файлов-то реализовано.
  • xfdesktop. Перетаскивание иконок по десктопу на одном компе работает, на другом не работает. Профили идентичны. Телепаты в отпуске. Также, не реализован пункт «вставить» в контекстном меню. Просто не реализован в исходнике, код брошен на полдороге.
  • pcmanfm. Единственный, который более-менее работает. Замеченный мелкий недостаток — не реализовано открытие файлов перетаскиванием на иконку приложения на десктопе. Остановился пока на нём. Но у pcmanfm до сих пор периодически то там то сям вылазят разные глюки, и, вероятно, он еще преподнесёт сюрпризы.

Вывода и морали не будет.

 

geekless
()

[плача тред] Задолбался с этим вашим windows way-ем.

Форум — Talks

Вопросы, на которые я не знаю ответов:

1. Как из скрипта получить список объектов «Открыть с помощью», ассоциированных с заданным MIME?

2. Какое есть приложение для отображения диалога «Свойства файлов» а ля аналогичные диалоги из наутилус/тунар/pcmanfm? (Нет такого приложения)

3. Какая есть утилита, аналогичная диалогу копирования/перемещения файлов из двухпанельных ФМ. С умными вопросами типа «файл уже существует, заменить/пропустить/переименовать?» (Нет такой утилиты.)

4. Какая есть утилита — универсальный вьюер файлов. С переключением режимов текст/hex-дамп/html/картинко и т.п. С поддержкой кодировок. С поддержкой файлов произвольного размера. С поддержкой плагинов. (Нет такой утилиты.)

5. Какая есть утилита графический фронт-энд для find? (Нет такой утилиты. catfish убог чуть более, чем совсем. Уже подумываю о том, чтобы запилить собственную на Ruby и назвать dogfish.)

Ну и так далее. Смотрю на типичный софт и вижу: не линукс, а сплошная «винда-виндой, только бесплатная». Горы неюзабельного, недопиленного говна. Четыре DE. Десяток файловых менеджеров. Два десятка проигрывателей. Четыре десятка текстовых редакторов. Комбайны, архитектурно не способные к интеграции и взаимодействию. Задрало.

Выдохнул.

geekless
()

Опять некрофилия в модераторах проснулась?

Форум — Talks

08.12.2003 10:31


29.11.2006 07:36


16.09.2003 12:26


21.11.2003 10:51


Переписывают историю. Тревожат души давно умерших тредов. Ничего святого нет. Ай-яй-яй.

geekless
()

[жж][опасносте][google] И в самом деле, почему?

Форум — Talks

!Ъ: http://s018.radikal.ru/i505/1201/85/4d03a7e594ba.png

Для Ъ: гугл как бы намекает на наше светлое будущее.

 ,

geekless
()

[archlinux][штабильношть] Сломали реп community для i686

Форум — Talks

Суть:

# pacman -Syu
:: Синхронизируются базы данных пакетов...
 core не устарел
 extra не устарел
 community не устарел
 archlinuxfr не устарел
 xyne-any не устарел
 pfkernel                                                                                              7,8K  354,4K/s 00:00:00 [############################################################################] 100%
:: Запускается полное обновление системы...
предупреждение: galculator: установленная версия (1.3.4-2) новее, чем в community (1.3.4-1)
ошибка: не удалось подготовить запрос (архитектура пакета недопустима)
:: пакет aria2-1.14.1-1-x86_64 не имеет допустимой архитектуры
:: пакет gecko-mediaplayer-1.0.5-1-x86_64 не имеет допустимой архитектуры
:: пакет gnome-mplayer-1.0.5-1-x86_64 не имеет допустимой архитектуры
:: пакет gogglesmm-0.12.6-1-x86_64 не имеет допустимой архитектуры
:: пакет lshw-B.02.16-1-x86_64 не имеет допустимой архитектуры
:: пакет poedit-1.4.6.1-6-x86_64 не имеет допустимой архитектуры
:: пакет scite-3.0.2-1-x86_64 не имеет допустимой архитектуры
:: пакет sysstat-10.0.3-2-x86_64 не имеет допустимой архитектуры

Подробности: https://bbs.archlinux.org/viewtopic.php?id=133393

Отличный баг: все пользователи архитектуры i686 временно-принудительно отлучены от RR.

АААА!!! АРЧ САМ НЕ ОБНОВИТСЯ! Я НЕ ОБНОВЛЯЛ СВОЙ АРЧИК 2 ДНЯ, ПОЙДУ ОБНОВЛЮСЬ!... а не получается.

Это зависимость! Арчеводы, чувствуете ломку без новых пакетов?

 

geekless
()

[openbox] Переключать рабочие столы прямо из alt-tab-ового списка окон

Форум — Development

Посетила указанная в заголовке юзабилити-идея. В самом деле, если по нажатию alt-tab, WM переходит в режим листания окон, то почему бы прямо оттуда же и не листать рабочие столы? Сказано — сделано. Патч добавляет опенбоксу листание столов по стрелке-влево/стрелке-вправо когда активен список окон:

diff --git a/openbox/actions/cyclewindows.c b/openbox/actions/cyclewindows.c
index 5f0db27..a3cde57 100644
--- a/openbox/actions/cyclewindows.c
+++ b/openbox/actions/cyclewindows.c
@@ -4,6 +4,7 @@
 #include "openbox/event.h"
 #include "openbox/focus_cycle.h"
 #include "openbox/openbox.h"
+#include "openbox/screen.h"
 #include "gettext.h"
 #include "obt/keyboard.h"
 
@@ -23,6 +24,8 @@ typedef struct {
     /* options for after we're done */
     gboolean cancel; /* did the user cancel or not */
     guint state;     /* keyboard state when finished */
+
+    guint screen_desktop;
 } Options;
 
 static gpointer setup_func(xmlNodePtr node,
@@ -70,6 +73,8 @@ static gpointer setup_func(xmlNodePtr node,
     o->bar = TRUE;
     o->dialog_mode = OB_FOCUS_CYCLE_POPUP_MODE_LIST;
 
+    o->screen_desktop = screen_desktop;
+
     if ((n = obt_xml_find_node(node, "linear")))
         o->linear = obt_xml_node_bool(n);
     if ((n = obt_xml_find_node(node, "dialog"))) {
@@ -206,6 +211,16 @@ static gboolean i_input_func(guint initial_state,
             o->state = e->xkey.state;
             return FALSE;
         }
+
+        else if ((sym == XK_Left || sym == XK_Right) ) {
+            guint d = screen_find_desktop(screen_desktop,
+                                          sym == XK_Right ? OB_DIRECTION_EAST : OB_DIRECTION_WEST, TRUE, TRUE);
+
+            screen_set_desktop(d, TRUE, FALSE);
+            run_func(NULL, options);
+            screen_show_desktop_popup(d, FALSE, FALSE);
+            return TRUE;
+        }
     }
     /* They released the modifiers */
     else if (e->type == KeyRelease && initial_state && !(mods & initial_state))
@@ -223,6 +238,8 @@ static void i_cancel_func(gpointer options)
     Options *o = options;
     o->cancel = TRUE;
     o->state = 0;
+
+    screen_set_desktop(o->screen_desktop, TRUE, TRUE);
 }
 
 static void i_post_func(gpointer options)
diff --git a/openbox/actions/desktop.c b/openbox/actions/desktop.c
index a3a1f6b..7886b7c 100644
--- a/openbox/actions/desktop.c
+++ b/openbox/actions/desktop.c
@@ -302,7 +302,7 @@ static gboolean run_func(ObActionsData *data, gpointer options)
         }
 
         if (go) {
-            screen_set_desktop(d, TRUE);
+            screen_set_desktop(d, TRUE, TRUE);
             if (data->client)
                 client_bring_helper_windows(data->client);
         }
@@ -356,7 +356,7 @@ static gboolean i_pre_func(guint initial_state, gpointer options)
         return FALSE;
     }
     else {
-        screen_show_desktop_popup(screen_desktop, TRUE);
+        screen_show_desktop_popup(screen_desktop, TRUE, TRUE);
         return TRUE;
     }
 }
diff --git a/openbox/client.c b/openbox/client.c
index f3b4bda..feff3a6 100644
--- a/openbox/client.c
+++ b/openbox/client.c
@@ -4029,7 +4029,7 @@ static void client_present(ObClient *self, gboolean here, gboolean raise,
         if (here)
             client_set_desktop(self, screen_desktop, FALSE, TRUE);
         else
-            screen_set_desktop(self->desktop, FALSE);
+            screen_set_desktop(self->desktop, FALSE, TRUE);
     } else if (!self->frame->visible)
         /* if its not visible for other reasons, then don't mess
            with it */
diff --git a/openbox/client_list_combined_menu.c b/openbox/client_list_combined_menu.c
index c26b6fa..f2027e4 100644
--- a/openbox/client_list_combined_menu.c
+++ b/openbox/client_list_combined_menu.c
@@ -126,10 +126,10 @@ static void menu_execute(ObMenuEntry *self, ObMenuFrame *f,
             /* if the window is omnipresent then we need to go to its
                desktop */
             if (!here && t->desktop == DESKTOP_ALL)
-                screen_set_desktop(self->id, FALSE);
+                screen_set_desktop(self->id, FALSE, TRUE);
         }
         else
-            screen_set_desktop(self->id, TRUE);
+            screen_set_desktop(self->id, TRUE, TRUE);
     }
 }
 
diff --git a/openbox/client_list_menu.c b/openbox/client_list_menu.c
index f3df2a5..0b5af55 100644
--- a/openbox/client_list_menu.c
+++ b/openbox/client_list_menu.c
@@ -106,10 +106,10 @@ static void desk_menu_execute(ObMenuEntry *self, ObMenuFrame *f,
         /* if the window is omnipresent then we need to go to its
            desktop */
         if (!here && t->desktop == DESKTOP_ALL)
-            screen_set_desktop(self->id, FALSE);
+            screen_set_desktop(self->id, FALSE, TRUE);
     }
     else
-        screen_set_desktop(self->id, TRUE);
+        screen_set_desktop(self->id, TRUE, TRUE);
 }
 
 static void desk_menu_destroy(ObMenu *menu, gpointer data)
diff --git a/openbox/event.c b/openbox/event.c
index cf089b6..d9d60a4 100644
--- a/openbox/event.c
+++ b/openbox/event.c
@@ -768,7 +768,7 @@ static void event_handle_root(XEvent *e)
                                   "a timestamp");
                 else
                     event_sourcetime = e->xclient.data.l[1];
-                screen_set_desktop(d, TRUE);
+                screen_set_desktop(d, TRUE, TRUE);
             }
         } else if (msgtype == OBT_PROP_ATOM(NET_NUMBER_OF_DESKTOPS)) {
             guint d = e->xclient.data.l[0];
diff --git a/openbox/moveresize.c b/openbox/moveresize.c
index 3a98db3..a776b7c 100644
--- a/openbox/moveresize.c
+++ b/openbox/moveresize.c
@@ -611,7 +611,7 @@ static gboolean edge_warp_delay_func(gpointer data)
         d = screen_find_desktop(screen_desktop, edge_warp_dir, TRUE, FALSE);
         if (d != screen_desktop) {
             if (config_mouse_screenedgewarp) edge_warp_move_ptr();
-            screen_set_desktop(d, TRUE);
+            screen_set_desktop(d, TRUE, TRUE);
         }
     }
     edge_warp_odd = !edge_warp_odd;
diff --git a/openbox/screen.c b/openbox/screen.c
index ffe74a0..5e69a32 100644
--- a/openbox/screen.c
+++ b/openbox/screen.c
@@ -433,13 +433,13 @@ void screen_startup(gboolean reconfig)
                        NET_CURRENT_DESKTOP, CARDINAL, &d) &&
         d < screen_num_desktops)
     {
-        screen_set_desktop(d, FALSE);
+        screen_set_desktop(d, FALSE, TRUE);
     } else if (session_desktop >= 0)
         screen_set_desktop(MIN((guint)session_desktop,
-                               screen_num_desktops), FALSE);
+                               screen_num_desktops), FALSE, TRUE);
     else
         screen_set_desktop(MIN(config_screen_firstdesk,
-                               screen_num_desktops) - 1, FALSE);
+                               screen_num_desktops) - 1, FALSE, TRUE);
     screen_last_desktop = screen_desktop;
 
     /* don't start in showing-desktop mode */
@@ -553,7 +553,7 @@ void screen_set_num_desktops(guint num)
 
     /* change our desktop if we're on one that no longer exists! */
     if (screen_desktop >= screen_num_desktops)
-        screen_set_desktop(num - 1, TRUE);
+        screen_set_desktop(num - 1, TRUE, TRUE);
 }
 
 static void screen_fallback_focus(void)
@@ -604,7 +604,7 @@ static gboolean last_desktop_func(gpointer data)
     return FALSE; /* don't repeat */
 }
 
-void screen_set_desktop(guint num, gboolean dofocus)
+void screen_set_desktop(guint num, gboolean dofocus, gboolean show_popup)
 {
     GList *it;
     guint previous;
@@ -689,8 +689,8 @@ void screen_set_desktop(guint num, gboolean dofocus)
 
     ob_debug("Moving to desktop %d", num+1);
 
-    if (ob_state() == OB_STATE_RUNNING)
-        screen_show_desktop_popup(screen_desktop, FALSE);
+    if (show_popup && ob_state() == OB_STATE_RUNNING)
+        screen_show_desktop_popup(screen_desktop, FALSE, TRUE);
 
     /* ignore enter events caused by the move */
     ignore_start = event_start_ignore_all_enters();
@@ -941,7 +941,7 @@ static gboolean hide_desktop_popup_func(gpointer data)
     return FALSE; /* don't repeat */
 }
 
-void screen_show_desktop_popup(guint d, gboolean perm)
+void screen_show_desktop_popup(guint d, gboolean perm, gboolean center)
 {
     const Rect *a;
 
@@ -949,8 +949,12 @@ void screen_show_desktop_popup(guint d, gboolean perm)
     if (!config_desktop_popup_time) return;
 
     a = screen_physical_area_primary(FALSE);
-    pager_popup_position(desktop_popup, CenterGravity,
-                         a->x + a->width / 2, a->y + a->height / 2);
+    if (center)
+        pager_popup_position(desktop_popup, CenterGravity,
+                             a->x + a->width / 2, a->y + a->height / 2);
+    else
+        pager_popup_position(desktop_popup, NorthGravity,
+                             a->x + a->width / 2, a->y);
     pager_popup_icon_size_multiplier(desktop_popup,
                                      (screen_desktop_layout.columns /
                                       screen_desktop_layout.rows) / 2,
diff --git a/openbox/screen.h b/openbox/screen.h
index a6a3995..af1aeb2 100644
--- a/openbox/screen.h
+++ b/openbox/screen.h
@@ -66,7 +66,7 @@ void screen_resize(void);
 /*! Change the number of available desktops */
 void screen_set_num_desktops(guint num);
 /*! Change the current desktop */
-void screen_set_desktop(guint num, gboolean dofocus);
+void screen_set_desktop(guint num, gboolean dofocus, gboolean show_popup);
 /*! Add a new desktop either at the end or inserted at the current desktop */
 void screen_add_desktop(gboolean current);
 /*! Remove a desktop, either at the end or the current desktop */
@@ -80,7 +80,7 @@ guint screen_find_desktop(guint from, ObDirection dir,
              screen_hide_desktop_popup().  Otherwise it will hide after a
              delay.
  */
-void screen_show_desktop_popup(guint d, gboolean permanent);
+void screen_show_desktop_popup(guint d, gboolean permanent, gboolean center);
 /*! Hide it */
 void screen_hide_desktop_popup(void);
 

Вроде очевидная фича, странно, что до сих пор нигде нет. Или это я в танке, и в каких-то других WM такое есть?

 

geekless
()

[когда коту делать нечего] Запуск agetty как демона

Форум — Development

Ну по за головку вы уже поняли, что в этом треде какая-то нездоровая фигня. :) К делу: иксы-то быстро стартуют, а вот виртуальные консоли прочухиваются только после того, как все демоны поднимутся. Надоело мне это, да и в огород любителям systemd надо кинуть новый булыжник. Итак. Подопытный: Арчлинукс. Место действия: несчастный комп моей девушки. Задача: запуск agetty как службы.

Собственно, сам демон (осторожно, быдлокод) /root/agettyd:

#!/bin/bash

if [ -n "$pidfile" ] ; then
	echo -n $$ > "$pidfile"
fi

while true ; do
	coproc setsid bash <<-XXX
		exec /sbin/agetty -8 -s 38400 "$tty" linux
	XXX
	trap 'kill ${COPROC_PID} ; exit $?' INT TERM EXIT
	wait ${COPROC_PID}
	trap - INT TERM EXIT
done

Старт/стоп-скрипт /etc/rc.d/agetty:

#!/bin/bash

. /etc/rc.conf
. /etc/rc.d/functions

tty="`echo "$0" | egrep -o -- '-[a-zA-Z0-9]+$' | cut -d- -f2`"

if [[ -z "$tty" ]] ; then
	tty=tty1
fi

daemonname="agetty-${tty}"

pidfile="/run/${daemonname}.pid"
if [[ -r $pidfile ]]; then
  read -r PID < "$pidfile"
  if [[ ! -d /proc/$PID ]]; then
    # stale pidfile
    unset PID
    rm -f "$pidfile"
  fi
fi

case "$1" in
  start)
    stat_busy "Starting ${daemonname}"
    [ -z "$PID" ] && (
	export tty
	export pidfile
	/root/agettyd &
    ) &> /dev/null < /dev/null
    if [ $? -gt 0 ]; then
      stat_fail
    else
      add_daemon lxdm
      stat_done
    fi
    ;;
  stop)
    stat_busy "Stopping ${daemonname}"
    [ ! -z "$PID" ] && kill $PID &> /dev/null
    if [ $? -gt 0 ]; then
      stat_fail
    else
      rm_daemon lxdm
      stat_done
    fi
    ;;
  restart)
    $0 stop
    sleep 3
    $0 start
    ;;
  *)
    echo "usage: $0 {start|stop|restart}"
esac
exit 0

Симлинки:

# ls -l /etc/rc.d/agetty*
-rwxr-xr-x 1 root root 939 янв.   7 18:12 /etc/rc.d/agetty
lrwxrwxrwx 1 root root   6 янв.   7 17:34 /etc/rc.d/agetty-tty3 -> agetty
lrwxrwxrwx 1 root root   6 янв.   7 17:33 /etc/rc.d/agetty-tty4 -> agetty
lrwxrwxrwx 1 root root   6 янв.   7 17:34 /etc/rc.d/agetty-tty5 -> agetty
lrwxrwxrwx 1 root root   6 янв.   7 17:34 /etc/rc.d/agetty-tty6 -> agetty

Добавляем службы в /etc/rc.conf:

# grep DAEMONS /etc/rc.conf
# DAEMONS
DAEMONS=(syslog-ng @dbus @network @lxdm agetty-tty3 agetty-tty4 agetty-tty5 agetty-tty6 alsa @crond preload @ppp iptables @verynice dnsmasq @openntpd)

Убираем соответствующие строки из /etc/inittab:

# grep tty /etc/inittab 
c1:2345:respawn:/sbin/agetty -8 -s 38400 tty1 linux
c2:2345:respawn:/sbin/agetty -8 -s 38400 tty2 linux
#c3:2345:respawn:/sbin/agetty -8 -s 38400 tty3 linux
#c4:2345:respawn:/sbin/agetty -8 -s 38400 tty4 linux
#c5:2345:respawn:/sbin/agetty -8 -s 38400 tty5 linux
#c6:2345:respawn:/sbin/agetty -8 -s 38400 tty6 linux

Первые две консоли остались в inittab. Первая понятно почему — потому что там идут стартовые логи, и agetty должен запускаться только после полной инциализации системы. Ну а вторая просто так. И в целом их не стоит оттуда убирать, потому что демоны могут быть убиты, а вот процессы, порождаемые init — штука более надежная.

Выдохнул.

geekless
()

Какой командой detach-нуться от контроллирующего терминала?

Форум — General

Собственно, сабж.

Имею ввиду, не системный вызов, а команду командной строки. Чтобы можно было запустить как command some-command, где command - разыскиваемая команда, создающая новую сессию, чтоб отцепиться от контроллирующего терминала, а затем запускающая some-command.

geekless
()

Какие эмуляторы терминала позволяют произвольным образом переопределить keymap?

Форум — General

Как известно, программы, работающие в терминале, ничего не знают про модификаторы. А жаль. В связи с этим вопрос: какие эмуляторы терминала позволяют произвольным образом настроить отображение хоткей -> генерируемая последовательность?

Очень хотелось бы сделать управление рядом программ, таких как tmux, более человечным. Например, заставить терминал генерировать управляющий префикс tmux-а, если удерживается модификатор:

Mod4 + Up -> ^B^[[A
Mod4 + Down -> ^B^[[B
Mod4 + Right -> ^B^[[C
Mod4 + Left -> ^B^[[D

Потому что играть на пианино с Ctrl не айс. (Емаксеры не поймут.)

Также можно задействовать дублирующиеся сочетания клавиш. Например, Esc == ^[. Но т.к. кнопка Esc на клавиатуре уже имеется, нажатие Ctrl+[ можно переопределить под что-нибудь более полезное. Можно задействовать «пустые» сочетания, такие как Ctrl+' и т.п. Ну вы поняли идею.

geekless
()

[dolphin][nautilus][thunar][pcmanfm] Давайте унифицируем ключи запуска, что ли

Форум — Development

Что делают ФМы со своими параметрами запуска сейчас:

  • thunar: при указании пути к файлу (не каталогу) открывает этот файл в соответствующей программе, т.е. делает xdg-open.
  • pcmanfm: аналогично.
  • nautilus: при указании пути к файлу (не каталогу) открывает ролительский каталог и ставит выделение на файл.
  • dolphin: при указании пути к файлу (не каталогу) делает xdg-open, но при этом еще и своё окно зачем-то открывает. При указании дополнительно ключа --select открывает ролительский каталог и ставит выделение на файл.

Что предлагаю: а давайте этот разнобой приведем в порядок. Пусть при указании пути к файлу все ФМ делают xdg-open, а если указан ключ --select, то открывают родительский каталог и ставят выделение на файл.

Собственно, я собираюсь патчить pcmanfm в направлении ключа --select. Подумал, что thunar-у и nautilus-у подобная функциональность тоже лишней не будет. Их ковырять я не буду, но если кто захочет...

 , , ,

geekless
()

[линуксокапец][вещества] ReactOSа тред

Форум — Talks

Навеяно очередной новостью о ReactOS. Вообще я к ReactOS скептически отношусь, но допустим... Допустим они создадут рабочее ядро и стек системных библиотек. (Уже смешно. Ну я ж сказал: «допустим»!) Драйвера работают, подсистема winapi работает.

Дальше что. Берем эту базовую систему. Ставим туда пакетный менеджер. Вроде ж были какие-то попытки прикрутить сбоку к виндам управление пакетами... Ну не суть, пакетный менеджер — не сложный софт, какой-нибудь портируют с линукса, если что. Делаем, как нормальные люди, репозиторий, собираем кучу свободного софта — его ж реально дофигища для винды, если считать и кросплатформенный, и windows-only. Фриварный софт тоже можно добавить в репы, если без фанатизма. Вместо оболочки проводника ставим кеды. Цигвин не забываем добавить в коробку для ценителей, да еще иксовый сервер.

Получаем windows-совместимую полностью свободную систему с кучей софта из коробки и с более-менее привычной средой как для виндузятника, так и для юниксойдов. Хомячки счастливы. MS в шоке. Вирусописатели хватаются за головы. Организации в срочном порядке переводят свои windows-машины на реактос, ибо 1Сы, фотошопы и автокады работают без проблем. В мире наступает светлое будущее. Джобс восстаёт из могилы и разгоняет нахрен Яббл, чтоб не позорились... хотя нет, это уже из другой истории.

Дискасс.

 ,

geekless
()

[мысль][FR] Как бороться со спамерами

Форум — Linux-org-ru

Навеяно очередным плодящим треды ботом.

А давайте просто запретим постинг тредов с пустых аккаунтов, если в треде есть ссылка? (Может быть, за исключением ссылок на сайты по вайтлисту, типа пастбина, картинкохостингов и т.п.)

geekless
()

[не про +1] Передача настроек через GET-запрос.

Форум — Linux-org-ru

Такие вопросы:

1. Есть ли на ЛОРе возможность устанавливать на сеанс настройки через GET-запрос к произвольной странице? Т.е. чтобы можно было зайти по ссылке типа такой:

http://www.linux.org.ru/tracker.jsp?style=black&messages=30&photos=0&showSocial=0
И сайт засунул бы эти параметры в сеансовые куки и использовал их вместо тех, что указаны в настройках профиля.

2. Если нет, то не найдётся ли желающих добавить такую возможность?

Use case, полагаю, очевиден: чтобы с мобильноо клиента юзать иные настройки, нежели те, которые удобны на нормальной системе.

Скажем, у меня настроено отображение 500 постов на странице, и на компе это удобно, но на телефоне пока такая страница прогрузится и отрендерится, можно успеть поседеть.

geekless
()

[tuxonice][linux-pf] Не работает USB мышь после выхода их suspend.

Форум — General

Он нечего делать настраиваю на домашнем компе suspend to disk. Проблема в следующем: после выхода из suspend не работает USB мышь. Вернее, работает неверно: положение мыши обновляется примерно раз в секунду, не чаще.

При вытаскивании мыши из порта USB и последующем втыкивании обратно, устройство не опознаётся системой (ни строчки не появляется ни в логе иксов, ни в логе ядра, будто вообще ничего не подключено в порт). Если воткнуть в другой порт, мышь нормально опознаётся и работает. При этом первый порт остётся невсприимчив только к мыши — если туда флешку воткнуть, она нормально опознаётся и работает.

Если снова выполнить suspend, то в следующий раз мышь заглючит уже во втором порте, а после перевставки в первый начнёт работать нормально.

Ядро linux-pf-p4 3.1.1-7.

Куда копать?

 ,

geekless
()

[мы идиоты][внезапно][опять] Всплывающие меню + глобальные хоткеи = ?

Форум — Talks

Господа, все мы, кто недавно рассуждал о невозможности обработки глобальных хоткеев в то время, когда открыто вплывающее меню, — у меня для нас пренеприятнейшее известие. Мы все — идиоты. Увы, но это правда.

Два факта:

  • В приложениях, написанных на Fox toolkit, всплывающие меню не захватывают клавиатуру и не блокируют работу хоткеев. При этом переключение на другое приложение оставляет меню открытым, но не реагирующим на клавиатуру. При возврате в окно приложения, открывшего меню, меню снова начинает реагировать на клавиатуру.
  • В Firefox (который, вроде бы, юзает gtk, не?) меню также не блокирует глобальные хоткеи. Видимое отличие от Fox toolkit тут в том, что при потере окном файрфокса фокуса, меню исчезает.

Итак. Если мы подумаем, то поймём простую вещь: если меню открывает то приложение, которое имеет в этот момент фокус ввода, то захват клавиатуры не обязателен. Тулкит в этом случае сам может перенаправлять сообщения из сфокусированного окна окну меню.

Ну что, есть желающие написать патч для gtk? :D

 ,

geekless
()

[awk][глупый вопрос] Захватить столбцы «от N и до конца строки»

Форум — General

Имеются данные в виде таблицы из N столбцов. При этом N-1 столбцов не могут содержать пробел и, следовательно, нормально парсятся awk. N-й же столбец может содержать пробелы (и вообще что угодно, кроме перевода строки). Таким образом, надо сказать awk «считай, что во входном потоке может быть не больше N столбцов и всё, что после N-1-го разделителя, помещай в один столбец».

Это возможно? Погрепал ман и помучил гугл, но нужную инфу найти не осилил.

 ,

geekless
()

RSS подписка на новые темы