[gelöst] C: Wert von Variable ändert sich nicht

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
RobertDebiannutzer
Beiträge: 385
Registriert: 16.06.2017 09:52:36

[gelöst] C: Wert von Variable ändert sich nicht

Beitrag von RobertDebiannutzer » 09.04.2018 18:22:43

Hallo,

ich modfiziere gerade ein bisschen an einem kleinen C-Programm herum. Meine bisherigen Modifikationen waren von Erfolg gekrönt, doch jetzt habe ich ein kleines Problemchen:

Am Anfang definiere ich die Variablen:

Code: Alles auswählen

char dotfiles[4] = {'/', '/', '+', '\0'};
char dotfilesend[4] = {'/', '/', 'q', '\0'};
int dotfilestoggle = 0;
Später im Programm habe ich dann folgendes case-statement:

Code: Alles auswählen

case CONTROL('n'):
	if ( dotfilestoggle == 0 ) {
	  dotfilestoggle = 1;
	  puts(dotfiles);
	}
	else {
	  dotfilestoggle = 0;
	  puts(dotfilesend);
	}
	return EXIT_SUCCESS;
Nur leider scheint die Variable "dotfilestoggle" immer den Wert Null zu behalten, denn ich bekommen im Fall "CONTROL('n')" (= Drücken der Punkt-Taste) immer nur "//+", also den Wert von der Variable "dotfiles". Dabei will ich immer abwechselnd die Werte von "dotfiles" und "dotfilesend" bekommen.
Kann mir jemand helfen, bitte?
Zuletzt geändert von RobertDebiannutzer am 11.04.2018 22:37:10, insgesamt 1-mal geändert.

Gunman1982
Beiträge: 923
Registriert: 09.07.2008 11:50:57
Lizenz eigener Beiträge: MIT Lizenz

Re: C: Wert von Variable ändert sich nicht

Beitrag von Gunman1982 » 09.04.2018 18:32:33

Und das case konstrukt hast du wo? In der main()?

RobertDebiannutzer
Beiträge: 385
Registriert: 16.06.2017 09:52:36

Re: C: Wert von Variable ändert sich nicht

Beitrag von RobertDebiannutzer » 09.04.2018 18:41:42

Nee, in einer von main() aufgerufenen anderen Funktion.
Alle anderen case-statements funktionieren. Nur hier switcht irgendwie die Variable "dotfilestoggle" nicht um...

Gunman1982
Beiträge: 923
Registriert: 09.07.2008 11:50:57
Lizenz eigener Beiträge: MIT Lizenz

Re: C: Wert von Variable ändert sich nicht

Beitrag von Gunman1982 » 09.04.2018 20:09:09

Hättest du die Möglichkeit die src KOMPLETT in nopaste zu kippen oder irgendwo zugänglich zu machen?

Oder besser noch: Selber debuggen :wink: hilft dir wahrscheinlich im Endeffekt viel mehr. Debiangdb

RobertDebiannutzer
Beiträge: 385
Registriert: 16.06.2017 09:52:36

Re: C: Wert von Variable ändert sich nicht

Beitrag von RobertDebiannutzer » 09.04.2018 21:33:43

Ich habe leider gar keine Erfahrung mit Debuggen, ich kann im Moment hauptsächlich Bash-Scripte schreiben...

Das Original-Projekt findet sich hier: https://github.com/adriangrigore/slmenu ... r/slmenu.c

Die Definitionen der Variablen habe ich in Zeile 61, mein case-statment in Zeile 384. Ich habe ansonsten praktisch nichts verändert (nur die zwei case-statements für die Pfeiltasten und eine dazugehörige Variable, die ich auch nach ganz oben in Zeile 61 gepackt habe).

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: C: Wert von Variable ändert sich nicht

Beitrag von Meillo » 09.04.2018 23:24:50

RobertDebiannutzer hat geschrieben: ↑ zum Beitrag ↑
09.04.2018 18:22:43
Am Anfang definiere ich die Variablen:

