Standard-Terminal aufrufen

Antworten
compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Standard-Terminal aufrufen

Beitrag von compmgmt »

Hi,

Ich habe eine Konsolenanwendung, die von einem GUI Programm aufgerufen wird. Problem: Wenn ich das CLI Programm direkt aufrufe, wird mir logischerweise kein Terminal angezeigt. Nun meine Frage: Gibt es eine Möglichkeit das Standard-Terminal aufzurufen oder zumindest den Pfad des Terminals auszulesen um es dann aufzurufen?

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

Mathias
Beiträge: 6167
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Standard-Terminal aufrufen

Beitrag von Mathias »

Dieser Code ruft fpc in einem Terminal auf.

Code: Alles auswählen

var
  s:String;
begin
  RunCommand('xterm', ['fpc'],s );
end

Hier hat es noch mehr: http://wiki.freepascal.org/Executing_External_Programs
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Standard-Terminal aufrufen

Beitrag von m.fuchs »

xterm muss nicht installiert sein. Auf einem aktuellen Linux Mint/MATE ist es standardmäßig nicht dabei.

AFAIK sollte der Aufruf von x-terminal-emulator immer das passende grafische Terminal starten. Kann das noch jemand bestätigen?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Mathias
Beiträge: 6167
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Standard-Terminal aufrufen

Beitrag von Mathias »

Auf einem aktuellen Linux Mint/MATE ist es standardmäßig nicht dabei.

Ich meinte, bei meinem Mint musste ich es nicht nachinstallieren. :roll:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: Standard-Terminal aufrufen

Beitrag von compmgmt »

m.fuchs hat geschrieben:AFAIK sollte der Aufruf von x-terminal-emulator immer das passende grafische Terminal starten. Kann das noch jemand bestätigen?
Geht leider nicht. Ich habe es jetzt einfach folgendermaßen gelöst: Bevor die CLI-Anwendung gestartet wird, wird der Benutzer mittels InputQuery dazu aufgefordert, den Pfad des Standard Terminals einzugeben. Dabei ist natürlich das zuletzt eingegebene schon als default drin.

Sollte dennoch jemand wissen, wie es gehen könnte, gerne schreiben :)

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

Mathias
Beiträge: 6167
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Standard-Terminal aufrufen

Beitrag von Mathias »

Für eine Konsole gäbe es noch eine sehr elegante Lösung, NetBeans betet sie direkt in die GUI-Anwendung, siehe Anhang.
Aber wie dies geht, weis ich leider auch nicht. :oops:
Dateianhänge
Bildschirmfoto vom 2017-09-12 17-46-11.png
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: Standard-Terminal aufrufen

Beitrag von compmgmt »

Mathias hat geschrieben:Für eine Konsole gäbe es noch eine sehr elegante Lösung, NetBeans betet sie direkt in die GUI-Anwendung, siehe Anhang.
Aber wie dies geht, weis ich leider auch nicht. :oops:

Wie es geht, weiß ich (in der Theorie). Aber sich extra dafür einen Terminal Emulator schreiben, ist schon eine größere Sache. Ich werde mich vorerst mit dem oben beschriebenen zufrieden geben. Wenn ich mal Zeit und Lust habe, schreibe ich mir einen (allerdings mit sehr geringer Funktionalität).

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

Mathias
Beiträge: 6167
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Standard-Terminal aufrufen

Beitrag von Mathias »

Wie es geht, weiß ich (in der Theorie). Aber sich extra dafür einen Terminal Emulator schreiben, ist schon eine größere Sache. I

Ich dachte zuerst, dies wäre etwas eingebetetes, aber bei genauerer Betrachtung sieht, dies wirklich so aus, das eine eigene Emulation geschrieben wurde. Bezieht sich auf NetBeans.

Dies wäre sicher mal eine interessante Sache, eine Emulation selbst zu schreiben. Ein serielles Terminal ist sicher keine Hexerei, das muss man nur ESC-Sequenzen auswerten. Nur wie sieht es bei einem Terminal wie XTerm aus oder bei Telnet ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: Standard-Terminal aufrufen

Beitrag von compmgmt »

Mathias hat geschrieben:
Wie es geht, weiß ich (in der Theorie). Aber sich extra dafür einen Terminal Emulator schreiben, ist schon eine größere Sache. I

Ich dachte zuerst, dies wäre etwas eingebetetes, aber bei genauerer Betrachtung sieht, dies wirklich so aus, das eine eigene Emulation geschrieben wurde. Bezieht sich auf NetBeans.

Dies wäre sicher mal eine interessante Sache, eine Emulation selbst zu schreiben. Ein serielles Terminal ist sicher keine Hexerei, das muss man nur ESC-Sequenzen auswerten. Nur wie sieht es bei einem Terminal wie XTerm aus oder bei Telnet ?
An sich funktioniert so ein Terminal Emulator mit Streams. Und dank TProcess ist es auch recht einfach zumindest die Ausgabe anzuzeigen. Wie es mit der Eingabe funktioniert, hatte ich neulich erst im Wiki gelesen, hab es aber wieder vergessen :oops:

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

Antworten