Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
forked fromdrmgc/i3ipcpp

C++ interface to i3 ipc

License

NotificationsYou must be signed in to change notification settings

polybar/i3ipcpp

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

94 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

License

i3ipc++

An implementation of i3 IPC in C++11.

Requirements

  • cmake (>= 3.0)
  • C++11 compiler
  • sigc++ 2.0
  • jsoncpp

Using

Yet the only way of using is to add this repo as a submodule

git submodule add https://github.com/drmgc/i3ipcpp.git ./i3ipc++/

Then just type this in yourCMakeLists.txt:

...add_subdirectory(i3ipc++)include_directories(${I3IPCpp_INCLUDE_DIRS})link_directories(${I3IPCpp_LIBRARY_DIRS})...

And then just link:

...target_link_libraries(someapp${I3IPCpp_LIBRARIES})...

Usage

See also examples inexamples/ directory.

Connecting

#include<i3ipc++/ipc.hpp>i3ipc::connection  conn;

The connection will be established automaticly.

Event handling

First of all you need to declare the events you want to handle. As example we want to handle an binding and workspace events:

conn.subscribe(i3ipc::ET_WORKSPACE | i3ipc::ET_BINDING);

Then we need to connect to the signal handlers:

// Handler of WORKSPACE EVENTconn.signal_workspace_event.connect([](const i3ipc::workspace_event_t&  ev) {std::cout <<"workspace_event:" << (char)ev.type << std::endl;if (ev.current) {std::cout <<"\tSwitched to #" << ev.current->num <<" -\"" << ev.current->name <<'"' << std::endl;}});// Handler of binding eventconn.signal_binding_event.connect([](const i3ipc::binding_t&  b) {std::cout <<"binding_event:" << std::endl<<"\tcommand =\"" << b.command <<'"' << std::endl<<"\tinput_code =" << b.input_code << std::endl<<"\tsymbol =" << b.symbol << std::endl<<"\tinput_type =" <<static_cast<char>(b.input_type) << std::endl<<"\tevent_state_mask =" << std::endl;for (const std::string& s : b.event_state_mask) {std::cout <<"\t\t\"" << s <<'"' << std::endl;}});

Then we starting the event-handling loop

while (true) {conn.handle_event();}

Note: If you want to interract with event_socket or just want to prepare manually you can callconn.connect_event_socket() (if you want to reconnectconn.connect_event_socket(true)), but if by defaultconnect_event_socket() called on firsthandle_event() call.

Requesting

Also you can request some data from i3, as example barconfigs:

std::vector<std::string>  bar_configs = conn.get_bar_configs_list();

And then do with them something:

for (auto&  name : bar_configs) {std::shared_ptr<i3ipc::bar_config_t>  bc = conn.get_bar_config(name);// ... handling}

Sending commands

And, of course, you can command i3:

if (!conn.send_command("exit")) {throwstd::string("Failed to exit via command");}

Version i3 support

It is written according to thecurrent specification, so some of new features in IPC can be not-implemented. If there is some of them, please notice at issues page.

Documentation

The latest documentation you can findhere

Licensing

This library is licensed under under the MIT license, but it also usesJsonCpp (only for parsing i3's replies) and my header-only libraryauss

Backward compatibility note

While version is0.x there can be a lack of backward compatibility between minor releases, please see release notes.

About

C++ interface to i3 ipc

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C++95.3%
  • CMake4.7%

[8]ページ先頭

©2009-2025 Movatter.jp