Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- 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'/Applications/IntelliJ IDEA.app'
- CONFIG_PATH = u'/Users/izawa/Library/Preferences/IntelliJIdea2016.2'
- SYSTEM_PATH = u'/Users/izawa/Library/Caches/IntelliJIdea2016.2'
- 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))
- else:
- args.append(os.path.abspath(arg))
- else:
- args.append(os.path.abspath(arg))
- def launch_with_port(port, token):
- found = False
- s = socket.socket()
- s.settimeout(0.3)
- try:
- s.connect(('127.0.0.1', port))
- except:
- return False
- while True:
- try:
- 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
- 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
- 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)
- else:
- # Unix common
- bin_dir, bin_file = os.path.split(RUN_PATH)
- os.execv(RUN_PATH, [bin_file] + args)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement