mirror of
https://github.com/irssi/irssi.git
synced 2026-08-10 04:13:32 +02:00
169 lines
5.3 KiB
Markdown
169 lines
5.3 KiB
Markdown
# KOMPLEKSOWY PLAN IMPLEMENTACJI - NOWE PODEJŚCIE
|
|
|
|
## WYTYCZNE OBOWIĄZKOWE:
|
|
1. **Zawsze pamiętaj kontekst**: `msg_flow.md` i `summary.md`
|
|
2. **Nie zbaczaj z wyznaczonej ścieżki** - trzymaj się planu
|
|
3. **Checkpoint commits**: Po zmianach commit z pushem zawierający info o zmianach i timestamp (data + dokładna godzina)
|
|
4. **ZAKAZ `ninja Build install`** - tylko build do sprawdzenia błędów kompilacji
|
|
|
|
## ANALIZA PROBLEMU
|
|
|
|
**KLUCZOWA OBSERWACJA**: Po analizie `msg_flow.md` i `summary.md` widzę, że:
|
|
|
|
1. ❌ **`parse_special` + `ALIGN_COMBINE_MODE`** - już próbowane, problem z kolorami
|
|
2. ❌ **Expandos** - nie mają dostępu do `arglist`, zwracają puste stringi
|
|
3. ✅ **NOWE ROZWIĄZANIE**: Modyfikacja na poziomie **`format_get_text_args`** (krok 10 w flow)
|
|
|
|
## STRATEGIA: INTEGRACJA Z ARGUMENTAMI FORMATOWANIA
|
|
|
|
### KLUCZOWA IDEA:
|
|
Zamiast modyfikować `parse_special` lub tworzyć expandos, **wstrzykniemy dodatkowy parametr padding bezpośrednio do `arglist`** w `format_get_text_args()`.
|
|
|
|
## PLAN IMPLEMENTACJI
|
|
|
|
### FAZA 1: Przygotowanie Infrastruktury
|
|
|
|
#### 1.1 Dodanie ustawień konfiguracyjnych
|
|
**Plik**: `src/fe-common/core/fe-settings.c`
|
|
```c
|
|
// Dodać do settings_add_*():
|
|
settings_add_bool("lookandfeel", "nick_column_enabled", FALSE);
|
|
settings_add_int("lookandfeel", "nick_column_width", 12);
|
|
```
|
|
|
|
#### 1.2 Dodanie flag do TEXT_DEST_REC
|
|
**Plik**: `src/fe-common/core/printtext.h`
|
|
```c
|
|
typedef struct {
|
|
// ... istniejące pola
|
|
int flags; // nowe pole dla flag formatowania
|
|
} TEXT_DEST_REC;
|
|
|
|
#define PRINT_FLAG_NICK_COLUMN 0x01
|
|
```
|
|
|
|
### FAZA 2: Modyfikacja Flow Formatowania
|
|
|
|
#### 2.1 Ustawienie flagi w obsłudze wiadomości
|
|
**Plik**: `src/fe-common/core/fe-messages.c`
|
|
|
|
W funkcjach `sig_message_public()` i `sig_message_own_public()`:
|
|
```c
|
|
// Po utworzeniu dest przez format_create_dest()
|
|
if (settings_get_bool("nick_column_enabled")) {
|
|
dest.flags |= PRINT_FLAG_NICK_COLUMN;
|
|
}
|
|
```
|
|
|
|
#### 2.2 Główna logika w format_get_text_args
|
|
**Plik**: `src/fe-common/core/formats.c`
|
|
|
|
W funkcji `format_get_text_args()` (krok 10 flow), **PRZED** pętlą parsowania:
|
|
|
|
```c
|
|
// Sprawdź czy nick column jest włączony
|
|
if (dest && (dest->flags & PRINT_FLAG_NICK_COLUMN)) {
|
|
// Znajdź parametry mode i nick w arglist
|
|
char *mode = NULL, *nick = NULL;
|
|
|
|
// Dla TXT_PUBMSG: args[0]=nick, args[3]=nickmode
|
|
// Dla TXT_OWN_MSG: args[0]=nick, args[3]=nickmode
|
|
if (args && args[0] && args[3]) {
|
|
nick = args[0];
|
|
mode = args[3];
|
|
|
|
// Oblicz padding
|
|
int width = settings_get_int("nick_column_width");
|
|
int mode_len = strlen(mode);
|
|
int nick_len = strlen(nick);
|
|
int total_len = mode_len + nick_len;
|
|
|
|
if (total_len < width) {
|
|
int padding_len = width - total_len;
|
|
char *padding = g_strnfill(padding_len, ' ');
|
|
|
|
// Wstrzyknij padding jako nowy parametr na początku
|
|
// Przesuń wszystkie argumenty o 1 pozycję w prawo
|
|
// args[0] = padding, args[1] = nick, args[4] = mode
|
|
// Theme będzie używać: $0 (padding) + $4 (mode) + $1 (nick)
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### FAZA 3: Modyfikacja Theme
|
|
|
|
#### 3.1 Aktualizacja abstracts w default.theme
|
|
```theme
|
|
# Gdy nick_column_enabled = ON, argumenty są przesunięte:
|
|
# $0 = padding (nowy)
|
|
# $1 = nick (przesunięty z $0)
|
|
# $4 = mode (przesunięty z $3)
|
|
|
|
# Podstawowy abstract z padding
|
|
msgnick = "%K<%n$0%B$4%N%g$1%K>%n %|";
|
|
|
|
# Own messages
|
|
ownmsgnick = "{msgnick $0 $4 $1}";
|
|
|
|
# Public messages
|
|
pubmsgnick = "{msgnick $0 $4 $1}";
|
|
```
|
|
|
|
### FAZA 4: Testowanie i Debugowanie
|
|
|
|
#### 4.1 Dodanie debug outputu
|
|
```c
|
|
// W format_get_text_args() dodać:
|
|
if (settings_get_bool("debug_nick_column")) {
|
|
printf("DEBUG: nick_column - padding='%s', mode='%s', nick='%s'\n",
|
|
padding, mode, nick);
|
|
}
|
|
```
|
|
|
|
#### 4.2 Checkpoint commit
|
|
```bash
|
|
git add -A
|
|
git commit -m "[nick_column] FAZA 1-4: Infrastruktura + logika padding - 2025-01-24 15:30"
|
|
git push origin irssip
|
|
```
|
|
|
|
## HARMONOGRAM IMPLEMENTACJI
|
|
|
|
### Dzień 1: Infrastruktura
|
|
- [ ] Dodanie ustawień (`nick_column_enabled`, `nick_column_width`)
|
|
- [ ] Dodanie flag do `TEXT_DEST_REC`
|
|
- [ ] Checkpoint commit
|
|
|
|
### Dzień 2: Logika formatowania
|
|
- [ ] Modyfikacja `sig_message_public()` i `sig_message_own_public()`
|
|
- [ ] Implementacja logiki padding w `format_get_text_args()`
|
|
- [ ] Checkpoint commit
|
|
|
|
### Dzień 3: Theme i testowanie
|
|
- [ ] Aktualizacja `default.theme`
|
|
- [ ] Dodanie debug outputu
|
|
- [ ] Build test (bez install)
|
|
- [ ] Checkpoint commit
|
|
|
|
## PRZEWIDYWANE WYZWANIA
|
|
|
|
### 1. Przesunięcie argumentów
|
|
**Problem**: Wstrzyknięcie padding przesuwa wszystkie argumenty
|
|
**Rozwiązanie**: Dokładne mapowanie argumentów w theme
|
|
|
|
### 2. Kompatybilność wsteczna
|
|
**Problem**: Theme musi działać z wyłączonym nick_column
|
|
**Rozwiązanie**: Warunki w theme lub osobne abstracts
|
|
|
|
### 3. Różne formaty wiadomości
|
|
**Problem**: `TXT_PUBMSG`, `TXT_OWN_MSG`, `TXT_PUBMSG_HILIGHT` mają różne argumenty
|
|
**Rozwiązanie**: Mapowanie per format type
|
|
|
|
## KRYTERIA SUKCESU
|
|
|
|
✅ **Wyrównanie działa** - nicki wyrównane do prawej w kolumnie
|
|
✅ **Kolory zachowane** - osobne kolory dla mode i nick
|
|
✅ **Konfigurowalność** - szerokość przez ustawienia
|
|
✅ **Kompatybilność** - działa z wyłączonym nick_column
|
|
✅ **Brak wpływu na resztę** - standardowe formatowanie nietknięte
|