diff options
author | XavierCLL | 2016-11-23 11:49:18 -0500 |
---|---|---|
committer | XavierCLL | 2016-11-23 11:49:18 -0500 |
commit | e825f88f24fead508674266838ada3dc395c031a (patch) | |
tree | 1cea5b7747277daaa7d506f1de7bff7023ee2771 /charm | |
parent | 1c9006ec319843d277e636433cb70a6074d8ba81 (diff) | |
download | aur-e825f88f24fead508674266838ada3dc395c031a.tar.gz |
Updated version to 2016.3
Diffstat (limited to 'charm')
-rwxr-xr-x | charm | 137 |
1 files changed, 69 insertions, 68 deletions
@@ -10,97 +10,98 @@ 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'~/.PyCharm2016.2/config' -SYSTEM_PATH = u'~/.PyCharm2016.2/system' - -args = [] -skip_next = False -for i, arg in enumerate(sys.argv[1:]): - if arg == '-h' or arg == '-?' or arg == '--help': - print(('Usage:\n' + - ' {0} -h |-? | --help\n' + - ' {0} [-l|--line line] file[:line]\n' + - ' {0} diff <left> <right>\n' + - ' {0} merge <local> <remote> [base] <merged>').format(sys.argv[0])) - exit(0) - elif arg == 'diff' and i == 0: - args.append(arg) - elif arg == 'merge' and i == 0: - args.append(arg) - elif arg == '-l' or arg == '--line': - args.append(arg) - skip_next = True - elif skip_next: - args.append(arg) - skip_next = False - else: - if ':' in arg: - file_path, line_number = arg.rsplit(':', 1) - if line_number.isdigit(): - args.append('-l') - args.append(line_number) - args.append(os.path.abspath(file_path)) +CONFIG_PATH = u'~/.PyCharm2016.3/config' +SYSTEM_PATH = u'~/.PyCharm2016.3/system' + +def print_usage(cmd): + print(('Usage:\n' + + ' {0} -h | -? | --help\n' + + ' {0} [-l|--line line] file[:line]\n' + + ' {0} diff <left> <right>\n' + + ' {0} merge <local> <remote> [base] <merged>').format(cmd)) + + +def process_args(argv): + args = [] + + skip_next = False + for i, arg in enumerate(argv[1:]): + if arg == '-h' or arg == '-?' or arg == '--help': + print_usage(argv[0]) + exit(0) + elif arg == 'diff' and i == 0: + args.append(arg) + elif arg == 'merge' and i == 0: + args.append(arg) + elif arg == '-l' or arg == '--line': + args.append(arg) + skip_next = True + elif skip_next: + args.append(arg) + skip_next = False + else: + if ':' in arg: + file_path, line_number = arg.rsplit(':', 1) + if line_number.isdigit(): + args.append('-l') + args.append(line_number) + args.append(os.path.abspath(file_path)) + else: + args.append(os.path.abspath(arg)) else: args.append(os.path.abspath(arg)) - else: - args.append(os.path.abspath(arg)) + return args -def launch_with_port(port, token): - found = False + +def try_activate_instance(args): + port_path = os.path.join(CONFIG_PATH, 'port') + token_path = os.path.join(SYSTEM_PATH, 'token') + if not (os.path.exists(port_path) and os.path.exists(token_path)): + return False + + with open(port_path) as pf, open(token_path) as tf: + port = int(pf.read()) + token = tf.read() s = socket.socket() s.settimeout(0.3) try: s.connect(('127.0.0.1', port)) - except: + except (socket.error, IOError): return False + found = False while True: try: - path_len = struct.unpack(">h", s.recv(2))[0] + path_len = struct.unpack('>h', s.recv(2))[0] path = s.recv(path_len) if os.path.abspath(path) == os.path.abspath(CONFIG_PATH): found = True break - except: - break + except (socket.error, IOError): + return False if found: - if args: - cmd = "activate " + token + '\0' + os.getcwd() + "\0" + "\0".join(args) - encoded = struct.pack(">h", len(cmd)) + cmd - s.send(encoded) - time.sleep(0.5) # don't close socket immediately + cmd = 'activate ' + token + '\0' + os.getcwd() + '\0' + '\0'.join(args) + encoded = struct.pack('>h', len(cmd)) + cmd + s.send(encoded) + time.sleep(0.5) # don't close the socket immediately return True return False -port_path = os.path.join(CONFIG_PATH, 'port') -token_path = os.path.join(SYSTEM_PATH, 'token') -if os.path.exists(port_path) and os.path.exists(token_path): - try: - f = open(port_path) - port = int(f.read()) - f.close() - - f = open(token_path) - token = f.read() - f.close() - - launch_with_port(port, token) - except: - type, value, traceback = sys.exc_info() - print('Cannot activate a running instance: ' + str(value)) -else: - print('No IDE instance has been found. New one will be started.') - if sys.platform == "darwin": - # OS X: RUN_PATH is *.app path - if len(args): - args.insert(0, "--args") - os.execvp("open", ["-a", RUN_PATH] + args) +def start_new_instance(args): + if sys.platform == 'darwin': + if len(args) > 0: + args.insert(0, '--args') + os.execvp('open', ['-a', RUN_PATH] + args) else: - # Unix common - bin_dir, bin_file = os.path.split(RUN_PATH) + bin_file = os.path.split(RUN_PATH)[1] os.execv(RUN_PATH, [bin_file] + args) + + +ide_args = process_args(sys.argv) +if not try_activate_instance(ide_args): + start_new_instance(ide_args) |