ORCUS Logo
Datenschutz Impressum Kontakt
Referenzen News Externe Links
email

externer Anbieter: translate.google.com

Datenschutz-Hinweis: Durch Auswahl von "OK":

OK

externer Anbieter: validator.w3.org

Datenschutz-Hinweis: Durch Auswahl von "OK":

OK

externer Anbieter: validator.w3.jigsaw.w3.org

Datenschutz-Hinweis: Durch Auswahl von "OK":

OK
prev. page next page / HOME / Workarounds / IRC - linux mint support /[ot-snippet.sh - simple IRC-helper]

Über ot-snippet.sh

logo - ot-snippet

ot-snippet bietet eine einfache Verwaltung von parametrisierten mehrzeiligen Textblöcken (snippets) zur Nutzung in IRC-Clients (HexChat). Ein snippet wird durch seinen "Namen" (snippet-key) ausgewählt.

Im Zusammenspiel mit einem user-command (im Beispiel "/S") lassen sich häufig benötigte Text durch ein kurzes Kommando ausgeben.

Um einen allgemeinen Begrüßungstext (snippet-key hi) auszugeben, ist es ausreichend:

/s hi

- einzugeben um zu folgender Ausgabe im IRC zu expandieren:

[00:00:25] <orcus> Welcome to the linux mint support channel - all languages are welcome - english will often get more/faster replies.
[00:00:25] <orcus> To get support: Give some details about your issue, including your used mint version (19.2 ?) and DE (cinnamon, mate, xfce ?); stay connected afterwards = do not ask and leave after 1 minute...
[00:00:25] <orcus> Use    #linuxmint-chat    for general/non-support chat (right-click onto the channel-name + select join).
		

Um den Text dynamisch zu ergänzen, können in snippets Platzhalter verwendet werden, für die beim Aufruf entsprechende Werte - z.B. einen nickname - übergeben werden:

/s ask demo

- expandiert zu:

[00:00:46] <orcus> demo> If you need support - describe your issue, giving some (more) details + version used: 19.x? + DE: cinnamon, mate, xfce? - if anybody has an answer she/he will reply.
[00:00:46] <orcus> demo> Stay connected afterwards == do not ask and leave after 1 minute.
		

Auch wenn ot-snippet eine Auswahl von verwendbaren snippets vorhält, ist es im wesentlich dazu bestimmt, eigene snippets zu definieren. Für das Erstellen und Bearbeiten von snippets kann jeder einfache Texteditor verwendet werden.

Anforderungen

ot-snippet.sh ist für einen Nutzung mit bash als shell vorgesehen; d.h. es werden insbesondere für bash spezifische Umgebungsvariablen genutzt.

ot-snippet ist für eine Nutzung in einer Desktop-Umgebung vorgesehen. Die Ergebnisse bestimmter Kommandos werden via Terminal-Fenster bzw. als zenity-Dialog angezeigt.

Aktuell werden die folgenden Terminal-Anwendungen unterstützt:

Setup

ot-snippet bereitstellen

Aktuelle Version von ot-snippet herunterladen und in einem aktuellen Suchpfad bereitstellen.

Unter Linux Mint wird ein existierender Order "bin" im Home-Verzeichnis des Benutzers ($HOME/bin) bei der Anmeldung automatisch im Suchpfad aufgenommen.

Wird eine andere Distribution verwendet, muss ggf. $HOME/bin per export-Anweisung in ~/.profile hinzugefügt werden.

Um die Option --sel verwendet zu können (empfehlenswert), wird zenity benötigt.


# to be used with debian-based linux-installations having apt available

# create bin-folder and use it (just ignore if ~/bin would already be there)
mkdir ~/bin
cd ~/bin

# download ot-snippet and make it executable
wget https://www.orcus.de/Entities/linux/ot-snippet.sh
chmod +x ot-snippet.sh

# zenity is required to be able to use the --sel -feature (which you should have)
# if zenity is already installed - apt will say so... (and could be ignored)
apt install zenity

			

Falls ~/bin neu angelegt wurde: ab- und wieder anmelden, damit $HOME/bin automatisch dem Pfad hinzugefügt wird (Linux Mint).

IRC user-command anlegen

Für die Nutzung aus IRC-Clients wird lediglich ein einzelnes user-command definiert, das übergebene Parameter per /exec-Aufruf an ot-snippet.sh durchreicht.