Code: Alles auswählen

char dotfiles[4] = {'/', '/', '+', '\0'};
char dotfilesend[4] = {'/', '/', 'q', '\0'};
int dotfilestoggle = 0;
Btw, das geht auch einfacher und lesbarer:

Code: Alles auswählen

char dotfiles[] = "//+";
char dotfilesend[] = "//q";
int dotfilestoggle = 0;
(Ein Char-Array und ein String sind das Gleiche. Die Laenge kennt der Compiler implizit, wenn direkt initialisiert wird. Da es Arrays und keine Zeiger sind, sind die Inhalte spaeter gleichermassen aenderbar. Ein String hat automatisch ein abschliessendes Null-Byte.)
Später im Programm habe ich dann folgendes case-statement:

Code: Alles auswählen

case CONTROL('n'):
	if ( dotfilestoggle == 0 ) {
	  dotfilestoggle = 1;
	  puts(dotfiles);
	}
	else {
	  dotfilestoggle = 0;
	  puts(dotfilesend);
	}
	return EXIT_SUCCESS;
Wenn es ein Toggle ist, dann verwende:

Code: Alles auswählen

puts(dotfilestoggle ? dotfiles : dotfilessend);  /* kompakter */
dotfilestoggle = !dotfilestoggle;  /* negieren eines boolean int */
Nur leider scheint die Variable "dotfilestoggle" immer den Wert Null zu behalten, denn ich bekommen im Fall "CONTROL('n')" (= Drücken der Punkt-Taste) immer nur "//+", also den Wert von der Variable "dotfiles". Dabei will ich immer abwechselnd die Werte von "dotfiles" und "dotfilesend" bekommen.
Kann mir jemand helfen, bitte?
Hast du eine Schleife, denn nach dem Aendern des Wertes muss dann natuerlich der geaenderte Wert genutzt werden? Ich sehe keine. Der von dir verlinkte Code ist auch nicht der, den du beschreibst. Den den Zeilen 61 und 384 finden sich nicht die von dir erwaehnten Codestuecke. Wenn du nach dem Aendern des Wertes natuerlich das Programm beendest, dann wird beim naechsten Start des Programms `dotfilestoggle' wieder mit 0 initialisiert werden. Ein Toggle, das ueber Programmaufrufe hinweg funktionieren soll, muss seinen Wert irgendwo auf der Festplatte speichern. Variablen werden beim Programmende freigegeben. Das ``return EXIT_SUCCESS'' ist ein sicheres Zeichen fuer das Problem.
Use ed once in a while!

RobertDebiannutzer
Beiträge: 385
Registriert: 16.06.2017 09:52:36

Re: C: Wert von Variable ändert sich nicht

Beitrag von RobertDebiannutzer » 09.04.2018 23:42:23

Herzlichen Dank für die Hilfe!
Meillo hat geschrieben: ↑ zum Beitrag ↑
09.04.2018 23:24:50
Btw, das geht auch einfacher und lesbarer:
Oh, das werde ich noch häufiger verwenden können, danke!
Meillo hat geschrieben: ↑ zum Beitrag ↑
09.04.2018 23:24:50
Der von dir verlinkte Code ist auch nicht der, den du beschreibst.
Nee, das ist das Original-Projekt, das ist nicht mein Code und auch nicht meine github-Seite. Ich habe mir das Programm runtergeladen und modifiziert. Meine Zeilenangaben beziehen sich darauf, an welche Stellen des Original-Codes ich die genannten Veränderungen eingefügt habe.
Meillo hat geschrieben: ↑ zum Beitrag ↑
09.04.2018 23:24:50
Hast du eine Schleife, denn nach dem Aendern des Wertes muss dann natuerlich der geaenderte Wert genutzt werden? Ich sehe keine. [...] Wenn du nach dem Aendern des Wertes natuerlich das Programm beendest, dann wird beim naechsten Start des Programms `dotfilestoggle' wieder mit 0 initialisiert werden. [...] Variablen werden beim Programmende freigegeben. Das ``return EXIT_SUCCESS'' ist ein sicheres Zeichen fuer das Problem.
Ohje, ich habe so einen Anfängerfehler gemacht... :oops:
Klar, das Programm funktioniert genauso wie dmenu (nur eben im Terminal) und startet natürlich jedes Mal neu! Ich habe daran gar nicht mehr gedacht, weil ich es in ein Script eingebunden habe und die Updates des Bildschirm-Inhaltes so schnell gehen (im Gegensatz zu dmenu, welches immer ganz kurz verschwindet). :facepalm:

