From 83585f8802d78e4a1a88a3399587467fad80593e Mon Sep 17 00:00:00 2001 From: Felix Stupp Date: Wed, 20 May 2020 11:36:57 +0000 Subject: [PATCH] Initial commit --- LICENSE | 13 ++++++ README.md | 119 +++++++++++++++++++++++++++++++++++++++++++++++ recht.plugin.zsh | 36 ++++++++++++++ 3 files changed, 168 insertions(+) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 recht.plugin.zsh diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..ff9e935 --- /dev/null +++ b/LICENSE @@ -0,0 +1,13 @@ + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + +Copyright (C) 2004 Sam Hocevar + +Everyone is permitted to copy and distribute verbatim or modified +copies of this license document, and changing it is allowed as long +as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/README.md b/README.md new file mode 100644 index 0000000..f1a20e3 --- /dev/null +++ b/README.md @@ -0,0 +1,119 @@ +# recht Plugin for ZSH + +Erlaubt das schnelle Anzeigen von deutschen Rechtstexten bereitgestellt durch gesetze-im-internet.de. Gesetzestexte werden lokal gespeichert und können dann ohne Internetverbindung erneut aufgerufen werden. + +**EN**: This ZSH plugin targets German users only because the used service targets German users only. + +## Repository Klon + +Das originale Repository wird auf [GitHub](https://github.com/Zocker1999NET/zsh-recht) gespeichert, +von welchem natürlich das Plugin für die Verwendung in ZSH heruntergeladen werden kann. +Issues und Pull Requests werden auf GitHub für alle gesammelt. + +Das Repository wird auf meinen eigenen Server geklont, +von welchem dieses auch gerne geklont werden kann (siehe [Klon](https://git.banananet.work/zsh-plugins/recht)). + +## Installation + +### Benötigte Drittprogramme + +- `curl` + +### zsh (ohne Plugin Manager) + +1. Projekt klonen +2. Folgende Zeile zur `.zshrc` hinzufügen: +```sh +SOURCE "path/to/repo/recht.plugin.zsh" +``` + +### oh-my-zsh + +1. Projekt nach `~/.oh-my-zsh/custom/plugins/recht` klonen +2. `recht` zur Pluginliste hinzufügen +```sh +plugins=(… recht …) +``` + +### Antigen + +1. Folgende Zeile zur `.zshrc` hinzufügen: +```sh +antigen bundle Zocker1999NET/zsh-recht # GitHub if default repository unchanged +antigen bundle https://git.banananet.work/zsh-plugins/recht # Own Server +``` + +or + +1. Repository zur Pluginliste hinzufügen +```sh +antigen bundles <.pdf` benannt, standardmäßig in `~/.zsh-recht-docs` +- `ZSH_PLUGIN_RECHT_DOC_VIEWER`: Das Programm, in welchem der Gesetzestext geöffnet werden soll, standardmäßig `xdg-open` (also Standardviewer durch Desktopumgebung gegeben) + +Zusätzlich sind folgende Werte konfigurierbar für seltene Ausnahmefälle: +- `ZSH_PLUGIN_RECHT_SERVER_URL`: Die URL des Servers, welche die Rechtsdokumente bereitstellt. Diese müssen in einem ähnlichen Format wie `gesetze-im-internet.de` bereitgestellt werden, daher ist der Standardwert `https://www.gesetze-im-internet.de` + +## Verwendung + +```sh +recht +``` +Dabei muss *GESETZ-ABK* die offizielle Abkürzung des Namen des Gesetzes sein. +Die Groß-/Kleinschreibung muss die der offiziellen Abkürzung entsprechen. + +Wird dem Gesetz eine Jahreszahl angehängt (Bsp: [BSV 1999](https://www.gesetze-im-internet.de/bsv_1999/)), so muss diese Jahreszahl mit einen Unterstrich `_` (vgl. URL zum Gesetz) angehängt werden, hier also `recht BSV_1999`. + +Gab es ein Gesetz bereits in mehreren Neu-Fassungen (siehe [BSIG](https://www.gesetze-im-internet.de/bsig_2009/)), +wird manchmal auf dem Server die Jahreszahl beim Namen des Ordners, +jedoch nicht beim Name der PDF (somit auch nicht Teil der Abkürzung des Gesetzes), +angehängt (URL zur PDF: [`/bsig_2009/BSIG.pdf`](https://www.gesetze-im-internet.de/bsig_2009/BSIG.pdf)). +Bei solchen Fällen muss das Gesetz entweder manuell heruntergeladen und im Ordner abgelegt werden, +oder, wenn einem die PDF URL bekannt ist, +kann diese verwendet werden: `recht bsig_2009/BSIG`. +Nach dem Herunterladen kann die heruntergeladene PDF Datei durch beide Befehlsvarianten ohne Internetverbindung angezeigt werden: +```sh +recht bsig_2009/BSIG # ist eine BSIG.pdf vorhanden, wird diese bevorzugt +recht BSIG # nur, wenn BSIG.pdf vorhanden +``` + +## Lizenz + +Das Plugin ist lizensiert unter der WTFPL. +Es darf frei verwendet, bearbeitet und verbreitet werden. +Es wird gerne gesehen, dass Verbesserungen am Plugin wieder zurück zu diesem Repository finden. + +## Verbesserungen + +Wer einen Bugfix oder eine Verbesserung betragen möchte, +einfach einen Pull Request erstellen. +Code bitte auf Englisch kommentieren. diff --git a/recht.plugin.zsh b/recht.plugin.zsh new file mode 100644 index 0000000..f6c2ce4 --- /dev/null +++ b/recht.plugin.zsh @@ -0,0 +1,36 @@ +function recht() { + # Load configuration values + local serverUrl="${ZSH_PLUGIN_RECHT_SERVER_URL:-https://www.gesetze-im-internet.de}" + local docsDir="${ZSH_PLUGIN_RECHT_DOCS_DIR:-~/.zsh-recht-docs}"; + local docViewer="${ZSH_PLUGIN_RECHT_DOC_VIEWER:-xdg-open}"; + # Create output directory if not exists already + mkdir --parents "$docsDir"; + # Load arguments + local docName="$1"; + local docPartUrl="${1:l}/$1"; + if <<<"$1" grep "/" >/dev/null; then + # Load argument as docPartUrl if it seems to be a path instead of a name + docName="$(<<< "$1" grep --only-matching --perl-regexp '(?<=/)[^/]*$')"; + docPartUrl="$1"; + fi + # Complain if name / path is not given + if [ -z "$1" ]; then + echo "Missing document name to open!" >/dev/stderr; + return 1; + fi + # Generate local path and remote url + local docPath=~/"Documents/Uni/Recht/_docs/${docName}.pdf"; + local docUrl="${serverUrl}/${docPartUrl}.pdf"; + # Download if local version not given + if [ ! -e "$docPath" ]; then + echo "Download document from gesetze-im-internet …"; + curl --fail --silent --output "$docPath" "$docUrl"; + fi + # Try to open document + if [ -e "$docPath" ]; then + $docViewer "$docPath" >/dev/null 2>&1 &!; + else + echo "Document $1 not found" >/dev/stderr; + return 1; + fi +}