SVN / RapidSVN Standdardeditor

Du hast Probleme mit Deinem eMail-Programm, Webbrowser oder Textprogramm? Dein Lieblingsprogramm streikt?
raa
Beiträge: 241
Registriert: 19.12.2013 10:16:19

SVN / RapidSVN Standdardeditor

Beitrag von raa » 01.03.2014 12:34:21

Hallo,

ich nutze Subversion mit RapidSVN und gedit als Standardeditor. So weit, so gut - da mein Hauptwerkzeug aber LTSpice (unter Wine) ist, möchte ich eben, dass eine *.asc - Datei aus RapidSVN (F3 oder rechte Maustaste -> Kontextmenü -> "Bearbeiten") standardmäßig mit LTSpice geöffnet wird . Der Shell müsste also etwa Folgendes übergeben werden (so funktioniert's im Terminal):

Code: Alles auswählen

wine "C:\Program Files\LTC\LTspiceIV\scad3.exe" D:\projektpfad\\datei.asc
Meine Versuche, SVN / RapidSVN das beizubringen, sind bis dato leider alle gescheitert. :? Außerdem möchte ich natürlich gedit als Editor behalten, auch andere Programme nutzen und dementsprechend eine Auswahlmöglichkeit beim Anklicken haben, mit welchem Programm die Datei zu bearbeiten ist (als Default eben LTSpice).

Wer kann mir mal auf die Sprünge helfen, wie das geht? :wink:

So steht's in meiner ~/.RapidSVN, da ändert sich aber nichts, wenn ich mit RapidSVN ("Ansicht" -> "Einstellungen" -> "Programme" -> "Standard Editor") was anderes festlege:

Code: Alles auswählen

StandardEditor=gedit
AlwaysStandardEditor=0
StandardEditorArgs=%1

rendegast
Beiträge: 14272
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: SVN / RapidSVN Standdardeditor

Beitrag von rendegast » 01.03.2014 13:42:33

Vielleicht Wrapper-Script /usr/local/bin/wine-scad3 mit

Code: Alles auswählen

#!/bin/sh
#wine "C:\Program Files\LTC\LTspiceIV\scad3.exe" D:\projektpfad\\datei.asc
wine "C:\Program Files\LTC\LTspiceIV\scad3.exe" "$1"
Eventuell braucht es dann noch eine dektop(?) oder application(?) Datei,
damit auch das Desktop-Environment das Skript als Programm resp. Editor ansieht/anzeigt.
Und/Oder eine Eintragung in update-alternatives

Code: Alles auswählen

# ll /etc/alternatives/*edit*
lrwxrwxrwx 1 root root 15 Sep 19 14:17 /etc/alternatives/editor -> /usr/bin/mcedit
lrwxrwxrwx 1 root root 31 Sep 19 14:17 /etc/alternatives/editor.1.gz -> /usr/share/man/man1/mcedit.1.gz
lrwxrwxrwx 1 root root 16 Oct 15 17:01 /etc/alternatives/gnome-text-editor -> /usr/bin/leafpad
lrwxrwxrwx 1 root root 32 Oct 15 17:01 /etc/alternatives/gnome-text-editor.1.gz -> /usr/share/man/man1/leafpad.1.gz
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

raa
Beiträge: 241
Registriert: 19.12.2013 10:16:19

Re: SVN / RapidSVN Standdardeditor

Beitrag von raa » 01.03.2014 15:12:07

Hm, das ist schon mal ein Ansatz. Ich will aber nun um Gottes Willen nicht, dass "überall" LTSpice als "Standardeditor" statt gedit aufgerufen wird, sondern nur in RapidSVN die Auswahl zwischen verschiedenen Programmen für die Bearbeitung der ausgewählten Datei. Wobei eben für z.B. *.asc der Standard LTSpice sein soll, ich die aber auch gelegentlich mit gedit manipulieren will. (Das macht sich manchmal sehr gut.) :wink: Mit anderen Dateien hab' ich aber auch schon öfters mittels "Bearbeitung / F3" die CPU ins Schwitzen und das ganze System quasi zum Stillstand gebracht - öffne doch mal "aus Versehen" z.B. eine große Grafik- oder Sounddatei mit gedit. Ok, der packt's schon irgendwie, braucht nur seine Zeit und seine Ressourcen dazu. :wink:

Da müsste also ein anderer Standard her, und eine Auswahlmöglichkeit zwischen anderen Programmen. Im System läuft das über die MIME-Typen, und so handelt das jeder Dateimanager (bei mir eben der "Gnome Commander"), aber RapidSVN wird das wohl nicht so richtig schnallen. Es bietet aber die Möglichkeit, dem "Standardeditor" (also dann unserem Script) mehrere Argumente zu übergeben, wobei "%1" eben die ausgewählte Datei ist ...

Naja, bin beim Basteln. Aber vielleicht hat einer sowas schon gemacht?

raa
Beiträge: 241
Registriert: 19.12.2013 10:16:19

Re: SVN / RapidSVN Standdardeditor

Beitrag von raa » 01.03.2014 16:12:34

Ähm, da gleich das erste Anfängerproblem. :wink: RapidSVN ruft also jetzt als "Standardeditor" mein Script "~/RapidSVN_prog.sh" auf und übergibt ihm als Argument "%1" die ausgewählte Datei:

Code: Alles auswählen

#!/bin/bash

echo '$@' # erst mal zum Testen

exit

#wine "C:\Program Files\LTC\LTspiceIV\scad3.exe" D:\projektpfad\\datei.asc
wine "C:\Program Files\LTC\LTspiceIV\scad3.exe" "$1"

Da kann ich nun schreiben, was ich will, um die Datei zu handeln - ich versuch's mit $1 / / %1 / $@ / '$@' / "$@" / sonstwas ... Mit konstanter Bosheit kommt da "Schreibfehler: Ungültiger Dateideskriptor." Was wäre nun ein gültiger? (Erst mal muss ich daraus Pfad und Dateinamen ermitteln.)

raa
Beiträge: 241
Registriert: 19.12.2013 10:16:19

Re: SVN / RapidSVN Standdardeditor

Beitrag von raa » 02.03.2014 00:34:22

Ich glaub', hier sind wir auf der richtigen Fährte:

http://www.pro-linux.de/forum/viewtopic.php?t=1036231

rendegast
Beiträge: 14272
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: SVN / RapidSVN Standdardeditor

Beitrag von rendegast » 02.03.2014 11:35:43

wine "C:\Program Files\LTC\LTspiceIV\scad3.exe" "$1"
Ups, besser

Code: Alles auswählen

cd ~/.wine/drive_c
wine "C:\\Program Files\\LTC\\LTspiceIV\\scad3.exe" "$1"
Bei einem ff in wine reagiert dieser bei obigem mit $1 leer so,
als wäre ihm dennoch irgendetwas übergeben worden -> es wird file:///C:/ angezeigt statt Startseite.
Daher vielleicht eher

Code: Alles auswählen

cd ~/.wine/drive_c
wine "C:\\Program Files\\LTC\\LTspiceIV\\scad3.exe" "$@"
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

raa
Beiträge: 241
Registriert: 19.12.2013 10:16:19

Re: SVN / RapidSVN Standdardeditor

Beitrag von raa » 02.03.2014 14:02:56

Mir drängt sich der Verdacht auf, du verwechselst Wine mit irgendeinem Browser?

rendegast
Beiträge: 14272
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: SVN / RapidSVN Standdardeditor

Beitrag von rendegast » 02.03.2014 19:47:52

Verdacht ist falsch,
ich habe die Funktion des Wrappers mit einem mir zur Verfügung stehenden Programm ausprobiert.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

raa
Beiträge: 241
Registriert: 19.12.2013 10:16:19

Re: SVN / RapidSVN Standdardeditor

Beitrag von raa » 02.03.2014 21:30:18

rendegast hat geschrieben:Verdacht ist falsch,
ich habe die Funktion des Wrappers mit einem mir zur Verfügung stehenden Programm ausprobiert.
Das steht dir frei. :wink:
rendegast hat geschrieben:Daher vielleicht eher

Code: Alles auswählen

cd ~/.wine/drive_c
wine "C:\\Program Files\\LTC\\LTspiceIV\\scad3.exe" "$@"
Funzt leider auch nicht. Aber das:

Code: Alles auswählen

windrive=${@//'/mnt/data'/'D:'} 					# /mnt/data ist Wine - Laufwerk D
winfile=${windrive//'/'/'\\'}   					# Slashs durch doppelte Backslashs ersetzen
wine 'C:\Program Files\LTC\LTspiceIV\scad3.exe' $winfile

raa
Beiträge: 241
Registriert: 19.12.2013 10:16:19

Re: SVN / RapidSVN Standdardeditor

Beitrag von raa » 03.03.2014 12:45:41

rendegast hat geschrieben:Bei einem ff in wine reagiert dieser bei obigem mit $1 leer so,
als wäre ihm dennoch irgendetwas übergeben worden -> es wird file:///C:/ angezeigt statt Startseite.
Och, nicht nur FF in Wine. Und irgendwas ist ihm auch übergeben worden - ich weiß jetzt auch, was. Ist nur ein bisschen verstümmelt. :wink: Da kommen wir zurück zum Ausgangsproblem (Übergabe der ausgewählten Datei) - scheint ein generelles Problem zu sein. Das in RapidSVN offensichtlich gelöst ist (in meinem Script kommt sie ja als $@ wohlbehalten an) - aber wie? Das muss sich wohl irgendwie hinter dem geheimnisvollen Argument %1 verstecken, das kommt mir doch von anderen Programmen her schon elend bekannt vor. :wink: Der Trick mit den Backslashs

Code: Alles auswählen

winpath=${winpath//'/'/'\\'}   					# Slashs durch doppelte Backslashs ersetzen
wine 'C:\Program Files\LTC\LTspiceIV\scad3.exe' $winpath
funzt nämlich auch nur unter bestimmten Bedingungen: Sobald im Dateinamen das erste Leerzeichen auftaucht, ist's Essig. Praktisch alle Programme (jedenfalls alle, mit denen ich's probiert habe, und mit allen möglichen Tricks, nicht nur mit den Backslashs), nehmen den nur bis zum ersten Leerzeichen an. Alles, was danach kommt, wird entweder ignoriert oder als zweites [, drittes, viertes, ...] Argument interpretiert. Das äußert sich z.B. so:

Code: Alles auswählen

iceweasel /pfad/dat ei name.html
Da will der Browser ganz korrekt eine Seite mit dem Link "file:///pfad/dat" öffnen, die's natürlich nicht gibt. Oder so:

Code: Alles auswählen

gedit /pfad/dat ei name.txt
Da präsentiert mir der Editor drei Tabs (natürlich leer), überschrieben mit den "Dateinamen" "dat", "ei" und "name.txt". Mit anderen Programmen dasselbe in Grün. :roll: Was z.B. meine selbstgebastelten Shell - Funktionen damit so alles anrichten könnten - nicht auszudenken. 8O

Also: Wie lässt sich ein Dateiname (oder allgemein ein String mit Leerzeichen) korrekt als ein Argument übergeben? Im Terminal doch ganz einfach:

Code: Alles auswählen

gedit '/pfad/dat ei name.txt'
Im Script:

Code: Alles auswählen

gedit '$datei'
Das funzt schon wieder nicht mehr, wenn der Wert von $datei ein String mit Leerzeichen ist. Aber nun guck' dir z.B. mal das an:

Code: Alles auswählen

case $@ in

	*.asc) anweisung(en) ;;

-
-
-
esac
Das packt's komischerweise. Und das macht das Script / die Shell doch auch nicht alleine, da wird doch auch ein Programm aufgerufen, oder?

Mir schwant langsam: Das Ganze lässt sich doch sicher ganz elegant umgehen, wenn man keinen String, sondern einen Dateideskriptor übergibt (wie offenbar RapidSVN meinem Script) - aber wie? Wer weiß da Genaueres?

(Aus höheren Sprachen wie C, VB, ... ist mir Analoges geläufig als "Kontext", "Call by Reference", "Pointer" oder wie auch immer. Und wie gesagt: Ich vermute, dass sich das hinter dem geheimnisvollen Argument %1 versteckt - das sehe ich bei RapidSVN auch beileibe nicht zum ersten Mal) ...

rendegast
Beiträge: 14272
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: SVN / RapidSVN Standdardeditor

Beitrag von rendegast » 03.03.2014 14:21:50

Funzt leider auch nicht. Aber das:
windrive=${@//'/mnt/data'/'D:'} # /mnt/data ist Wine - Laufwerk D
winfile=${windrive//'/'/'\\'} # Slashs durch doppelte Backslashs ersetzen
Ja schade, ich dacht, daß wine dieses mapping selbst ausführen kann
Sobald im Dateinamen das erste Leerzeichen auftaucht, ist's Essig. Praktisch alle Programme (jedenfalls alle, mit denen ich's probiert habe, und mit allen möglichen Tricks, nicht nur mit den Backslashs), nehmen den nur bis zum ersten Leerzeichen an.
So einfach stimmt das nicht,

Code: Alles auswählen

# TEST="immer wieder Becken/springen/nebenher"

# echo ${TEST//e/A}
immAr wiAdAr BAckAn/springAn/nAbAnhAr

# echo $TEST | sed 's@e@A@g'
immAr wiAdAr BAckAn/springAn/nAbAnhAr
wine 'C:\Program Files\LTC\LTspiceIV\scad3.exe' $winfile
Hier könnte das $winfile wieder in Quotes, damit es mit den Leerzeichen funktioniert.
case $@ in
....
Das packt's komischerweise.
$@, $* sind besondere Variablen, auch in der Auflösung, 'man bash':
* Expands to the positional parameters, starting from one. When the expansion occurs
within double quotes, it expands to a single word with the value of each parameter
separated by the first character of the IFS special variable. That is, "$*" is
equivalent to "$1c$2c..."
, where c is the first character of the value of the IFS
variable. If IFS is unset, the parameters are separated by spaces. If IFS is null,
the parameters are joined without intervening separators.

@ Expands to the positional parameters, starting from one. When the expansion occurs
within double quotes, each parameter expands to a separate word. That is, "$@" is
equivalent to "$1" "$2" ...
If the double-quoted expansion occurs within a word,
the expansion of the first parameter is joined with the beginning part of the origi‐
nal word, and the expansion of the last parameter is joined with the last part of
the original word. When there are no positional parameters, "$@" and $@ expand to
nothing (i.e., they are removed).
Korrektes Quoting ist IMO eine Wissenschaft für sich, try+error.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

raa
Beiträge: 241
Registriert: 19.12.2013 10:16:19

Re: SVN / RapidSVN Standdardeditor

Beitrag von raa » 03.03.2014 15:07:18

rendegast hat geschrieben:
Sobald im Dateinamen das erste Leerzeichen auftaucht, ist's Essig. Praktisch alle Programme (jedenfalls alle, mit denen ich's probiert habe, und mit allen möglichen Tricks, nicht nur mit den Backslashs), nehmen den nur bis zum ersten Leerzeichen an.
So einfach stimmt das nicht,
Im "Sonderfall mein mühsam konfiguriertes Debian" schon. :wink: Probleme mit Zeichensätzen etc gab's anfangs öfters, speziell mit Umlauten - da entstanden z.B. mittels Gnome Commander & Co. teilweise Datei- und Verzeichnisnamen, ähnlich kryptisch wie dein Beispiel. :wink: Aber das ist längst Geschichte (lange vor meinem Update von Sqeeze auf Wheezy, das meine Konfiguration auch bravourös überstanden hat). :wink:

Heute hängt's wirklich nur noch an Leerzeichen, aber das an allen Haken und Ösen. ;) Z.B. kriegte mein (Rapid-)SVN mal Probleme mit drei Namen für ein und dasselbe Verzeichnis (die auch nicht ganz einfach zu lösen waren, aber da hat die Methode "trial and error" mal funktioniert). :wink:

Code: Alles auswählen

/mnt/data/Mails lokal
/mnt/data/Mails%20lokal
/mnt/data/Mails_lokal
Fällt dir was auf? :wink:
rendegast hat geschrieben:try+error.
Nö. Die trials haben mich diesmal ein Wochendende gekostet, 'rausgekommen sind bis jetzt nur errors. Da müssen wir also mal mal etwas gezielter vorgehen, würde ich sagen.

rendegast
Beiträge: 14272
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: SVN / RapidSVN Standdardeditor

Beitrag von rendegast » 03.03.2014 16:13:20

ähnlich kryptisch wie dein Beispiel.
Ist nicht kryptisch, ist eine Variable/Pfad mit Leerzeichen.
Bei bash-Substitution wie bei sed funktioniert die wiederholte Zeichenersetzung.
Fällt dir was auf?
Es gibt Hilfsprogramme für das Konvertieren

Code: Alles auswählen

uni2ascii - UTF-8 to 7-bit ASCII and vice versa converter
uniutils - Tools for finding out what is in a Unicode file
utf8-migration-tool - Debian UTF-8 migration wizard
utfout - Utility to produce UTF-8 (Unicode) output
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

raa
Beiträge: 241
Registriert: 19.12.2013 10:16:19

Re: SVN / RapidSVN Standdardeditor

Beitrag von raa » 03.03.2014 16:49:08

rendegast hat geschrieben:Es gibt Hilfsprogramme für das Konvertieren

Code: Alles auswählen

uni2ascii - UTF-8 to 7-bit ASCII and vice versa converter
uniutils - Tools for finding out what is in a Unicode file
utf8-migration-tool - Debian UTF-8 migration wizard
utfout - Utility to produce UTF-8 (Unicode) output
Hm, und wie kriege ich nun 'raus, welches ich da einsetzen muss, also von welchem Zeichensatz zu welchem ...

Iceweasel z.B. konvertiert ja auch irgendwie selber, hat mir ja z.B bei meinen trials mit den verschiedensten Quoting - Methoden in der Adressleiste auch schonmal sowas angezeigt (nur auch nicht gefunden):

Code: Alles auswählen

file:///pfad/dat%20ei%20name.html

rendegast
Beiträge: 14272
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: SVN / RapidSVN Standdardeditor

Beitrag von rendegast » 03.03.2014 17:09:24

Ich würde es zuerst mal mit dem migration-Tool probieren.

Ein weiteres mächtiges Paket Debianconvmv, kann wild in verschiedene Sets konvertieren.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Antworten