Bei einem abweichenden IRC-Client muss ggf. die Definition angepasst werden.

HexChat

In Hexchat, Menü Einstellungen -> Benutzer-Kommando aufrufen. Einen neues Benutzer-Kommando anlegen - der Name ist frei wählbar - im Beispiel wurde "S" wie snippet verwendet.

logo - [Vergrößern per Mausklick]

[Vergrößern per Mausklick]

Hinweis für HexChat: Die Eingabe im Definitionsfeld muss mit Eingabe/Return beendet werden, bevor der Speichern-Knopf verwendet wird, da ansonsten eine leere Definition gespeichert wird.

user-cmdDefinition
Sexec -o ot-snippet.sh &2

weechat

In weechat muss das "exec"-Plugin verfügbar sein - ggf. muss noch das weechat-plugins Paket installiert werden:

					
apt install weechat-plugins

				

Für eine einfachere Nutzung wird ein Alias (bzw. user-command) für das exec-Kommando in weechat definiert:

					
/alias S exec -o ot-snippet.sh

				

Wird weechat in einer Konsolen-Umgebung ohne Window-Manager verwendet, stehen die --help, --list, --show und --sel -Optionen nicht zur Verfügung. Der Aufruf von snippets per snippet-key funktioniert uneingeschränkt.

Snippets testen

Um beim Ausprobieren von ot-snippet im IRC nicht unnötig die offiziellen #linuxmint-help und #linuxmint-chat -channels mit Text zu Fluten, sollte ein temporärer channel verwendet werden.

Man kann ot-snippet.sh natürlich auch aus einem Terminal heraus nutzen, um snippet vor deren Verwendung im IRC zu testen.

Nach dem Bereitstellen sollte einmal per --help Option die von ot-snippet aktuell detektiert Umgebung abzusehen:

ot-snippet.sh --help
			
ot-snippet V. 001#48 2019-11-17 - usage:
/home/oxs-build/bin/ot-snippet.sh <snippet-name> | :|--sel | _|--show | ?|--list | --help

setup-info:
term   = /usr/bin/mate-terminal
zenity = /usr/bin/zenity available - used
log    = /home/oxs-build/bin/ot-snippet.log missing or empty = no warnings/errors 
custom = /home/oxs-build/bin/ot-snippet.txt not available - ignored

press Shift+PgUp to scroll back
press RETURN to close window

			

Snippets nutzen

snippet direkt aufrufen

Ein snippet wird durch seinen Bezeichner/Key ausgewählt - $1 im Script. Weitere Parameter werden nach Bedarf einfach an das user-command angefügt, und werden von ot-snippet an den entsprechenden Stellen (als $2..$n) genutzt.

Viele der vordefinierten snippets verwenden $2 um einen nickname am Zeilenanfang im Text zu platzieren:

/uc ask newuser

expandiert zu:

[00:58:36] <orcus> newuser> If you need support - describe your issue, giving some (more) details + version used: 19.x?, + DE: cinnamon, mate, xfce? - if anybody has an answer she/he will reply.
[00:58:36] <orcus> newuser> Stay connected afterwards == do not ask and leave after 1 minute.
			

Überzählige Parameter (kommt ja mal vor) werden nicht ausgewertet. Werden weniger Parameter als erwartet verwendet, werden die entsprechenden Platzhalter durch leeren Text (nichts) ersetzt.

/uc ask

expandiert zu:

[01:19:29] <orcus> > If you need support - describe your issue, giving some (more) details + version used: 19.x?, + DE: cinnamon, mate, xfce? - if anybody has an answer she/he will reply.
[01:19:29] <orcus> > Stay connected afterwards == do not ask and leave after 1 minute.
			

snippets auswählen / auflisten

Neben dem direkten Auswählen eines snippets per Parameter unterstützt ot-snippet das Auflisten oder auch interaktive Auswahl vorhandener snippets:

P. kurzP. langFunktion
:--selAuswahl snippet per Listbox
?--listListe verfügbare snippet-keys
_--showÜbersicht expandierte snippets

Hinweis: Die o.g. zusätzlichen Ausgaben erfolgen in neuen Fenstern. Für --list und --show wird eine neues Terminal-Fenster geöffnet. Für --sel erfolgt die Anzeige per zenity-Dialog. Die jeweiligen Funktionalitäten sind entsprechend nicht in einer reinen Terminal-Session verfügbar. Die direkte Nutzung von snippets über deren key ist unabhängig davon möglich.

