Source code for iterm2.socket

#!/usr/bin/python
# This is python 2.7 on macOS 10.12.

from __future__ import print_function

import api_pb2
import _future as future
import _rpcsocket as rpcsocket
import logging

[docs]class Connection(object): def __init__(self): self.last_future = None
[docs] def wait(self): if self.last_future is not None: self.last_future.get() self.last_future = None
[docs] def finish(self): self.ws.finish()
[docs] def connect(self, notification_handler): self.notification_handler = notification_handler; self.ws = rpcsocket.RPCSocket( self._handler, "ws://localhost:1912/", subprotocols = [ 'api.iterm2.com' ])
[docs] def request_hierarchy(self): return self._send_async(self._list_sessions_request(), lambda response: response.list_sessions_response)
def _list_sessions_request(self): request = api_pb2.Request() request.list_sessions_request.SetInParent() return request
[docs] def request_send_text(self, session_id, text): return self._send_async(self._send_text_request(session_id, text), lambda response: response.send_text_response)
def _send_text_request(self, session_id, text): request = api_pb2.Request() if session_id is not None: request.send_text_request.session = session_id request.send_text_request.text = text return request
[docs] def request_create_tab(self, profile=None, window=None, index=None, command=None): return self._send_async( self._create_tab_request(profile=profile, window=window, index=index, command=command), lambda response: response.create_tab_response)
def _create_tab_request(self, profile=None, window=None, index=None, command=None): request = api_pb2.Request() request.create_tab_request.SetInParent() if profile is not None: request.create_tab_request.profile_name = profile if window is not None: request.create_tab_request.window_id = window if index is not None: request.create_tab_request.tab_index = index if command is not None: request.create_tab_request.command = command return request
[docs] def request_split_pane(self, session=None, vertical=False, before=False, profile=None): return self._send_async( self._split_pane_request(session=session, vertical=vertical, before=before, profile=profile), lambda response: response.split_pane_response)
def _split_pane_request(self, session=None, vertical=False, before=False, profile=None): request = api_pb2.Request() request.split_pane_request.SetInParent() if session is not None: request.split_pane_request.session = session if vertical: request.split_pane_request.split_direction = api_pb2.SplitPaneRequest.VERTICAL else: request.split_pane_request.split_direction = api_pb2.SplitPaneRequest.HORIZONTAL; request.split_pane_request.before = False if profile is not None: request.split_pane_request.profile_name = profile return request;
[docs] def request_subscribe(self, subscribe, notification_type, session=None): return self._send_async( self._subscribe_request(subscribe, notification_type, session=session), lambda response: response.notification_response)
def _subscribe_request(self, subscribe, notification_type, session=None): request = api_pb2.Request() if session is not None: request.notification_request.session = session request.notification_request.subscribe = subscribe request.notification_request.notification_type = notification_type return request def _send_sync(self, request): return self.ws.sync_send_rpc(request.SerializeToString()) def _send_async(self, request, transform): f = future.Future(transform) self.ws.async_send_rpc(request.SerializeToString(), f.callback) self.last_future = f return f def _handler(self, message): response = api_pb2.Response() response.ParseFromString(message) if response.HasField('notification'): self.notification_handler(response.notification) return None else: logging.debug("Got a non-notification message" + str(response)) return response