Windows Funktionen in Linux kompatible Funktionen umschreiben
-
@ness
doch gibt es, hat sich nur nicht durchgesetzt bisher http://www.catb.org/~esr/BROWSER/Aber so was kann man ja auch für sein Programm einfach festlegen.
-
rüdiger schrieb:
@ness
doch gibt es, hat sich nur nicht durchgesetzt bisher http://www.catb.org/~esr/BROWSER/Aber so was kann man ja auch für sein Programm einfach festlegen.
das erinnert mich an bisschen an einer Diskussion, die wir hier vor ein Paar Monaten über Elektra hatten
ich denke, der Grund, warum BROWSER sich nicht durchsetzt, sind Desktop Env. wie KDE oder Gnome, die ein eigenes "default browser" System haben.
-
Das Problem ist wohl eher, das GNOME oder KDE deine .profile ändern müssten, wenn du den Standard-Browser änderst und so tief greifen die ja nicht ins System ein.
Aber wie gesagt, einfach $BROWSER-implementieren und sagen das man es so erwartet. Habe ich zB für ein sawfish-script auch so gemacht.
-
Tut mir Leid,aber ihr schreibt immer von einfach,einfach,einfach
Für mich ist es irgendwie nicht so einfach.Ich kapier die Sache mit der Browser Variable irgendwie nicht.Auf der Seite steht ja z.B.
For example, on most Linux systems a good thing to do would be:BROWSER="netscape -raise -remote \"openURL(%s,new-window)\":lynx"
Aber die Browser Variable ist ja nicht vorhanden,aber wie/wo muss ich die genau anlegen?
-
du machst einfach in der Konsole
export BROWSER="dein Browser String"
(das kannst du auch in die Datei ~/.profile packen)und man: getenv(3) benutzt du um die Variable auszulesen.
-
Ich kriegs einfach nicht hin.Also ich beschreib mal Schritt für Schritt, wie ich vorgegangen bin:
1:Konsole öffnen und export BROWSER="/usr/bin/firefox" eingeben.Enter,keine Meldung wurde angezeigt.
2.Ich öffne die .cpp Datei und schreibe
getenv("BROWSER"); BROWSER="netscape -raise -remote \"openURL(Puffer)\":lynx";
funktioniert nicht.
3.Versuche etwas anderes und schreibe
hilfe=getenv("BROWSER"); hilfe="firefox -raise -remote \"openURL(Puffer)\":lynx"
Wie gesagt, klappt nicht (compiliert zwar im zweiten Versuch, aber wird dann beim Ausführen automatisch abgebrochen).
Was hab ich nun falsch gemacht?Ich werd aus dieser Browser Variable einfach nicht schlau.
-
Hab noch etwas vergessen.Hab natürlich auch das hier getestet:
BROWSER="netscape -raise -remote \"openURL(%s,new-window)\":lynx" BROWSER="firefox -raise -remote \"openURL(%s,new-window)\":lynx" hilfe="netscape -raise -remote \"openURL(%s,new-window)\":lynx"
-
int main() { char const *browser = getenv("BROWSER"); if(!browser) browser = "..." //... }
-
hilfe="netscape -raise -remote \"openURL(%s,new-window)\":lynx"
int main() { char const *browser = getenv("BROWSER"); if(!browser) browser = "netscape -raise -remote \"openURL(%s,new-window)\":lynx" //...
wenn ich vor dem
browser = "netscape -raise -remote \"openURL(%s,new-window)\":lynx
ein cout mache, dann wird mir nix ausgegeben.Mache ich danach ein cout, wird mir nur "netscape -raise -remote \"openURL(%s,new-window)\":lynx" ausgegeben.Ich denke mal, dass er das export BROWSER="/usr/bin/firefox" in der Konsole nicht angenommen hat.Gibt es noch eine andere Möglichkeit,dies fertzulegen?
-
lege ich mit export Browser='firefox' den standardbrowser fest und mache dan echo $BROWSER wird mir auch firefox als standard Browser angezeigt.Wenn ich die Konsole allerdings wieder schließe und eine neue aufmache und wieder echo $BROWSER eingebe,wird mir ein leeres Feld angezeigt.Irgendwie komisch.
-
nicht komisch. Umgebungsvariablen werden immer nur an Unterprozesse weitergegeben. Wie gesagt, schreib das export einfach in die ~/.profile oder ~/.bashrc
-
Alles klar,hab ich gemacht und es funktioniert.
Man einziges Problem ist jetzt nur noch, dass sich eben der Browser öffnet und die URL, die in Puffer gespeichert ist, aufruft.rüdiger schrieb:
int main() { char const *browser = getenv("BROWSER"); if(!browser) browser = "..." //... }
Aber was muss denn jetzt genau in brwoser="..." rengeschrieben werden?
Ich hab schon soviel ausprobiert aber nichts funktioniert.browser = "netscape -raise -remote \"openURL(%s,new-window)\":lynx" funktioniert nicht, auch in jeglichen von mir veränderten Varianten.
Das ist jetzt nur noch mein einziges Problem.
-
Funktioniert bei mir ohne Probleme, vielleicht passt ja der Pfad nicht oä?
#include <stdlib.h> #include <stdio.h> int main() { char const *browser = getenv("BROWSER"); if(!browser) browser = "asdf"; printf("%s\n", browser); }
~ % ./browser galeon --new-tab %s:links ~ % unset BROWSER ~ % ./browser asdf ~ %
-
nman schrieb:
Funktioniert bei mir ohne Probleme, vielleicht passt ja der Pfad nicht oä?
#include <stdlib.h> #include <stdio.h> int main() { char const *browser = getenv("BROWSER"); if(!browser) browser = "asdf"; printf("%s\n", browser); }
Wenn ich es so mache, dann gibt er mir nur /usr/bin/firfox aus anstatt den browser zu öffnen.
Und wenn ich
~ % ./browser galeon --new-tab %s:links ~ % unset BROWSER ~ % ./browser asdf ~ %
in die Konsole eingebe, dann werden nur Fehler angezeigt.
Ich versteh nicht, wieso das bei euch funktioniert aber bei mir nicht.Ich will dieses blöde Programm endlich mal fertig kriegen,aber bekomm es einfach nicht hin.
-
Mitdenken ist durchaus erlaubt. Natürlich sollst Du den String nicht ausgeben, sondern das Programm ausführen.
Und der zweite Absatz lässt mich ernsthaft daran zweifeln, ob Du wirklich eine Lösung suchst, oder einfach nur herumtrollst.
-
Ja tut mir leid,aber ich habe vor einer Woche das erste mal was mit Linux zutun gehabt.Deshalb kann ich mit diesem Code
~ % ./browser galeon --new-tab %s:links ~ % unset BROWSER ~ % ./browser asdf ~ %
auch nichts anfangen.deshalb fände ich es äußerst ansprechend,wenn du einen kurzen Kommentar dazu abgeben könntest, was das sein soll.An den Programm sitzt ich inzwischen auch schon seit letzter Woche dran.In Windows hab ich keinerlei Probleme gehabt mit den prog aber in Linux fängt es mich langsam an zu nerven.
-
das hat doch nichts mit Linux zu tun, das du nicht weißt was printf macht... Dir fehlen einfach absolut die Grundlagen und offensichtlich auch das Verständnis. Du musst den String natürlich auslesen und das %s mit der Webseite ersetzen die du aufrufen willst oder wenn kein %s vorhanden ist eben mit einem Space getrennt anhängen. Den resultierenden String musst du dann ausführen mit system. Steht eigentlich auch auf der BROWSER-Homepage. Da findest du vermutlich auch Beispielcode...
-
Danke,die Antwort hilft mir weiter.
Ich habe nicht gesagt, dass ich nicht weiß, was printf macht, sonder dass ich nicht weiß, wofür das hier sein soll~ % ./browser galeon --new-tab %s:links ~ % unset BROWSER ~ % ./browser asdf ~ %
Arbeite im Berufskolleg als auch privat ausschließlich mit cout.Trotzdem kenn ich die Funktionsweise von printf.
-
Ich kriegs einfach nicht hin....
Hab jetzt auch die Schnauze voll von dem Programm
So habs ichs gemacht...//Dynamischer Speicher wird angelegt char* dynamischesArray; char* Puffer=new char[200]; char const *browser = getenv("BROWSER"); dynamischesArray = new char[name.length()+1]; copy(name.begin(), name.end(), dynamischesArray); dynamischesArray[name.length()] = '\0'; Zeit=dynamischesArray[0]; j=2; for (int i=0;i<30;i++) { //Nur die Adresse(ab Stelle 3) ohne Zeit wird übergeben Puffer[i]=dynamischesArray[j]; j++; } if(!browser) browser="Puffer"; printf("%s\n", browser); system(browser); //system(printf("%s\n",browser)); usleep((Zeit*1000)); //usleep(10000); //Speicher wird wieder freigegeben delete[] dynamischesArray; delete[] Puffer; }
Ich gebs auf.Trotzdem nochmal Danke für die Mühe.
Gruß B.D
-
Programmierst Du C oder C++? Entscheide Dich doch bitte für eine der beiden Varianten.
Hier mal der relevante Code ein wenig kommentiert:
char const *browser = getenv("BROWSER"); if(!browser) browser="DefaultBrowserDenDuVerwendenMoechtest"; browserCommand = setzeURLein(erstesZeichenBisErsterDoppelpunkt(browser)); system(browser);
Wobei die Funktion
erstesZeichenBisErsterDoppelpunkt
einfach nur alles nach dem ersten Doppelpunkt abschneidet undsetzeURLein
das%s
durch den von Dir gewünschten URL ersetzt.Den Rest solltest Du alleine hinbekommen, viel mehr können wir Dir nicht mehr vorkauen.