exec works now
This commit is contained in:
parent
bf3c87c886
commit
f32096dcd2
3 changed files with 39 additions and 9 deletions
|
@ -156,6 +156,10 @@ epist::epist(char **argv, char *dpy_name, char *rc_file)
|
||||||
XKeysymToKeycode(getXDisplay(),
|
XKeysymToKeycode(getXDisplay(),
|
||||||
XStringToKeysym("4")),
|
XStringToKeysym("4")),
|
||||||
Mod1Mask | ControlMask | ShiftMask, 3));
|
Mod1Mask | ControlMask | ShiftMask, 3));
|
||||||
|
_actions.push_back(Action(Action::execute,
|
||||||
|
XKeysymToKeycode(getXDisplay(),
|
||||||
|
XStringToKeysym("F6")),
|
||||||
|
Mod1Mask));
|
||||||
activateGrabs();
|
activateGrabs();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,7 @@ using std::hex;
|
||||||
using std::dec;
|
using std::dec;
|
||||||
using std::string;
|
using std::string;
|
||||||
|
|
||||||
|
#include "../../src/BaseDisplay.hh"
|
||||||
#include "../../src/XAtom.hh"
|
#include "../../src/XAtom.hh"
|
||||||
#include "screen.hh"
|
#include "screen.hh"
|
||||||
#include "epist.hh"
|
#include "epist.hh"
|
||||||
|
@ -50,7 +51,8 @@ screen::screen(epist *epist, int number) {
|
||||||
_xatom = _epist->xatom();
|
_xatom = _epist->xatom();
|
||||||
_number = number;
|
_number = number;
|
||||||
_active = _clients.end();
|
_active = _clients.end();
|
||||||
_root = RootWindow(_epist->getXDisplay(), _number);
|
_info = _epist->getScreenInfo(_number);
|
||||||
|
_root = _info->getRootWindow();
|
||||||
|
|
||||||
// find a window manager supporting NETWM, waiting for it to load if we must
|
// find a window manager supporting NETWM, waiting for it to load if we must
|
||||||
int count = 20; // try for 20 seconds
|
int count = 20; // try for 20 seconds
|
||||||
|
@ -198,6 +200,10 @@ void screen::handleKeypress(const XEvent &e) {
|
||||||
case Action::changeWorkspace:
|
case Action::changeWorkspace:
|
||||||
changeWorkspace(it->number());
|
changeWorkspace(it->number());
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
case Action::execute:
|
||||||
|
execCommand("aterm");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// these actions require an active window
|
// these actions require an active window
|
||||||
|
@ -349,14 +355,30 @@ void screen::updateActiveWindow() {
|
||||||
else cout << "0x" << hex << (*_active)->window() << dec << endl;
|
else cout << "0x" << hex << (*_active)->window() << dec << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* use this when execing a command to have it on the right screen
|
void screen::execCommand(const std::string &cmd) const {
|
||||||
string dtmp = (string)"DISPLAY=" + display_name;
|
pid_t pid;
|
||||||
if (putenv(const_cast<char*>(dtmp.c_str()))) {
|
if ((pid = fork()) == 0) {
|
||||||
|
extern char **environ;
|
||||||
|
|
||||||
|
char *const argv[] = {
|
||||||
|
"sh",
|
||||||
|
"-c",
|
||||||
|
const_cast<char *>(cmd.c_str()),
|
||||||
|
0
|
||||||
|
};
|
||||||
|
// make the command run on the correct screen
|
||||||
|
if (putenv(const_cast<char*>(_info->displayString().c_str()))) {
|
||||||
cout << "warning: couldn't set environment variable 'DISPLAY'\n";
|
cout << "warning: couldn't set environment variable 'DISPLAY'\n";
|
||||||
perror("putenv()");
|
perror("putenv()");
|
||||||
}
|
}
|
||||||
*/
|
execve("/bin/sh", argv, environ);
|
||||||
|
exit(127);
|
||||||
|
} else if (pid == -1) {
|
||||||
|
cout << _epist->getApplicationName() <<
|
||||||
|
": Could not fork a process for executing a command\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void screen::cycleWindow(const bool forward, const bool alldesktops,
|
void screen::cycleWindow(const bool forward, const bool alldesktops,
|
||||||
|
|
|
@ -28,18 +28,21 @@ extern "C" {
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#include "window.hh"
|
#include "window.hh"
|
||||||
|
|
||||||
class epist;
|
class epist;
|
||||||
class screen;
|
class screen;
|
||||||
class XAtom;
|
class XAtom;
|
||||||
|
class ScreenInfo;
|
||||||
|
|
||||||
class screen {
|
class screen {
|
||||||
epist *_epist;
|
epist *_epist;
|
||||||
XAtom *_xatom;
|
XAtom *_xatom;
|
||||||
int _number;
|
int _number;
|
||||||
Window _root;
|
Window _root;
|
||||||
|
const ScreenInfo *_info;
|
||||||
|
|
||||||
std::string _wm_name;
|
std::string _wm_name;
|
||||||
|
|
||||||
|
@ -75,6 +78,7 @@ public:
|
||||||
void cycleWorkspace(const bool forward, const bool loop = true) const;
|
void cycleWorkspace(const bool forward, const bool loop = true) const;
|
||||||
void changeWorkspace(const int num) const;
|
void changeWorkspace(const int num) const;
|
||||||
void toggleShaded(const Window win) const;
|
void toggleShaded(const Window win) const;
|
||||||
|
void execCommand(const std::string &cmd) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // __screen_hh
|
#endif // __screen_hh
|
||||||
|
|
Loading…
Reference in a new issue