Mal sehen, was ich jetzt mache...

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: C: Wert von Variable ändert sich nicht

Beitrag von Meillo » 10.04.2018 09:30:27

Noch besser (d.h. suckless-artiger):

Code: Alles auswählen

char *dotfilesmarker[] = {"//+", "//q"};
int dotfilestoggle = 0;

...

puts(dotfilesmarker[dotfilestoggle]);
dotfilestoggle = !dotfilestoggle;
Du veraenderst die beiden Strings nicht, also koennen sie unveraenderlich sein. Stecke sie in ein Array und indexiere das mit `dotfilestoggle'. Das reduziert den Code enorm.

... das hat natuerlich nichts mit deinem funktionalen Problem zu tun, sondern nur etwas mit dem Programmierstil.
Use ed once in a while!

RobertDebiannutzer
Beiträge: 385
Registriert: 16.06.2017 09:52:36

Re: C: Wert von Variable ändert sich nicht

Beitrag von RobertDebiannutzer » 10.04.2018 12:26:57

Schick, dann funktioniert das bei C mit den Arrays ja genau so wie bei bash!
Also in bash wäre es

Code: Alles auswählen

dotfilesmarker=("//+" "//q")
und in C ist es

Code: Alles auswählen

char *dotfilesmarker[] = {"//+", "//q"};
Danke! :THX:

Zu meinem funktionellen Problem:
Das Programm (es heißt slmenu) wird von meinem file-manager-script aufgerufen. Das hatte ich ursprünglich für dmenu geschrieben und für diesen Zweck nun etwas angepasst: http://nopaste.debianforum.de/40259
(die ersten 40 Zeilen sind fürs aktuelle Problem unwichtig)

Am schönsten fände ich es natürlich, wenn ich slmenu nicht immer erneut aufrufen müsste (das hat mich schon bei dmenu immer geärgert). Script-seitig habe ich das leider nie geschafft.
Vielleicht kann mir jemand eine Idee geben?

RobertDebiannutzer
Beiträge: 385
Registriert: 16.06.2017 09:52:36

Re: C: Wert von Variable ändert sich nicht

Beitrag von RobertDebiannutzer » 10.04.2018 15:27:42

Ich wollte noch anfügen, dass ich erstmal einen Workaround gemacht habe.
Ich habe alles so eingefügt, wie Du, Meillo, es vorgeschlagen hast. Nur der Toggle wird jetzt durch eine Option auf den Wert 1 gesetzt. D.h., wenn ich slmenu mit der von mir kreierten Option "-d" aufrufe. Dafür ist dann mein Script (s. meinen Nopaste-Link) verantwortlich. Ist "dotfilesmarker[0]" aktiviert worden, ruft mein Script slmenu immer mit der Option "-d" auf, sodass der toggle den richtigen Wert (also 1) hat und alles funktioniert.

Schöner wäre natürlich - auch für die Performance -, wenn ich slmenu nicht ständig neu starten müsste.
Ich habe es schon mit einer FIFO probiert, aber ohne Modifikation am Programm funktioniert es einfach nicht.
slmenu dürfte sich einfach nicht beenden, nachdem ich einen Eintrag ausgewählt habe, sondern müsste weiter laufen und erneut stdin lesen.
D.h., die Funktion main() müsste ein while-loop sein und EXIT_SUCCESS müsste durch continue ersetzt werden?
Mal so aus dem bash-script-Verständnis heraus vermutet...

Gunman1982
Beiträge: 923
Registriert: 09.07.2008 11:50:57
Lizenz eigener Beiträge: MIT Lizenz

Re: C: Wert von Variable ändert sich nicht

Beitrag von Gunman1982 » 10.04.2018 17:48:33

Vielleicht solltes
RobertDebiannutzer hat geschrieben: ↑ zum Beitrag ↑
10.04.2018 15:27:42
D.h., die Funktion main() müsste ein while-loop sein und EXIT_SUCCESS müsste durch continue ersetzt werden?
Du hast das switch case erweitert. Vielleicht solltest du dir anschauen wie die case Bedingungen bei den anderen Tasten terminiert werden. Und dir überlegen ob die Terminierung die du nimmst wirklich das ist was du willst.

Vielleicht findest du ja auch schon eine while-loop.

RobertDebiannutzer
Beiträge: 385
Registriert: 16.06.2017 09:52:36

Re: C: Wert von Variable ändert sich nicht

Beitrag von RobertDebiannutzer » 10.04.2018 18:24:52

Ich verstehe nicht ganz, was Du meinst...
In main() ist kein while-loop und der while-loop von run() hilft ja nix bei dem Problem, oder? Jedenfalls bringt es nichts, wenn ich einfach das EXIT_SUCCESS (bei meinem hinzugefügten case-statement) durch ein break oder continue ersetze (habe einfach mal blind probiert...)

Und mit dem Ersetzen von EXIT_SUCCESS meinte ich dann auch andere case-statements, insbesondere natürlich auch das für die Enter-Taste, welches ja benutzt wird, um die Auswahl nach stdout zu schreiben.
Danach dürfte sich dann einfach das Programm nicht beenden, sondern müsste den durch das script neu generierten stdin lesen...

Also Beispiel:
Ich starte das script. Nun wird slmenu mit einer Liste aller Dateien im Home-directory gestartet. Ich wähle "Bilder" aus und drücke "Enter". Nun beendet sich slmenu, das Script bekommt den Input "Bilder/", verarbeitet das, erstellt die Dateiliste für den Ordner "Bilder/" und startet slmenu mit diesem input neu.

Besser wäre ja (auch bei dmenu*):
Ich starte das script. slmenu wird im Hintergrund gestartet und wartet auf input. Erster Input ist die Liste aller Dateien im Home-directory. Ich wähle "Bilder/" aus und drücke "Enter". Nun beendet sich slmenu nicht, sondern schreibt nur "Bilder/" nach stdout. Script bekommt den Input "Bilder/", verarbeitet das, erstellt die Dateiliste für den Ordner "Bilder/" und piped selbige in den bestehenden Prozess "slmenu" - usw.

Ähnliches dann bei der Anzeige von dotfiles:
Ist-Zustand:
script started slmenu mit Datei-Liste von $HOME. Ich drücke ".", slmenu beendet sich, script verarbeitet Eingabe, erstellt die Datei-Liste für $HOME mit dotfiles und startet dann wieder slmenu.

Besser wäre wieder:
script started slmenu, piped Datei-Liste von $HOME rein, ich drücke ".", slmenu schreibt entsprechendes nach stdout, script verarbeitet das, erstellt Datei-Liste für $HOME mit dotfiles und piped das in den bestehenden slmenu-Prozess.

*Warum gibt es für dmenu eigentlich keinen derartigen Patch, der mir dann auch für slmenu als Vorbild dienen könnte?

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: C: Wert von Variable ändert sich nicht

Beitrag von Meillo » 10.04.2018 22:14:52

RobertDebiannutzer hat geschrieben: ↑ zum Beitrag ↑
10.04.2018 15:27:42
[...] der Toggle wird jetzt durch eine Option auf den Wert 1 gesetzt. D.h., wenn ich slmenu mit der von mir kreierten Option "-d" aufrufe. Dafür ist dann mein Script (s. meinen Nopaste-Link) verantwortlich. Ist "dotfilesmarker[0]" aktiviert worden, ruft mein Script slmenu immer mit der Option "-d" auf, sodass der toggle den richtigen Wert (also 1) hat und alles funktioniert.
Damit ist dein funktionales Problem geloest, denke ich.

Die weitere Diskussion dreht sich nur noch um Designfragen von dmenu/slmenu und deinem Filemanagerscript.

RobertDebiannutzer hat geschrieben: ↑ zum Beitrag ↑
10.04.2018 18:24:52
Besser wäre ja (auch bei dmenu*):
Ich starte das script. slmenu wird im Hintergrund gestartet und wartet auf input. Erster Input ist die Liste aller Dateien im Home-directory. Ich wähle "Bilder/" aus und drücke "Enter". Nun beendet sich slmenu nicht, sondern schreibt nur "Bilder/" nach stdout. Script bekommt den Input "Bilder/", verarbeitet das, erstellt die Dateiliste für den Ordner "Bilder/" und piped selbige in den bestehenden Prozess "slmenu" - usw.
Was du willst, ist nachtraeglich eine grundsaetzliche Designentscheidung aendern. Selten geht sowas komplett gut. Oft fuehrt das zu allerlei Unstimmigkeiten in Randbereichen und Sonderfaellen. Es kann aber auch gut gehen.

Denken wir es also mal durch. Der Knackpunkt deiner Beschreibung ist: ``Nun beendet sich slmenu nicht, sondern schreibt nur "Bilder/" nach stdout. Script bekommt den Input ...''. Bislang liest das Script bis EOF und verarbeitet die Inhalte dann. Das ist die uebliche Art, die mit den anderen Tool in Unix funktioniert. Dein Vorschlag erfordert, dass das Script zeilenweise liest und verarbeitet. (Voraussetzung ist, dass genau ein Eintrag ausgewaehlt werden kann, der genau eine Zeile einnimmt. Dasist bei dmenu AFAIR der Fall.) Wenn das Script aber nun nach dem Einlesen der einen Zeile nichts tut (weil es z.B. wartet bis EOF kommt), dann passiert gar nichts mehr. Ebenso, falls dieses modifizierte slmenu von einem Terminal lesen wuerde, weil es da nur genau eine Liste bekommen wuerde. Das modifizierte slmenu muss also von einer FIFO lesen, weil man nur dann Inhalte nachliefern kann, aber woher weiss es, wie weit es am Anfang lesen muss. Wann hoert also die Liste auf, die es bei der ersten Auswahl anbieten muss? Normalerweise liest es bis EOF. Aber wenn wir mal bei EOF sind, koennen wir keine weiteren DAten nachliefern, auch bei einer FIFO nicht. Folglich muesste man einen speziellen End-Marker einfuehren, der dem modifizierten slmenu signalisiert, dass es jetzt genug gelesen hat und die Auswahl darstellen soll. All das macht aus dem sehr generischen und mit anderen Unix-Tools kombinierbaren Werkzeug dmenu/slmenu ein Spezialprogramm, das nur in ganz bestimmten (untypischen) Umgebungen funktioniert. Man wuerde Code schreiben und warten mussen fuer einen seltenen Spezialfall. Das widerspricht der Suckless-Idee. Das widerspricht auch der Ursprungsidee von dmenu.

Das von meiner Seite an Analyse, warum slmenu so ist wie es ist und nicht so wie du es gerne haettest.

Aber wo ist denn das Problem? Ein (so kleines) Programm vielfach zu starten geht blitzschnell. Die Dateilisten wuerden sowieo immer neu eingelesen werden. Der Vorteil waere also nur das Merken des Zustands des Toggles. Wenn das aber dein Wrapperscript macht und dann ggf. `-d' setzt, hast du das schon geloest ... mit weniger Code als wenn du es haettest in C schreiben muessen ... und mit weniger Aufwand als wenn du dieses Script zum zeilenweisen Lesen und die FIFO wieder fuellen haettest schreiben muessen ... und weniger Verwaltung um die FIFO anzulegen und wieder zu loeschen.


