# irssip - Informacje Krytyczne dla Rozwoju I Implementacji
## Zasady Separacji od Systemowego irssi
Nie używamy nazwy binarnej `irssi` ani standardowych folderów, w których instaluje się oryginalne irssi. Nie używamy również `~/.irssi` jako katalogu domowego. Wszystko po to, by rozwój nie kolidował z systemowym irssi i jego bibliotekami (używamy nowszej wersji niż pakiet zainstalowany).
### Konwencje Nazewnictwa
Plik binarny oraz podstawowa nazwa dla używanych katalogów to **irssip** (od irssi panels):
- Plik binarny: `irssip`
- Katalog instalacji: `/opt/irssip`
- Katalog domowy: `~/.irssip`
### Konfiguracja Środowiska Deweloperskiego
Dla przyspieszenia i ułatwienia testów na żywo, pliki config i default.theme w rzeczywistości znajdują się w naszym workspace:
W przypadku zmian wymagających modyfikacji plików config lub theme, edytujemy:
-`/Users/kfn/irssi/config_dev`
-`/Users/kfn/irssi/themes/default.theme`
## Aktualne Zmiany względem Standardowego irssi
### 1. Natywna Obsługa Paneli Bocznych
- **Panel lewy**: Lista okien/kanałów/query z sortowaniem i obsługą myszy
- **Panel prawy**: Lista nicków (nicklist)
- **Cel**: Efekt podobny do WeeChat - łatwe przemieszczanie się po kanałach i query
- **Funkcjonalność**: Klik na element przenosi do okna lub otwiera nowe query
### 2. Modyfikacja Wyświetlania WHOIS
Wyświetlanie outputu komendy whois w aktualnie aktywnym oknie zamiast w oknie status czy sieci
## Aktualny Projekt: Wyrównanie Nicków w Oknie Czatu
### Cel Implementacji
Stała szerokość pola z nickiem osoby piszącej na kanale z wyrównaniem do prawej, aby uzyskać efekt jednej kolumny dla wszystkich wiadomości bez konieczności używania zewnętrznych skryptów jak nm2.
### Oczekiwany Efekt Wizualny
```
22:11:35 @yooz │ no działa ;]
22:12:24 @nosfar │ starsze rzeczy ;p
22:12:38 @yooz │ to zamknij oczy
22:14:22 DMZ │ ✅ Link dodany do bazy!
22:14:22 +iBot │ YouTube Tytuł: LIVE Gemini
22:14:22 LinkShor> │ Skrócony link dla yooz: https://tinyurl.com/yrqbfxeb
```
Alternatywny przykład z nawiasami kątowymi i skróceniem długiego nicka dodatkowy > informuje że to nie pełny nick:
- Dodano obszerną dokumentację i komentarze dotyczące dostosowania kolorów
## Próby Implementacji
### Próba 1: Natywny Mechanizm $[]
Początkowo próbowano użyć standardowego wyrównania irssi: `$[-12]0` i `$[-12]1`
**Problem**: Natywne wyrównanie oddzielało tryb od nicka podczas wyrównywania:
```
Wynik: <@ kofany> # Tryb z lewej, nick wyrównany do prawej osobno
Wymagane: < @kofany> # Wszystko razem, wyrównane do prawej
```
### Próba 2: Rozszerzenie ALIGN_COMBINE_MODE
Rozszerzono `parse_special()` aby łączyć tryb+nick przed zastosowaniem wyrównania używając flagi `&`.
**Osiągnięcie**: Pomyślnie utworzono wyrównane do prawej połączone tryb+nick z odpowiednim wypełnieniem i obcięciem.
**Obecna Ściana**: Ograniczenie interpretacji kolorów w systemie motywów.
### Co Mamy Teraz przykład:
```themes
ownmsgnick = "{msgnick %B$0%N%g$1-%N}%g";
```
Z ALIGN_COMBINE_MODE, `$0` staje się połączonym stringiem `"@kofany"`, więc:
-`%B$0%N` koloruje całe `"@kofany"` na niebiesko
-`%g$1-%N` jest ignorowane (puste po połączeniu)
- **Wynik**: `< @kofany>` gdzie zarówno @ jak i nick są niebieskie
### Czego Potrzebujemy:
```
Oczekiwane: < @kofany> gdzie @ jest niebieski (%B) a nick jest zielony (%g)
```
### Główny Problem:
Po połączeniu tryb+nick w kodzie C, motyw otrzymuje jeden parametr zawierający `"@kofany"` jako pojedynczy string. Abstrakcje motywu nie mogą zastosować osobnych kolorów do części połączonego stringa - mogą tylko kolorować cały parametr.
## Wyzwanie Techniczne
Fundamentalny konflikt:
1.**Wymóg wyrównania w obecnej implementacji**: Tryb i nick muszą być połączone przed wyrównaniem aby osiągnąć `< @nick>` a nie `<@ nick>`
2.**Wymóg kolorów**: Tryb i nick potrzebują osobnego formatowania kolorów z abstrakcji motywu
3.**Obecne ograniczenie**: Po połączeniu w C, motyw widzi pojedynczy string i nie może zastosować osobnych kolorów