mirror of
https://github.com/irssi/irssi.git
synced 2026-08-22 01:52:19 +02:00
[2025-08-24 21:00:15] Inicjalizacja kolejnej próby - przywrócenie dokumentacji i plików roboczych
This commit is contained in:
parent
4f8ef0ccb7
commit
4032558538
5 changed files with 785 additions and 39 deletions
169
plan3.md
Normal file
169
plan3.md
Normal file
|
|
@ -0,0 +1,169 @@
|
|||
# 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
|
||||
Loading…
Add table
Add a link
Reference in a new issue