Btw: Was mich noch interessieren wuerde: Was genau macht den dieses Toogle? Warum werden da diese Marker (//+ bzw. //q) ausgegeben? Wenn ich raten muesste, wuerde sich vermuten, dass man damit versteckte Dateien anzeigen lassen bzw. ausblenden kann. Aber das macht keinen rechten Sinn, weil die Dateien ja vom Script kommen und nur nach slmenu gepiped werden. Ich versteh's noch nicht ganz (und hab nach dem langen Post keine rechte Lust mehr, mich durch das Bash-Script zu wuehlen ...)
Use ed once in a while!

RobertDebiannutzer
Beiträge: 385
Registriert: 16.06.2017 09:52:36

Re: C: Wert von Variable ändert sich nicht

Beitrag von RobertDebiannutzer » 10.04.2018 23:48:11

Vielen Dank, Meillo, für Deine Mühe!

Ich weiß allerdings nicht, ob ich Deine Analyse schon ganz verstehe.
Du meinst, dass das Problem darin liegt, dass das Script nicht mehr auf den Output von slmenu warten kann, weil es slmenu ja in irgendeiner Form in den Hintergrund verschieben musste / lösen musste?
Dann würde das Script sich ja weiter ausführen, bis ... ? Meinst Du das damit, dass das Script dann zeilenweise verarbeiten müsste?

Meillo hat geschrieben: ↑ zum Beitrag ↑
10.04.2018 22:14:52
Btw: Was mich noch interessieren wuerde: Was genau macht den dieses Toogle? Warum werden da diese Marker (//+ bzw. //q) ausgegeben? Wenn ich raten muesste, wuerde sich vermuten, dass man damit versteckte Dateien anzeigen lassen bzw. ausblenden kann. Aber das macht keinen rechten Sinn, weil die Dateien ja vom Script kommen und nur nach slmenu gepiped werden. Ich versteh's noch nicht ganz (und hab nach dem langen Post keine rechte Lust mehr, mich durch das Bash-Script zu wuehlen ...)
Richtig geraten! :)
Ursprünglich war das Script ja für dmenu. Da hatte ich dann einen Befehlsmodus ausgearbeitet. D.h., immer wenn ich etwas eingab, was mit // anfing, lief ich nicht Gefahr, mit einem Suchergebnis zu kollidieren und konnte das nachfolgende als Befehl auswerten lassen. Das ermöglicht mir z.B. "//touch test" o.ä.
Die Befehle "//+" und "//q" schalteten dabei zwischen einfacher und erweiteter Ansicht um. D.h., im Normalmodus wurde mir die Ausgabe von

Code: Alles auswählen

input_short () {
  check_root
  short_ls () { ls -1 --group-directories-first -F; }
  printf "%s\n$pardir%s\n" "$(pwd)" "$(short_ls)" | slmenu_cmd
}
angezeigt und im erweiterten Modus die Ausgabe von

Code: Alles auswählen

input_verbose () {
  check_root
  long_ls () { LC_ALL="C" ls -lAh --group-directories-first -F; }
  printf "%s\n$pardir%s\n" "$(pwd)" "$(long_ls)" | slmenu_cmd -d
}
(check_root und $pardir sorgen nur dafür, dass in "/" kein "../" angezeigt wird, denn bekanntlich hat / ja kein Parentdirectory. Den Luxus habe ich mir nachträglich doch noch eingebaut...)

Jetzt in slmenu habe ich mir aber gedacht: Wenn ich schon den code selber kompiliere, kann ich mir gleich (neben zwei, drei anderen kleinen Änderungen) ein Tastenkürzel für das Umschalten zwischen dem normalen und dem erweitertem Modus anlegen. Dafür hatte ich mir von noice bzw. nnn (s. https://suckless.org/rocks/ unter "File Browsers" bzw. Debiannnn) die Taste "." abgeschaut.
Also schreibt slmenu nun beim Drücken der Taste "." "//+" nach stdout. Damit wechselt das Script in den erweiterten Modus. Nun wird slmenu immer mit der Option "-d" gestartet, welche unsere Variable "dotfilestoggle" auf 1 setzt. Dann kann ich nach Wunsch mit der Taste "." wieder in den Normalmodus zurückkehren.

Meillo hat geschrieben: ↑ zum Beitrag ↑
10.04.2018 22:14:52
Aber wo ist denn das Problem? Ein (so kleines) Programm vielfach zu starten geht blitzschnell. Die Dateilisten wuerden sowieo immer neu eingelesen werden. Der Vorteil waere also nur das Merken des Zustands des Toggles. Wenn das aber dein Wrapperscript macht und dann ggf. `-d' setzt, hast du das schon geloest ... mit weniger Code als wenn du es haettest in C schreiben muessen ... und mit weniger Aufwand als wenn du dieses Script zum zeilenweisen Lesen und die FIFO wieder fuellen haettest schreiben muessen ... und weniger Verwaltung um die FIFO anzulegen und wieder zu loeschen.
Wahrscheinlich hast Du recht... Selbst die Dateiliste von /usr/bin wird mir praktisch ohne Zucken angezeigt (und das bei meinem recht alten Laptop (2009, single core)). Da ist mc langsamer...
Und schön durchbrowsen kann ich auch, denn die Pfeiltasten habe ich so belegt, dass mich das Drücken der linken Pfeiltaste ins Parentdirectory befördert und das Drücken der rechten Pfeiltaste den aktuellen Eintrag wie mit Enter auswählt.
Da kann ich dann genauso durch die Ordner flutschen wie mit noice, nnn oder mc (letzterer muss entsprechend eingestellt werden).

Falls noch die Frage kommt, warum ich als Terminal-file-manager nicht noice oder nnn nehme (oder bei mc bleibe), hier die unsortierten Gründe:
1. Ich kann im Moment hauptsächlich scripte schreiben und bei meinem eigenen file-manager kann ich das Programm nach meinen Wünschen gestalten, denn die "engine" des file-managers ist ja das script und nicht slmenu oder dmenu.
2. Bei noice, nnn oder mc kann man einfach nicht fein genug einstellen, bei welcher Datei welches Programm gestartet wird.
3. Was Eigenes macht Spaß. :)
4. nnn oder noice haben nicht so eine schöne eingebaute Kommandozeile wie mc oder die Kombination script+[a-z]*menu.
5. noice und mc haben kein "search-as-you-type" oder wie das heißt.
6. Bei mc brauche ich ganz viel gar nicht und vor allem der eingebaute Editor stört mich. Gut, man muss ihn ja nicht nutzen, aber irgendwie ... Debianmc und Debianmc-data haben gemeinsam 7MB installierte Größe. Ist eine philosophische Entscheidung... :)
Ich mag suckless! :THX:

RobertDebiannutzer
Beiträge: 385
Registriert: 16.06.2017 09:52:36

[gelöst] C: Wert von Variable ändert sich nicht

Beitrag von RobertDebiannutzer » 11.04.2018 22:36:51

Huch!?? Der github-Link vom Original-Projekt ist futsch... Was ist denn da passiert? Im AUR ist das Programm aber noch: https://aur.archlinux.org/packages/slmenu-git/
Komisch :|

Naja, jedenfalls habe ich mein script an zwei Stellen nochmal verbessert (ist Wahnsinn, was man manchmal verdusselt) und habe meinen file-manager schon fleißig genutzt.
Dabei ist mir leider ein klitzekleines Problemchen aufgefallen:
Gehe ich z.B. in den Ordner /etc/firejail und gebe als Kommando z.B. ein: "//cp firefox.profile ~/.config/firejail", hört der Spaß beim Punkt leider auf... :roll:
Ich glaube, ich muss meinen shortcut ummappen, aber das schaffe ich. :wink:

Da das Ursprungsproblem des Threads gelöst ist, setzte ich ihn mal auf [gelöst].

Antworten