diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9c47ff6 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,4 @@ +*.adoc text eol=lf +*.yml text eol=lf +*.sh text eol=lf +Makefile text eol=lf diff --git a/.gitignore b/.gitignore index 790be99..e232813 100644 --- a/.gitignore +++ b/.gitignore @@ -2,9 +2,12 @@ # Files *.zip +desktop.ini # Folders -# .vscode/** build/** !build/.gitkeep +# Lokale Branch-Kennzeichnung (nicht tracken) +# Git-Hook aus ./tools/dev-setup.sh +BRANCH-* diff --git a/.vscode/cspell.json b/.vscode/cspell.json new file mode 100644 index 0000000..88cea74 --- /dev/null +++ b/.vscode/cspell.json @@ -0,0 +1,39 @@ +{ + "version": "0.2", + "language": "en,de", + "languageSettings": [ + { + "languageId": "*", + "enabled": false + }, + { + "languageId": "plaintext", + "enabled": true + }, + { + "languageId": "markdown", + "enabled": true + }, + { + "languageId": "asciidoc", + "enabled": true + } + ], + "ignorePaths": [ + "node_modules", + "dist", + "build", + "output", + ".git" + ], + "words": [ + "adoc", + "AsciiDoc", + "autochapter", + "kapitel", + "makefile", + "PDFTheme", + "realAscot", + "Skotarczak" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json index 082b194..65d6193 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,20 @@ { - "makefile.configureOnOpen": false -} \ No newline at end of file + "editor.codeActionsOnSave": { + "source.fixAll.cSpell": "explicit" + }, + "asciidoc.preview.style": "styles/preview.css", + "files.associations": { + "*.adoc": "asciidoc" + }, + "files.eol": "\n", + "[yaml]": { + "files.eol": "\n" + }, + "[shellscript]": { + "files.eol": "\n" + }, + "[asciidoc]": { + "files.eol": "\n" + }, + "files.encoding": "utf8" +} diff --git a/Makefile b/Makefile index 1926d3b..cc78a06 100644 --- a/Makefile +++ b/Makefile @@ -1,14 +1,21 @@ # Makefile für Markdown-eBook-Projekt mit Pandoc # === Allgemeine Konfiguration === -TITLE := JS-TS-Tutorial -MANUSCRIPT := manuscript -OUTPUT := build -METADATA := metadata/ebook.yaml -CSS := styles/ebook.css -TEX_EBOOK := styles/ebook-template.tex -TEX_PRINT := styles/print-template.tex -LOGO := media/logo/logo-v2.png +TITLE := dateiname_aus_makefile +MANUSCRIPT := manuscript +OUTPUT := build +METADATA := metadata/ebook.yaml +CSS := styles/ebook.css +TEX_EBOOK := styles/ebook-template.tex +TEX_PRINT := styles/print-template.tex +LOGO := media/logo/logo_256x256.png + +# === Nur wsl oder Linux === # +ifeq ($(OS),Windows_NT) +set_codepage: + @if [ "$(OS)" = "Windows_NT" ]; then chcp 65001 >nul; fi + $(error [⚠] Windows wird nicht unterstützt. Bitte WSL oder Linux verwenden.) +endif # === Quelldateien (geordnet nach Nummerierung) === MD_FILES := $(wildcard $(MANUSCRIPT)/*.md) diff --git a/README.md b/README.md index 41e0c49..31f92d7 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,10 @@ -# eBook - Dokumentation Vorlage - -**Gleichzeitig eBook-Template für Maniskripte in Markdown** +# eBook Vorlage ![Buch-Logo](./media/logo/logo-v2-256x256.png) -Dieses Manuskript dient mir persönlich auch als Template für andere eBooks daher sind viele Stellen explizit sehr detailiert beschrieben. - ## Inhalt -- [eBook - Dokumentation Vorlage](#ebook---dokumentation-vorlage) +- [eBook Vorlage](#ebook-vorlage) - [Inhalt](#inhalt) - [Infos](#infos) - [Struktur](#struktur) @@ -51,48 +47,17 @@ book/ │ ├── ebook.css │ └── print-template.tex │ -├── build/ +├── build/ # Ausgabeordner (wird vom Build-Prozess befüllt) │ -├── metadata/ +├── metadata/ # Metadaten für eBook, Titelblatt, Autoreninfo │ ├── title.txt │ ├── author.txt │ └── ebook.yaml │ -├── Makefile # +├── Makefile # Automatisierter Build-Prozess mit Pandoc etc. ├── README.md # Projektdokumentation └── LICENSE # Lizenz für das Buch (z. B. CC-BY) -📁 ./ # -├── 📁 build # Ausgabeordner (wird vom Build-Prozess befüllt) -│ └── 📄 .gitkeep # Platzhalter damit git leere Verzeichnisse trackt -├── 📁 manuscript # -│ ├── 📄 00_deckblatt.md # -│ ├── 📄 05_vorwort.md # -│ ├── 📄 10_kapitel1.md # -│ ├── 📄 20_kapitel2.md # -│ └── 📄 30_kapitel2.md # -├── 📁 media # -│ ├── 📁 logo # -│ │ ├── 📄 logo-v1.png # -│ │ ├── 📄 logo-v2-256x256.png # -│ │ └── 📄 logo-v2.png # -│ └── 📄 favicon.ico # -├── 📁 metadata # Metadaten für eBook, Titelblatt, Author etc -│ ├── 📄 author.txt # -│ └── 📄 ebook.yaml # -├── 📁 styles # -│ ├── 📄 ebook-template.tex # -│ ├── 📄 ebook.css # -│ ├── 📄 print-template.tex # -│ └── 📄 reference.docx # -├── 📄 .gitignore # -├── 📄 CHANGELOG.md # -├── 📄 desktop.ini # -├── 📄 LICENSE # -├── 📄 Makefile # Automatisierter Build-Prozess mit Pandoc etc. -├── 📄 README.md # Diese Datei - Erklärung zum Build des Buchs -└── 📄 VERSION # Paketversion (ohne Zeilenumbruch einzeilig 0.0.0) - ``` --- @@ -153,8 +118,17 @@ Falls der Build trotzdem scheitert oder du dir den Aufwand sparen möchtest, lad ### Templates +Informationen zu den Templates und ihre Konfiguration + #### PDF +- [x] Konfigurationsfile für die PDF-Aussgabe ist die [./styles/print-template.tex](./styles/print-template.tex) + - Dateiname für Einbandlogo erfolgt aus dieser Datei: + + ```tex + \includegraphics[width=0.3\textwidth]{media/logo/logo-einband.png} \\[2em] + ```` + #### eBook (epub) #### DOCX (Office/ Word) diff --git a/gitcopy.bat b/gitcopy.bat new file mode 100644 index 0000000..4439cf8 --- /dev/null +++ b/gitcopy.bat @@ -0,0 +1,160 @@ +@echo off +setlocal enabledelayedexpansion +chcp 65001 >nul + +REM Skript, um aus einem Projekt mit git-repo, ein portables .zip zu erstellen +REM +REM (C) 2025 MIT Adam Skotarczak +REM +REM Version: v1.1.2 +REM Github: https://github.com/realAscot/gitcopy +REM ------------------------------------------------------------------- + + +rem --- Git-Verfügbarkeit prüfen --- +where git >nul 2>nul +if errorlevel 1 ( + echo. + echo [⚠️] Git ist nicht installiert oder nicht im PATH. + echo [📦] Bitte installiere Git von https://git-scm.com/download/win + call :show_help + echo. + exit /b 1 +) + +rem --- Git-Version anzeigen --- +for /f "tokens=*" %%i in ('git --version') do set "GIT_VERSION=%%i" + +if defined GIT_VERSION ( + echo. + echo [✅] Gefundene Git-Version: %GIT_VERSION% +) else ( + echo([⚠️] Konnte Git-Version nicht ermitteln. +) + +rem Prüfe auf optionalen Parameter "--debug" +set DEBUG=0 + +if NOT "%~1"=="" ( + if "%~1"=="--debug" ( + set DEBUG=1 + echo [⚠️] Debug-Modus aktiv: Ignoriere offene Commits. + exit /b 0 + ) else if "%~1"=="-d" ( + set DEBUG=1 + echo [⚠️] Debug-Modus aktiv: Ignoriere offene Commits. + exit /b 0 + ) else if "%~1"=="-h" ( + call :show_help + exit /b 0 + ) else if "%~1"=="--help" ( + call :show_help + exit /b 0 + ) else ( + rem Parameter vorhanden aber nicht erkannt. + call :kein_Parameter "%~1" + exit /b 1 + ) +) else ( + call :go "%~1" +) + +exit /b 0 + +:go + +call :generate_timestamp +set ZIP_NAME=projektarchiv-%TIMESTAMP%.zip + +rem ------------------------------------------------------------------- + +pushd %~dp0 + +if %DEBUG%==0 ( + echo [🔍] Prüfe auf uncommitted oder ungetrackte Änderungen... + set "hasChanges=" + for /f "delims=" %%i in ('git status --porcelain') do ( + set "hasChanges=1" + goto :has_changes + ) + echo [✅] Arbeitsverzeichnis ist sauber. +) else ( + echo [⚠️] Prüfschritt übersprungen. +) + +goto :create_zip + +:has_changes +echo. +echo [⚠️] Es sind uncommitted oder ungetrackte Änderungen vorhanden: +echo. +git status --short +echo. +echo [❌] Bitte committe oder stash diese Änderungen, bevor du ein ZIP erstellst. +echo [⚠️] versuche --debug um diese Prüfung zu umgehen aber dann wird das Archiv unvollständig. +echo. +endlocal +pause +exit /b 1 + +:create_zip +echo [💾] Erstelle ZIP-Archiv von HEAD... +git archive --format=zip --output="%ZIP_NAME%" HEAD +if errorlevel 1 ( + echo [⚠️] Fehler beim Erstellen des Archivs. + pause + exit /b 1 +) +echo [✅] Archiv erfolgreich erstellt: %CD%\%ZIP_NAME% +popd +endlocal +pause +exit /b 0 + +:generate_timestamp +rem Erzeugt einen Zeitstempel TTMMJJHHMM sicher und universell +for /f "tokens=1-4 delims=. " %%d in ('echo %DATE%') do ( + set "TAG=0%%d" + set "MONAT=0%%e" + set "JAHR=%%f" +) + +for /f "tokens=1-2 delims=: " %%g in ('echo %TIME%') do ( + set "STUNDE=0%%g" + set "MINUTE=0%%h" +) + +set "TAG=!TAG:~-2!" +set "MONAT=!MONAT:~-2!" +set "JAHR=!JAHR:~-2!" +set "STUNDE=!STUNDE:~-2!" +set "MINUTE=!MINUTE:~-2!" + +set "TIMESTAMP=!TAG!!MONAT!!JAHR!!STUNDE!!MINUTE!" +goto :eof + +:kein_Parameter +echo. +echo [⚠️] Unbekannter Parameter: "%~1" abbruch ... +echo. +call :show_help +exit /b 1 + +:show_help +echo. +echo ℹ️ GitCopy – Hilfe +echo ===================== +echo Erstellt ein ZIP-Archiv vom aktuellen HEAD-Stand des Git-Repositories. +echo. +echo Verwendung: +echo gitcopy.bat [Option] +echo. +echo Optionen: +echo --debug / -d Überspringt die Prüfung auf uncommitted oder ungetrackte Änderungen. +echo -h / --help Zeigt diese Hilfe an. +echo. +endlocal +pause +goto :eof + +endlocal \ No newline at end of file diff --git a/manuscript/02_testseiten.md b/manuscript/02_testseiten.md new file mode 100644 index 0000000..e69de29 diff --git a/manuscript/05_vorwort.md b/manuscript/05_vorwort.md index f93b677..42746ae 100644 --- a/manuscript/05_vorwort.md +++ b/manuscript/05_vorwort.md @@ -1,3 +1,3 @@ # Vorwort -Gibt nix zu sagen ... +Vorwort ... diff --git a/manuscript/10_kapitel1.md b/manuscript/10_kapitel1.md index 23c896a..4867a9d 100644 --- a/manuscript/10_kapitel1.md +++ b/manuscript/10_kapitel1.md @@ -1,45 +1,7 @@ # Kapitel 1 -## kurzer Schwenk nach Javascript +Kapitel 1 -### Variablen +## Unterkapitel -#### Deklaration - -```javascript -var name = "Max"; // Alt, meiden! -let zahl = 42; // Modern, veränderbar -const pi = 3.1415; // Konstant, nicht veränderbar -``` - -| Schlüsselwort | Veränderbar | Gültigkeitsbereich | Empfehlung | -| ------------- | ----------- | ---------------------- | ----------------------- | -| `var` | ✔ | Funktion (funktional) | ✖ Nicht mehr verwenden | -| `let` | ✔ | Block (z. B. Schleife) | ✔ Standard | -| `const` | ✖ | Block | ✔ Für Konstanten | - -#### Typen (vereinfacht) - -JS ist dynamisch typisiert, aber man sollte Typen trotzdem kennen: - -| Typ | Beispiel | -| ----------- | ------------------------ | -| `string` | `"Hallo"` | -| `number` | `42`, `3.14` | -| `boolean` | `true`, `false` | -| `object` | `{ name: "Max" }` | -| `array` | `[1, 2, 3]` | -| `undefined` | `let x;` (nicht gesetzt) | -| `null` | `let x = null;` | - ---- - -### Funktionen - -1. Klassische Deklaration - - ```javascript - function greet(name) { - return "Hallo " + name; - } - ``` +Unterkapitel diff --git a/manuscript/20_kapitel2.md b/manuscript/20_kapitel2.md index 4b372bc..b45cf91 100644 --- a/manuscript/20_kapitel2.md +++ b/manuscript/20_kapitel2.md @@ -1,3 +1,7 @@ -# Kapitel 2 - Typescript +# Kapitel 2 -Im Kapitel 1 haben wir gesehen was Javascript in seiner Rohform leistet. +Kapitel 2 + +## Unterkapitel 2.1 + +Unterkapitel diff --git a/manuscript/30_kapitel2.md b/manuscript/30_kapitel2.md index e69de29..c6602f0 100644 --- a/manuscript/30_kapitel2.md +++ b/manuscript/30_kapitel2.md @@ -0,0 +1,3 @@ +# Kapitel 3 + +## Unterkapitel 3 diff --git a/media/logo/logo_256x256.png b/media/logo/logo_256x256.png new file mode 100644 index 0000000..04c882f Binary files /dev/null and b/media/logo/logo_256x256.png differ diff --git a/media/logo/logo_left.png b/media/logo/logo_left.png new file mode 100644 index 0000000..4a23ae8 Binary files /dev/null and b/media/logo/logo_left.png differ diff --git a/metadata/ebook.yaml b/metadata/ebook.yaml index b8e85df..2d8ae7c 100644 --- a/metadata/ebook.yaml +++ b/metadata/ebook.yaml @@ -1,8 +1,8 @@ -title: "eBook Vorlage" -subtitle: "wir scheiben ein Buch" +title: "Vorlage eBook: Titel aus ebook.yaml" +subtitle: "Untertitel aus ebook.yaml - Logo aus .tex" author: "Adam Skotarczak" lang: de-DE -rights: "© 2025 Adam Skotarczak. CC BY-SA 4.0" -date: 2025-05-13 +rights: "© 2000 Adam Skotarczak. CC BY-SA 4.0" +date: 2000-01-01 description: | - Eine Vorlage zum erstellen eines Buchs. + Dieses Buch ist eine Vorlage. diff --git a/styles/print-template.tex b/styles/print-template.tex index 222c105..6dda64b 100644 --- a/styles/print-template.tex +++ b/styles/print-template.tex @@ -35,7 +35,7 @@ $endif$ % Titel \title{ - \includegraphics[width=0.3\textwidth]{media/logo/logo.png} \\[2em] + \includegraphics[width=0.3\textwidth]{media/logo/logo_256x256.png} \\[2em] {\Huge $title$} \\ \vspace{1em} \Large $subtitle$ diff --git a/tools/bmp-emojis.md b/tools/bmp-emojis.md new file mode 100644 index 0000000..ce00a6c --- /dev/null +++ b/tools/bmp-emojis.md @@ -0,0 +1,177 @@ +# ➖ Emojis im Unicode Basic Multilingual Plane (BMP) + +> Diese Liste enthält **alle wichtigen Emojis im BMP-Bereich (U+0000 bis U+FFFF)**. Sie ist besonders geeignet für Markdown-Dokumente, die mit Git versioniert oder als PDF exportiert werden sollen. + +--- + +## ➖ Inhaltsverzeichnis + +- [➖ Emojis im Unicode Basic Multilingual Plane (BMP)](#-emojis-im-unicode-basic-multilingual-plane-bmp) + - [➖ Inhaltsverzeichnis](#-inhaltsverzeichnis) + - [➖ Verwendungshinweis](#-verwendungshinweis) + - [➖ HTML](#-html) + - [➖ Python](#-python) + - [➖ Markdown](#-markdown) + - [➖ Wetter \& Natur](#-wetter--natur) + - [➖ Zeichen \& Objekte](#-zeichen--objekte) + - [➖ Warnung \& Energie](#-warnung--energie) + - [➖ Transport](#-transport) + - [➖ Sport \& Freizeit](#-sport--freizeit) + - [➖ Religion \& Symbole](#-religion--symbole) + - [➖ Gender \& Sternzeichen](#-gender--sternzeichen) + - [➖ Spielkarten \& Schach](#-spielkarten--schach) + - [➖ Diverse Symbole \& Zeichen](#-diverse-symbole--zeichen) + - [➖ Emoticons (U+1F600–U+1F64F)](#-emoticons-u1f600u1f64f) + +## ➖ Verwendungshinweis + +Du kannst Unicode-Emojis auch **ohne Kopieren** verwenden – per Unicode-Codepunkt. Hier eine Übersicht, wie das in verschiedenen Umgebungen funktioniert: + +| Emoji | Unicode | HTML Entity | Python | Bash | LaTeX (xelatex) | +|-------|---------|-------------|--------|------|-----------------| +| ☀️ | U+2600 | `☀` | `\u2600` | `\u2600` | `\char"2600` | +| ☕ | U+2615 | `☕` | `\u2615` | `\u2615` | `\char"2615` | +| ⚙️ | U+2699 | `⚙` | `\u2699` | `\u2699` | `\char"2699` | +| ✂️ | U+2702 | `✂` | `\u2702` | `\u2702` | `\char"2702` | +| ☎️ | U+260E | `☎` | `\u260E` | `\u260E` | `\char"260E` | +| ⚠️ | U+26A0 | `⚠` | `\u26A0` | `\u26A0` | `\char"26A0` | +| ⚽ | U+26BD | `⚽` | `\u26BD` | `\u26BD` | `\char"26BD` | +| ♻️ | U+267B | `♻` | `\u267B` | `\u267B` | `\char"267B` | + +📌 Für Emojis **außerhalb des BMP** (z. B. 😀 = `U+1F600`) musst du in Python/Bash `\U` statt `\u` nutzen (8-stellig). + +### ➖ HTML + +```text +☀ +😀 +``` + +### ➖ Python + +```text +print("\u2600") # ☀️ Sonne (BMP) +print("\U0001F600") # 😀 Grinsendes Gesicht (SMP) +``` + +### ➖ Markdown + +Markdown unterstützt Emojis nicht direkt über Codepunkte – aber wenn dein Editor Unicode versteht, kannst du den Emoji direkt schreiben (☀️, ⚙️, ✂️) oder ihn per HTML-Entity einfügen (wie in HTML oben). + +⚠️ Achtung: Nur manche Markdown-Renderer (z. B. GitHub) zeigen HTML-Entities korrekt an. + +--- + +## ➖ Wetter & Natur + +- ☀️ U+2600 – Sonne +- ☁️ U+2601 – Wolke +- ☂️ U+2602 – Regenschirm +- ☃️ U+2603 – Schneemann +- ☄️ U+2604 – Komet +- ⛄ U+26C4 – Schneemann ohne Schnee +- ⛅ U+26C5 – Sonne hinter Wolke +- ⛈️ U+26C8 – Gewitterwolke + +--- + +## ➖ Zeichen & Objekte + +- ✂️ U+2702 – Schere +- ✉️ U+2709 – Briefumschlag +- ☎️ U+260E – Telefon +- ⚒️ U+2692 – Hammer und Picke +- ⚓ U+2693 – Anker +- ⚖️ U+2696 – Waage +- ⚗️ U+2697 – Retorte +- ⚙️ U+2699 – Zahnrad +- ⚰️ U+26B0 – Sarg +- ⚱️ U+26B1 – Urne +- ⚔️ U+2694 – Gekreuzte Schwerter + +--- + +## ➖ Warnung & Energie + +- ⚡ U+26A1 – Hochspannung +- ⚠️ U+26A0 – Warnung +- ⛔ U+26D4 – Kein Zutritt + +--- + +## ➖ Transport + +- ✈️ U+2708 – Flugzeug +- ⛟ U+26DF – Lieferwagen +- ⛴️ U+26F4 – Fähre +- ⛵ U+26F5 – Segelboot +- ⛷️ U+26F7 – Skifahrer +- ⛸️ U+26F8 – Schlittschuhe +- ⛹️ U+26F9 – Ballspielende Person +- ⛽ U+26FD – Zapfsäule + +--- + +## ➖ Sport & Freizeit + +- ⚽ U+26BD – Fußball +- ⚾ U+26BE – Baseball +- ⛳ U+26F3 – Golfplatz +- ⛲ U+26F2 – Springbrunnen +- ⛺ U+26FA – Zelt + +--- + +## ➖ Religion & Symbole + +- ☮️ U+262E – Friedenssymbol +- ☯️ U+262F – Yin-Yang +- ☪️ U+262A – Halbmond mit Stern +- ✝️ U+271D – Kreuz + +--- + +## ➖ Gender & Sternzeichen + +- ♀️ U+2640 – Weiblich +- ♂️ U+2642 – Männlich +- ⚧️ U+26A7 – Transgender-Symbol +- ♈ – ♓ U+2648–U+2653 – Tierkreiszeichen (Widder bis Fische) + +--- + +## ➖ Spielkarten & Schach + +- ♠️ U+2660 – Pik +- ♣️ U+2663 – Kreuz +- ♥️ U+2665 – Herz +- ♦️ U+2666 – Karo +- ♟️ U+265F – Schwarzer Bauer + +--- + +## ➖ Diverse Symbole & Zeichen + +- ✨ U+2728 – Funkeln +- ❗ U+2757 – Ausrufezeichen +- ❓ U+2753 – Fragezeichen +- ❌ U+274C – Kreuzzeichen +- ✅ U+2705 – Haken +- ➕ U+2795 – Pluszeichen +- ➖ U+2796 – Minuszeichen +- ➗ U+2797 – Divisionszeichen +- ➡️ U+27A1 – Pfeil nach rechts +- ⬅️ U+2B05 – Pfeil nach links (**grenzwertig BMP**) + +--- + +## ➖ Emoticons (U+1F600–U+1F64F) + +Hinweis: Diese befinden sich **nicht im BMP**, sondern im Supplementary Multilingual Plane (SMP). + +Wenn du Emojis aus `U+1F600` und höher verwendest (Gesichter, Tiere, Gesten etc.), beachte, dass sie bei älteren Systemen oder PDF-Exporten ohne passende Schriftart ggf. nicht korrekt dargestellt werden. + +--- + +Diese Liste ist **Markdown-, Git- und PDF-freundlich**. Du kannst sie frei verwenden, erweitern oder in dein Projekt einbauen. +(C) 2025 Adam Skotarczak diff --git a/tools/cli-emojis.md b/tools/cli-emojis.md new file mode 100644 index 0000000..0c889c1 --- /dev/null +++ b/tools/cli-emojis.md @@ -0,0 +1,154 @@ +# 📁 CLI Emojis (CLI Programmer Emojis) + +> Adam Skotarczak private Emojis for monochrome Display + Diese Liste ist Teil des "Become-Writer-Projekt" + +## 📁 Inhalt + +- [📁 CLI Emojis (CLI Programmer Emojis)](#-cli-emojis-cli-programmer-emojis) + - [📁 Inhalt](#-inhalt) + - [📝 Commonly Used Emoji for CLI/Terminal Applications](#-commonly-used-emoji-for-cliterminal-applications) + - [📝 1-2 Bye - Unicode Basic Symbols for CLI or Monochrome Safe Emojis](#-1-2-bye---unicode-basic-symbols-for-cli-or-monochrome-safe-emojis) + - [📁 Anleitung: Unicode in CLI-Programmen richtig behandeln](#-anleitung-unicode-in-cli-programmen-richtig-behandeln) + - [📝 Wichtig für CLI-Projekte:](#-wichtig-für-cli-projekte) + +## 📝 Commonly Used Emoji for CLI/Terminal Applications + +Eine Liste von Emojis, die in fast jeder CLI (Terminal/Konsole) problemlos funktionieren, weil sie UTF-8 kompatibel sind und keine Sonderbehandlungen wie Farbcodes brauchen: + +| Emoji | Beschreibung | Unicode Codepoint | UTF-8 Escape | +|:------|:-----------------------|:------------------|:----------------| +| ✅ | Checkmark | U+2705 | \u2705 | +| ❌ | Crossmark | U+274C | \u274C | +| ⚠️ | Warnung | U+26A0 U+FE0F | \u26A0\uFE0F | +| ℹ️ | Information | U+2139 U+FE0F | \u2139\uFE0F | +| 🔥 | Feuer | U+1F525 | \u1F525 | +| 🚀 | Rakete | U+1F680 | \u1F680 | +| 🔧 | Schraubenschlüssel | U+1F527 | \u1F527 | +| 🛠️ | Hammer und Schraubenschlüssel | U+1F6E0 U+FE0F | \u1F6E0\uFE0F | +| 💾 | Diskette / Speichern | U+1F4BE | \u1F4BE | +| 📦 | Paket | U+1F4E6 | \u1F4E6 | +| 🔒 | Schloss (geschlossen) | U+1F512 | \u1F512 | +| 🔓 | Schloss (offen) | U+1F513 | \u1F513 | +| 🔍 | Lupe / Suche | U+1F50D | \u1F50D | +| 📁 | Ordner | U+1F4C1 | \u1F4C1 | +| 📂 | Geöffneter Ordner | U+1F4C2 | \u1F4C2 | +| 📝 | Notiz / Bearbeiten | U+1F4DD | \u1F4DD | +| ✏️ | Bleistift | U+270F U+FE0F | \u270F\uFE0F | +| 📊 | Balkendiagramm | U+1F4CA | \u1F4CA | +| 📈 | Kurve aufwärts | U+1F4C8 | \u1F4C8 | +| 📉 | Kurve abwärts | U+1F4C9 | \u1F4C9 | +| ⏳ | Sanduhr läuft | U+23F3 | \u23F3 | +| ⌛ | Sanduhr abgelaufen | U+231B | \u231B | +| 🕐 | Uhrzeit 1 Uhr | U+1F550 | \u1F550 | +| 🔄 | Wiederholen / Refresh | U+1F504 | \u1F504 | +| ♻️ | Recycling | U+267B U+FE0F | \u267B\uFE0F | +| 🎯 | Zielscheibe | U+1F3AF | \u1F3AF | +| 🚧 | Baustelle | U+1F6A7 | \u1F6A7 | +| 🏁 | Zielflagge | U+1F3C1 | \u1F3C1 | +| 💡 | Glühbirne / Idee | U+1F4A1 | \u1F4A1 | +| 🎉 | Party / Feier | U+1F389 | \u1F389 | +| 🤖 | Roboter | U+1F916 | \u1F916 | + +- Anmerkungen: + - Alle oben genannten Emojis sind Unicode-Standard. + - Sie funktionieren in Linux, macOS und modernen Windows-Terminals (ab Windows 10/11, UTF-8 aktiviert). + - Alte Konsolen wie cmd.exe auf Windows 7 oder unkonfigurierte Linux-SSH-Sitzungen könnten manchmal Probleme machen. In modernen Umgebungen ist das aber kein Thema mehr. + +--- + +## 📝 1-2 Bye - Unicode Basic Symbols for CLI or Monochrome Safe Emojis + +**CLI-Safe Unicode Symbols oder Terminal-Safe Emojis.** + +Eine minimalistische Emoji-Liste (nur mit extrem simplen Unicode-Symbolen, oft 1 oder 2 Byte) ist erforderlich oder empfehlenswert, wenn: + +**Alte Umgebungen genutzt werden:** + +- z.B. Windows 7 cmd.exe +- Minimalistische SSH-Clients (z.B. Putty ohne UTF-8-Einstellung) +- Barebone-Server ohne Unicode-Konfiguration +- Minimale Schriftarten verwendet werden: +- Schriftarten, die keine komplexen Emojis darstellen können (nur Basic Unicode) +- CLI-Tools auf Embedded-Devices laufen: +- z.B. Raspberry Pi Konsolen ohne vollständige Locale + +**Performance/Übertragungsoptimierung wichtig ist:** + +- z.B. extrem dünne Netzwerkverbindungen (Telnet, MUD-Server, BBS-Clients) +- Absolute Kompatibilität mit Piped-Ausgaben (|, >, tee, etc.) gewünscht ist, ohne Zeichensalat zu riskieren + +| Emoji | Beschreibung | Unicode Codepoint | UTF-8 Escape | +|:------|:---------------------|:------------------|:----------------| +| ✔️ | Checkmark | U+2714 U+FE0F | \u2714\uFE0F | +| ✖️ | Crossmark | U+2716 U+FE0F | \u2716\uFE0F | +| ⚠️ | Warnung | U+26A0 U+FE0F | \u26A0\uFE0F | +| ℹ️ | Information | U+2139 U+FE0F | \u2139\uFE0F | +| 💾 | Floppy Disk / Save | U+1F4BE | \u1F4BE | +| 📦 | Paket | U+1F4E6 | \u1F4E6 | +| 🔒 | Schloss (geschlossen) | U+1F512 | \u1F512 | +| 🔍 | Lupe / Suche | U+1F50D | \u1F50D | +| 📝 | Notiz / Bearbeiten | U+1F4DD | \u1F4DD | +| ✏️ | Bleistift | U+270F U+FE0F | \u270F\uFE0F | +| 📁 | Ordner | U+1F4C1 | \u1F4C1 | +| ⏳ | Sanduhr läuft | U+23F3 | \u23F3 | +| ⌛ | Sanduhr abgelaufen | U+231B | \u231B | +| 🏁 | Zielflagge | U+1F3C1 | \u1F3C1 | +| 💡 | Idee / Glühbirne | U+1F4A1 | \u1F4A1 | + +**Diese Symbole sind:** + +- UTF-8 kompatibel +- terminal-sicher (auch in alten Konsolen) +- monochrom-darstellbar (keine Farbgrafiken erforderlich) +- für den Einsatz in CLI-Programmen optimiert (piped output, Logging, SSH) + +**Bezeichnung (offiziell oder gebräuchlich):** + +- Unicode Basic Symbols +- CLI-Safe Unicode Symbols +- Terminal-Safe Emojis +- Monochrome Unicode Icons +- Lightweight Unicode Icons + +--- + +## 📁 Anleitung: Unicode in CLI-Programmen richtig behandeln + +### 📝 Wichtig für CLI-Projekte: + +- **Python**: + Sicherstellen, dass `stdout` auf UTF-8 eingestellt ist (sonst Encoding-Fehler möglich): + + ```python + import sys + if hasattr(sys.stdout, "reconfigure"): + sys.stdout.reconfigure(encoding='utf-8') + ``` + +- **Node.js**: + Node unterstützt UTF-8 in Terminals nativ, aber sicherstellen, dass `process.stdout` nicht umgeleitet oder manipuliert wird. + +- **C# (.NET Core)**: + Konsole explizit auf UTF-8 setzen: + + ```csharp + Console.OutputEncoding = System.Text.Encoding.UTF8; + ``` + +- **Shell / Bash**: + UTF-8 Locale erzwingen: + + ```bash + export LANG=en_US.UTF-8 + export LC_ALL=en_US.UTF-8 + ``` + +- **Windows** (cmd/powershell): + Powershell versteht UTF-8 gut. Bei `cmd.exe`: + + ```cmd + chcp 65001 + ``` + +--- diff --git a/tools/dev-setup.sh b/tools/dev-setup.sh new file mode 100644 index 0000000..c98db13 --- /dev/null +++ b/tools/dev-setup.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +# dev-setup.sh +# Erstellt Git-Hook, der beim Branchwechsel eine Datei mit dem Branch-Namen erstellt + +HOOK_PATH=".git/hooks/post-checkout" + +echo "⚙️ Richte Git-Hook ein für Branch-Datei (z. B. BRANCH-MAIN)..." + +# Prüfe ob .git-Verzeichnis existiert +if [ ! -d .git ]; then + echo "❌ Dieses Skript muss im Root eines Git-Repositories ausgeführt werden." + exit 1 +fi + +# Hook-Inhalt +read -r -d '' HOOK_SCRIPT <<'EOF' +#!/bin/sh +branch=$(git rev-parse --abbrev-ref HEAD) + +# Entferne alte BRANCH-* Dateien +rm -f BRANCH-* + +# Erzeuge neue Datei mit aktuellem Branchnamen +touch "BRANCH-${branch}" +EOF + +# Hook schreiben +echo "$HOOK_SCRIPT" > "$HOOK_PATH" +chmod +x "$HOOK_PATH" + +echo "✅ Git-Hook erstellt: $HOOK_PATH" +echo "📄 Beispiel: BRANCH-main wird erstellt beim Wechsel auf 'main'"