diff options
author | XavierCLL | 2019-07-24 11:49:25 -0500 |
---|---|---|
committer | XavierCLL | 2019-07-24 11:49:25 -0500 |
commit | f82b905c72fd7e2e0e56152552f5b9554f816585 (patch) | |
tree | bb7d6ef22ce313050a5509826e74c8c30d0ed8c2 /charm | |
parent | d7aef519f09328eab7566c2cb31d6bea842ca200 (diff) | |
download | aur-f82b905c72fd7e2e0e56152552f5b9554f816585.tar.gz |
Updated to 2019.2
Diffstat (limited to 'charm')
-rwxr-xr-x[-rw-r--r--] | charm | 71 |
1 files changed, 48 insertions, 23 deletions
@@ -1,28 +1,53 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +import os import socket import struct import sys -import os -import time # see com.intellij.idea.SocketLock for the server side of this interface RUN_PATH = u'/opt/pycharm-professional/bin/pycharm.sh' -CONFIG_PATH = u'~/.PyCharm2019.1/config' -SYSTEM_PATH = u'~/.PyCharm2019.1/system' +CONFIG_PATH = u'~/.PyCharm2019.2/config' +SYSTEM_PATH = u'~/.PyCharm2019.2/system' def print_usage(cmd): print(('Usage:\n' + ' {0} -h | -? | --help\n' + - ' {0} [project_dir]\n' + - ' {0} [-l|--line line] [project_dir|--temp-project] file[:line]\n' + + ' {0} [project_dir] [-w|--wait]\n' + + ' {0} [-l|--line line] [project_dir|--temp-project] [-w|--wait] file[:line]\n' + ' {0} diff <left> <right>\n' + ' {0} merge <local> <remote> [base] <merged>').format(cmd)) +def write_to_sock(sock, str): + if sys.version_info[0] >= 3: str = str.encode('utf-8') + sock.send(struct.pack('>h', len(str)) + str) + + +def read_from_sock(sock): + len = struct.unpack('>h', sock.recv(2))[0] + return sock.recv(len).decode('utf-8') + + +def read_sequence_from_sock(sock): + result = [] + while True: + try: + str = read_from_sock(sock) + if str == '---': + break + result.append(str) + + except (socket.error, IOError) as e: + print("I/O error({0}): {1} ({2})".format(e.errno, e.strerror, e)) + traceback.print_exception(*sys.exc_info()) + return result + return result + + def process_args(argv): args = [] @@ -36,6 +61,8 @@ def process_args(argv): elif arg == '-l' or arg == '--line': args.append(arg) skip_next = True + elif arg == '-w' or arg == '--wait': + args.append('--wait') elif skip_next: args.append(arg) skip_next = False @@ -67,30 +94,28 @@ def try_activate_instance(args): return False s = socket.socket() - s.settimeout(0.3) + s.settimeout(1.0) try: s.connect(('127.0.0.1', port)) except (socket.error, IOError): return False - found = False - while True: - try: - path_len = struct.unpack('>h', s.recv(2))[0] - path = s.recv(path_len).decode('utf-8') - if os.path.abspath(path) == os.path.abspath(CONFIG_PATH): - found = True - break - except (socket.error, IOError): - return False + paths = read_sequence_from_sock(s) + found = CONFIG_PATH in paths if found: - cmd = 'activate ' + token + '\0' + os.getcwd() + '\0' + '\0'.join(args) - if sys.version_info[0] >= 3: cmd = cmd.encode('utf-8') - encoded = struct.pack('>h', len(cmd)) + cmd - s.send(encoded) - time.sleep(0.5) # don't close the socket immediately - return True + write_to_sock(s, 'activate ' + token + '\0' + os.getcwd() + '\0' + '\0'.join(args)) + + s.settimeout(None) + response = read_sequence_from_sock(s) + if response[0] != 'ok': + print('bad response: ' + response) + exit(1) + + if len(response) > 2: + print(response[2]) + + exit(int(response[1])) return False |