10 Stimmen

Mac OS X: Bringt (nicht gebündelte) GUI-Anwendungen in den Vordergrund, wenn sie von der Kommandozeile aus gestartet werden

Wenn ein GUI-Prozess vom OS X-Terminal aus gestartet wird, wird das Fenster im Hintergrund angezeigt, und Sie müssen command-tab verwenden, um ihm den Fokus zu geben.

Gibt es eine Möglichkeit, das Terminal dazu zu bringen, solchen GUIs automatisch den Fokus zu geben, nachdem sie gestartet wurden? Zum Beispiel (vorausgesetzt, gitk ist installiert):

% gitk

sollte die grafische Benutzeroberfläche starten und dann zu ihr wechseln.

Hinweis: Aus mehreren Gründen ist die Verwendung von open como diese Antwort ist keine allgemeine Lösung.

Aktualisierung: Um besser zu erklären, warum die open Methode nicht zufriedenstellend ist, finden Sie hier ein Beispiel für eine Bash-Sitzung (mit witzigen Kommentaren).

% cd /my_repo
% gitk

Ich warte darauf, dass die GUI erscheint ... jeden Tag ... oh, warte - sie ist schon offen. Ich habe es nur nicht bemerkt, weil es ein Fenster HINTER meinem Terminal geöffnet hat. Ich frage mich, wie lange ich hier noch sitzen und warten würde....

% open gitk
The file /my_repo/gitk does not exist.

Ach ja, natürlich.

% which gitk
/usr/bin/gitk
% open /usr/bin/gitk

Was zum ... es öffnete ein neues Terminalfenster, um gitk auszuführen, und zwar in meinem Home-Verzeichnis, nicht in /my_repo, also beschwert sich gitk, dass das aktuelle Verzeichnis kein Repository ist ...

4voto

Chris Page Punkte 17667

Müssen Sie es synchron aufrufen? Wenn nicht, können Sie es asynchron starten mit & und aktivieren Sie es dann mit osascript -e 'tell application "gitk" to activate' .

2voto

Wenn Sie speziell mit Gitk arbeiten, können Sie die Gitk-Datei bearbeiten, um dies zu erreichen. Ich habe eine Antwort auf dem Apple Stack Exchange veröffentlicht: https://apple.stackexchange.com/a/74917/35956

Sie können die gitk-Datei mit folgendem Befehl im Terminal finden

which gitk

In meiner Gitk-Datei habe ich eine Zeile gefunden, die wie folgt aussieht, ganz oben (Zeile 3)

exec wish "$0" -- "$@"

Ich habe es folgendermaßen geändert

exec wish "$0" -- "$@" & exec osascript -e "tell application \"Wish\" to activate"

Wenn ich gitk von der Kommandozeile aus ausführe, kommt das gitk-Fenster in den Vordergrund. Ein weiterer Nebeneffekt ist, dass es asynchron ausgeführt wird

1voto

Robert Wahler Punkte 11570

Sie können die Antwort von @chris page in eine Bash-Funktion verpacken und sie in Ihre .bashrc einfügen

function gitk() {
  command gitk "$@"&
  command osascript -e "delay .5" -e "tell application \"wish\" to activate"
}

Es sollte eine Möglichkeit geben, die Verzögerung durch eine Schleife und die Suche nach "wish" mit einer Zeitüberschreitung zu beseitigen.

HINWEIS: "Wish" ist der Fenstertitel, der auf meinem Mac für gitk angezeigt wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X