URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID15
Нить номер: 4256
[ Назад ]

Исходное сообщение
"Проблемы с патчем dwm runorraise"

Отправлено Shadowtalker , 09-Сен-15 12:01 
Всем привет! Пытаюсь подогнать под свои задачи dwm, цель-запускалка трёх приложений, ничего более. Всего 3 кнопки, допустим, F1, F2, F3 по нажатии должны запускать каждая своё приложение, а если оно уже запущено-переходить к нему. У каждого приложения свой отдельный тайтл и они всё время должны быть развёрнуты максимально. Насколько я понял, патч runorraise делает именно то, что мне нужно, но у меня не получается его установить. Делаю всё по инструкции, но:

patch -p1 < ../dwm-6.1-runorraise.diff --dry-run
can't find file to patch at input line 3
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|--- dwm.c.orig  2013-11-29 13:58:49.673588564 +0100
|+++ dwm.c   2013-11-23 22:56:49.725007370 +0100
--------------------------
File to patch: dwm.c
checking file dwm.c
Hunk #1 FAILED at 193.
patch: **** malformed patch at line 41: }

Пытаюсь вручную вкорячить строки куда надо, но програмист на си из меня не очень, хотя патч там не большой:

-- dwm.c.orig  2013-11-29 13:58:49.673588564 +0100
+++ dwm.c   2013-11-23 22:56:49.725007370 +0100
@@ -193,6 +193,7 @@                                                                                                            
static void resizemouse(const Arg *arg);
static void restack(Monitor *m);
static void run(void);
+static void runorraise(const Arg *arg);
static void scan(void);
static Bool sendevent(Client *c, Atom proto);
static void sendmon(Client *c, Monitor *m);
@@ -1349,6 +1350,30 @@                                                                                                        
}

void
+runorraise(const Arg *arg) {
+    char *app = ((char **)arg->v)[4];
+    Arg a = { .ui = ~0 };
+    Monitor *mon;
+    Client *c;
+    XClassHint hint = { NULL, NULL };
+    /* Tries to find the client */
+    for (mon = mons; mon; mon = mon->next) {
+        for (c = mon->clients; c; c = c->next) {
+            XGetClassHint(dpy, c->win, &hint);
+            if (hint.res_class && strcmp(app, hint.res_class) == 0) {
+                a.ui = c->tags;
+                view(&a);
+                focus(c);
+                XRaiseWindow(dpy, c->win);
+                return;
+            }
+        }
+    }
+    /* Client not found: spawn it */
+    spawn(arg);
+}
+
+void
scan(void) {
    unsigned int i, num;
}

После вкорячивания пытаюсь перекомпилировать, но:

make clean install
cleaning                                                                                                              
dwm build options:                                                                                                            
CFLAGS   = -std=c99 -pedantic -Wall -Os -I. -I/usr/include -I/usr/X11R6/include -DVERSION="6.0" -DXINERAMA                            
LDFLAGS  = -s -L/usr/lib -lc -L/usr/X11R6/lib -lX11 -L/usr/X11R6/lib -lXinerama                                                                  
CC       = cc                                                                                                                                    
CC dwm.c                                                                                                                                          
dwm.c: In function ‘keypress’:                                                                                                                    
dwm.c:1088:2: warning: ‘XKeycodeToKeysym’ is deprecated (declared at /usr/include/X11/Xlib.h:1695) [-Wdeprecated-declarations]                                
dwm.c: At top level:                                                                                                                                          
dwm.c:1450:1: warning: ‘runorraise’ defined but not used [-Wunused-function]                  

Компилится нормально, но ничего нового в поведении dwm не замечаю, функция очевидно не используется и как это поправить я не представляю.
                                                          
Подскажите пожалуйста, куда копать? Патч взят с офф сайта, других я не нашёл. Если есть возможность провернуть вышеописанное без патчей, буду благодарен любой подсказке.


Содержание

Сообщения в этом обсуждении
"Проблемы с патчем dwm runorraise"
Отправлено eRIC , 09-Сен-15 13:21 
https://github.com/kmikolaj/dwm/blob/master/24-dwm-6.1-runor... пробовали?

"Проблемы с патчем dwm runorraise"
Отправлено and , 09-Сен-15 16:54 
> Подскажите пожалуйста, куда копать?
> dwm.c:1450:1: warning: ‘runorraise’ defined but not used [-Wunused-function]

ваша функция определена, но не используется. по идее нужно куда нибудь вкорячить в код вызов runorraise(arg).


"Проблемы с патчем dwm runorraise"
Отправлено Shadowtalker , 11-Сен-15 17:42 
Решил вопрос при помощи термоядерного костыля, каждое приложение запускает bash-файл вида:
#!/bin/bash

if [ -z `pgrep $appname` ]
then $appname
fi

Спасибо всем попытавшимся.