: --sel

Zeigt eine Liste der verfügbaren snippet-keys als Listbox per zenity an (zenity muss installiert sein). Die Einträge werden in Reihenfolge ihrer Definition angezeigt.

Wird ein snippet-key ausgewählt, wird das snippet (zusammen mit den übrigen Parametern) zum Expandieren verwendet und das Ergebnis im IRC ausgegeben.

Der angezeigt Dialog unterstützt das dynamische Filtern: Es wird der beste Treffer zu einer Eingabe selektiert.

Wird die Auswahl per ESC-Taste oder durch Schließen des Fensters abgebrochen, wird kein Text/snippet im IRC ausgegeben.

logo - [Vergrößern per Mausklick]

[Vergrößern per Mausklick]

? --list

Zeigt eine Liste der verfügbaren snippet-keys in einem Terminal-Fenster an.

Es wird kein Text/snippet im IRC ausgegeben.

logo - [Vergrößern per Mausklick]

[Vergrößern per Mausklick]

_ --show

Zeigt eine Übersicht der expandierten snippets in einem Terminal-Fenster an. Zum Hervorheben von Parameter-Positionen werden dummy-Parameter [P2]..[P4] farblich im expandierten Text hervorgehoben.

Es wird kein Text/snippet im IRC ausgegeben.

logo - [Vergrößern per Mausklick]

[Vergrößern per Mausklick]

Übersicht, Grobstruktur ot-snippet.sh

Die nachfolgenden Informationen sind nicht zwingend notwendig um snippets zu Erstellen oder zu Bearbeiten, helfen aber bestehende Einschränkungen, Features und Konventionen zu verstehen.

ot-snippet.sh ist ein bash shell-Script, snippets sind nichts anderes als darin enthaltene benannte Array-Variablen.

Die Datei besteht aus drei Teilen:

Header

Im Header werden einige interne Variable definiert. Neben vordefinierten IRC Escape-Codes (für das clientseitige Einfärben von Text, sowie bold- und italic-Attributen) wird in der Variable "ot_log" der Name der Logdatei aus dem aktuellen Pfad von ot-snippet.sh abgeleitet/hinterlegt.

Fehlerausgaben werden nach $ot_log - mit den default-Einstellungen ~/bin/ot-snippet.log - umgeleitet und sollten damit auch nicht im IRC als störender Text angezeigt werden. Entsprechend sollte bei Fehlern oder unerwartetem Verhalten von ot-snippet, zunächst einmal die Logdatei durchgesehen werden. Im Regelfall sollte die Logdatei keine Einträge aufweisen und 0 Byte Umfang haben.

Snippets - Format snippet-Name

Die snippets weißen das folgende Format auf:

freenode=(
"$2> there exists a specialized channel at freenode irc $open_irc:
$2> ircs://chat.freenode.net/#$3")
			

Wichtig für das Auflisten von snippets: Der snippet-Name muss am Anfang einer neuen Zeile unmittelbar gefolgt von =( OHNE WEITERE folgende Zeichen stehen.

Der darauf folgende Text wird mit " in der ersten Zeile eingeleitet und mit einem ") am Ende der letzten Zeile abgeschlossen. Zeilenumbrüche innerhalb des snippets werden 1:1 als neue Zeilen im IRC ausgegeben :-).

Footer

Im Footer befinden sich die Routinen zum Auswerten der Kommandozeilen-Argumente (im wesentlichen der $1 Parameter).

Wird eine der Optionen --list (aka ?) oder --show (aka _) verwendet, erstellt ot-snippet.sh einen Auszug der verfügbaren snippets, bzw. der snippet-Definitionen.

Intern führt ot-snippet.sh ein grep-Kommando und ggf. Test-Aufrufe (zum Expandieren der aktuellen Definitionen) auf sich selbst durch = hierdurch entfällt das Pflegen eines zusätzlichen Index.

Um den grep-Ausdruck möglichst einfach halten zu können, wird lediglich die o.g. Forderung an das Format des snippet-Namens beim Anlegen eines snippets gestellt.

Terminals für --list und --show

Die Anzeige der extrahierten snippet-Keys und -Definitionen erfolgt in getrennten Terminal-Fenstern.

