Aktualisieren
Es ist jetzt möglich , den Befehlszeilen-Launcher automatisch aus der JetBrains Toolbox zu erstellen. Das ist wie man es macht:
- Öffnen Sie das Toolbox-Fenster.
- Gehen Sie zum Zahnradsymbol oben rechts (dem Einstellungsfenster für die Toolbox selbst).
- Einschalten
Generate shell scripts
;
- Füllen Sie das
Shell script location
Textfeld mit dem Speicherort, an dem sich die Starter befinden sollen. Sie müssen dies manuell tun, es wird zu diesem Zeitpunkt nicht automatisch gefüllt!
Auf dem Mac könnte der Standort sein /usr/local/bin
. Für Anfänger können Sie einen beliebigen Pfad innerhalb der PATH-Variablen verwenden oder der PATH-Variablen in Ihrem Bash-Profil einen neuen Pfad hinzufügen. Verwenden echo $PATH
Sie diese Option, um zu sehen, welche Pfade vorhanden sind.
Hinweis ! Es hat bei mir nicht sofort funktioniert, ich musste ein wenig herumspielen, bevor die Skripte generiert wurden. Sie können zum Getriebe der IDEA (z. B. PyCharm) gehen und den Namen des Starters anzeigen / ändern. Für PyCharm lautet der Standardname pycharm
, Sie können ihn jedoch nach Belieben ändern.
Ursprüngliche Antwort
Wenn Sie die Toolbox nicht verwenden, können Sie trotzdem meine ursprüngliche Antwort verwenden.
~~ Aus irgendeinem Grund ist das Create Command Line Launcher
in 2019.1 nicht mehr verfügbar. ~~ Weil es jetzt Teil der JetBrains Toolbox ist
So können Sie das Skript selbst erstellen:
Wenn Sie den Befehl charm bereits verwendet haben type -a charm
, um das Skript zu finden. Ändern Sie die Pycharm-Version in den Dateipfaden. Beachten Sie, dass die Nummerierung in der ersten Variablen RUN_PATH
unterschiedlich ist. Sie müssen dies selbst im Verzeichnis nachschlagen.
RUN_PATH = u'/Users/boatfolder/Library/Application Support/JetBrains/Toolbox/apps/PyCharm-P/ch-0/191.6183.50/PyCharm.app'
CONFIG_PATH = u'/Users/boatfolder/Library/Preferences/PyCharm2019.1'
SYSTEM_PATH = u'/Users/boatfolder/Library/Caches/PyCharm2019.1'
Wenn Sie den Befehl charm zuvor noch nicht verwendet haben, müssen Sie ihn erstellen.
Erstellen Sie die Charm-Datei wie folgt: /usr/local/bin/charm
Fügen Sie dann diesen Code hinzu (ändern Sie die Versionsnummer wie oben beschrieben in Ihre Version):
import socket
import struct
import sys
import os
import time
RUN_PATH = u'/Users/boatfolder/Library/Application Support/JetBrains/Toolbox/apps/PyCharm-P/ch-0/191.6183.50/PyCharm.app'
CONFIG_PATH = u'/Users/boatfolder/Library/Preferences/PyCharm2019.1'
SYSTEM_PATH = u'/Users/boatfolder/Library/Caches/PyCharm2019.1'
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} 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 i == 0 and (arg == 'diff' or arg == 'merge' or arg == '--temp-project'):
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:
path = arg
if ':' in arg:
file_path, line_number = arg.rsplit(':', 1)
if line_number.isdigit():
args.append('-l')
args.append(line_number)
path = file_path
args.append(os.path.abspath(path))
return args
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
try:
with open(port_path) as pf:
port = int(pf.read())
with open(token_path) as tf:
token = tf.read()
except (ValueError):
return False
s = socket.socket()
s.settimeout(0.3)
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
if found:
cmd = 'activate ' + token + '\0' + os.getcwd() + '\0' + '\0'.join(args)
if sys.version_info.major >= 3: cmd = cmd.encode('utf-8')
encoded = struct.pack('>h', len(cmd)) + cmd
s.send(encoded)
time.sleep(0.5)
return True
return False
def start_new_instance(args):
if sys.platform == 'darwin':
if len(args) > 0:
args.insert(0, '--args')
os.execvp('/usr/bin/open', ['-a', RUN_PATH] + args)
else:
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)