5.3 KiB
KOMPLEKSOWY PLAN IMPLEMENTACJI - NOWE PODEJŚCIE
WYTYCZNE OBOWIĄZKOWE:
- Zawsze pamiętaj kontekst:
msg_flow.mdisummary.md - Nie zbaczaj z wyznaczonej ścieżki - trzymaj się planu
- Checkpoint commits: Po zmianach commit z pushem zawierający info o zmianach i timestamp (data + dokładna godzina)
- 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:
- ❌
parse_special+ALIGN_COMBINE_MODE- już próbowane, problem z kolorami - ❌ Expandos - nie mają dostępu do
arglist, zwracają puste stringi - ✅ 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
// 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
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():
// 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:
// 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
# 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
// 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
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()isig_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