ot-snippet testet die Verfügbarkeit der folgenden Terminal-Anwendungen (in dieser Reihenfolge):

  • gnome-terminal
  • xfce4-terminal
  • mate-terminal
  • lxterminal

Wird eine andere Terminal-Anwendung verwendet muss diese entsprechend ergänzt werden:

Neben dem Test auf die Terminal-Anwendung müssen ggf. die Terminal-spezifischen Parameter zur Anzeige der extrahierten Daten festgelegt werden (unterscheiden sich je nach Terminal-Anwendung, sollten sich aber einfach per man-page oder --help von dieser ermitteln lassen):

Beispiel-Parameter gnome-terminal
ParameterDefinition
ot_execflag"-e"
ot_titelflag"-T"

Aufrufparameter und interne Variablen

Wird ot-snippet.sh aufgerufen, bestimmt der erste Parameter (aka $1 im bash-Script) das entsprechende snippet (snippet-key) und wird zum Expandieren der gleichnamigen Variable verwendet.

Expandiert der verwendet snippet-key zu einem leeren Ergebnis (undefinierter snippet-key, Schreibfehler) erfolgt keine Ausgabe im IRC.

Innerhalb von snippets vorkommende $2, $3, ... -Variablen werden beim Expandieren implizit/automatisch durch die aktuellen Aufrufparameter von ot-snippet.sh ersetzt :-).

Analog zu den Aufrufparametern $2..$n werden beim Expandieren eines snippets auch beliebige andere (z.B. global definierte) Variablen ausgewertet, deren Wert dann entsprechend eingesetzt wird.

Damit lassen sich wiederholt genutzte Textanteile als string-Variable definieren - z.B.:

# trailing text for (freenode) irc-channels
freenode_info="$2> (at (most) freenode-channels, only registered user are able to write/ask)"
		

und dann innerhalb der snippets verwenden:

fbash=(
"$2> there esists a bash-related channel at freenode-irc $open_irc:
$2> ircs://chat.freenode.net/#bash
$freenode_info")
		

Für den Upload von Programmausgaben und sonstige Daten wird häufig ein Paste-Service verwendet. Da sich dieser der Vergangenheit gelegentlich geändert hat, ist es sinnvoll, das entsprechende Teilkommando zentral zu definieren - aktuell:

# current paste-service
paster="|nc termbin.com 9999"
#paster="|pastebinit -b paste.ubuntu.com"
		

Hinweis: vordefinierte String-Variablen, sollten selbst NICHT in der Notation von snippets angelegt werden, da diese Ansonsten bei --list, --show, --sel mit angezeigt würden.

ot-snippet.sh (snippets) bearbeiten

Snippet-Namen

Jeder in bash gültige/zulässiger Variablenname kann als snippet-Bezeichner bzw. snippet-key verwendet werden.

Wobei es natürlich naheliegend ist, einen kurzen und leicht zu merkenden snippet-key zu verwenden.

Für eine Übersicht aktuell verfügbarer/definierter snippets:


# Kurzform
ot-snippet.sh ?
# Langform
ot-snippet.sh --list

			

Ein snippet anlegen

Mit einem beliebigen Editor ot-snippet.sh öffnen. Neue Snippets werden nach folgendem Kommentar angelegt:

# SNIPPETS ====================================================================

- z.B.:

my1st=(
"$2> first line of my first snippet
$2> second line with an extra param '$3'
$2> last line...")
			

Nach dem Speichern kann man das snippet direkt im Terminal testen:

ot-snippet.sh my1st somename someparamused toomanyparams
			

- und expandiert zu:

somename> first line of my first snippet
somename> second line with an extra param 'someparamused'
somename> last line...")
			

Das neue Snippet wird genauso per --list (?) oder --show (_) angezeigt, wie es per --sel (:) zur Auswahl angezeigt werden kann:

ot-snippet.sh : somename someparamused toomanyparams
			
logo -

Werden snippets vorübergehend nicht benötigt, ist es ausreichend diese auszukommentieren. Die entsprechenden snippets werden dann weder bei --list, --show oder --sel angezeigt und sind auch nicht aufrufbar.

Aufruf-Parameter

Da ot-snippet wie jedes andere shell-tool aufgerufen wird, existieren Einschränkungen bzw. der Parameter.

Soll ein channel-Name (beginnen typischer Weise mit einem # als führendes Zeichen), so muss dieser zusammen mit einfachen oder doppelten Anführungszeichen benutzt werden (würde sonst als Anfang eines Kommentars beim Aufruf interpretiert und damit nicht genutzt werden).

Das vordefinierte snippet "freenode" vermeidet dies z.B., indem das # Zeichen als fester Bestandteil des snippets angelegt ist. Beim Aufruf wird entsprechend das führende # vom channel-Namen weggelassen:

# freenode --------------------------------------------------------------------
# a generic snippet expecting <nick> <channel-name> (without leading #)
freenode=(
"$2> there exists a specialized channel at freenode irc $open_irc:
$2> ircs://chat.freenode.net/#$3")
			

ot-snippets.txt & Updates

Beim Starten überprüft ot-snippet.sh ob im gleichen Verzeichnis eine custom-Datei (ot-snippets.txt) vorhanden ist.

Existiert die custom-Datei, wird diese automatisch von ot-snippet.sh eingebunden und die darin enthaltenen globalen Variable und snippets an Stelle der lokalen Definitionen genutzt (direkte Auswahl, --sel, --list und --show).

Die custom-Datei ist hilfreich, um beim Bereitstellen einer neue Version von ot-snippet.sh, die lokal vorgenommenen Änderungen der snippets weiterhin verwenden zu können, ohne diese wiederholt manuell in die neue Version kopieren zu müssen.

In ot-snippet.txt dürfen ausschließlich snippet-Definitionen (und von diesen genutzte globale Variablen) abgelegt werden. Es dürfen insbesondere keine der Auswertungsfunktionen enthalten sein.

Hierzu muss lediglich der Bereich aus ot-snippet.sh zwischen den folgenden Kommentaren in ot-snippet.txt gespeichert werden:

# =============================================================================
# START COPY HERE for a custom snippet-file >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		
# <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< END COPY HERE for a custom snippet-file
# END SNIPPETS (local) ========================================================
		

Known Issues

Es bietet sich an ot-snippet.sh zu Fehlersuche im Terminal zu testen. Fehlerausgaben werden intern in der Log-Datei ot-snippet.log im gleichen Verzeichnis wie ot-snippet.sh gespeichert.

Im Idealfall sollte ein Lauf von ot-snippet.sh zu keinen Einträgen in der Log-Datei führen. Abhängig von der genutzten Installation können dennoch einzelne Einträge auftreten, die hier beschrieben werden. Sofern möglich, werden hier Workarounds zum Vermeiden entsprechender Meldungen gegeben.

GLib-warning

Die im Test unter Arch Linux mit LXDE genutzte default zenity-Version 3.32.0+17+gfb0938f-1 hat einen bekannten Bug, der zu Log-Einträgen der Form führt:

(zenity:584): GLib-WARNING **: 11:30:09.587: ../glib/glib/giounix.c:410Error while getting flags for FD: Bad file descriptor (9)
			

Die Warnung kann im Prinzip ignoriert werden.

Muss in zenity behoben werden - aktuell ist kein alternativer workaround bekannt - kann ggf. beim Loggen der zenity Aufrufe gefiltert werden.

GtkDialog warning

Wie viele andere Anwendungen ist zenity von einer Änderung in gtk betroffen, die zur Anzeige einer Warnung führt (die aktuell ignoriert werden kann).

Gtk-Message: 03:21:25.615: GtkDialog mapped without a transient parent. This is discouraged.
			

Die Warnung kann im Prinzip ignoriert werden.

Muss in zenity behoben werden - aktuell ist kein alternativer workaround bekannt - kann ggf. beim Loggen der zenity Aufrufe gefiltert werden.

dbind-warning

Unter CentOS7 führt die Nutzung von mate-terminal zu folgender Warnung im Log (bekannter Bug):

(mate-terminal:10017): dbind-WARNING **: 20:39:15.346: Couldn't connect to accessibility bus: Failed to connect to socket /tmp/dbus-5JpJNPCMtv: Connection refused
			

Die Warnung kann im Prinzip ignoriert werden und lässt sich durch Definieren von:

export NO_AT_BRIDGE=1

in ~/.profile unterdrücken.

Hinweis: Die Environment-Variable unterdrückt die Warnung global für alle Anwendungen.


prev. page next page / HOME / Workarounds / IRC - linux mint support /[ot-snippet.sh - simple IRC-helper]