mirror of
https://github.com/irssi/irssi.git
synced 2026-08-08 19:30:15 +02:00
Clean up branch for pull request
This commit is contained in:
parent
02b1692dfd
commit
c3e321d6b5
8 changed files with 32 additions and 919 deletions
|
|
@ -1,197 +0,0 @@
|
|||
---
|
||||
type: "always_apply"
|
||||
---
|
||||
|
||||
# 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:
|
||||
|
||||
```bash
|
||||
ls -la /Users/kfn/.irssip/config
|
||||
lrwxr-xr-x 1 kfn staff 27 Aug 23 22:13 /Users/kfn/.irssip/config -> /Users/kfn/irssi/config_dev
|
||||
|
||||
ls -la /Users/kfn/.irssip/default.theme
|
||||
lrwxr-xr-x 1 kfn staff 37 Aug 23 02:59 /Users/kfn/.irssip/default.theme -> /Users/kfn/irssi/themes/default.theme
|
||||
```
|
||||
|
||||
## Filozofia Rozwoju
|
||||
|
||||
### Zasady KISS (Keep It Simple Stupid)
|
||||
- Wszelkie wprowadzane zmiany/funkcje mają oddawać ducha prostoty
|
||||
- Implementacje nie mogą zmieniać działania istniejących mechanizmów
|
||||
- Zachowanie wstecznej kompatybilności jest priorytetem
|
||||
- Nowe funkcje powinny być opcjonalne - możliwe do wyłączenia w ustawieniach lub nieaktywne do czasu wywołania
|
||||
|
||||
### Proces Deweloperski
|
||||
1. **Checkpointy**: Przed wprowadzaniem większych zmian zawsze robimy commit roboczy
|
||||
2. **Testowanie**: Tylko ja testuję wprowadzone zmiany. Ty możesz testować Build lokalnie bez instalacji
|
||||
3. **Budowanie**: Proces budowania do testów:
|
||||
```bash
|
||||
sudo rm -rf /opt/irssip && rm -rf $(pwd)/Build && \
|
||||
meson setup $(pwd)/Build -Dprefix=/opt/irssip -Dwith-perl=yes -Dwith-proxy=yes && \
|
||||
ninja -C Build && sudo ninja -C Build install
|
||||
```
|
||||
|
||||
### Pliki Konfiguracyjne
|
||||
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:
|
||||
```
|
||||
21:36:06> < @kofany> bittersweets outstript
|
||||
21:36:16> < @kofany> sarcomas oven's pebble's
|
||||
21:37:46> <+testNick>> truncation's debarked Allie
|
||||
21:37:56> <+testNick>> griming surtax's intermediary's
|
||||
```
|
||||
|
||||
### Wymagania Techniczne
|
||||
- Implementacja **musi** wspierać aktualne formatowanie linii w theme
|
||||
- Zachowanie kompatybilności z istniejącymi motywami
|
||||
- Możliwość konfiguracji szerokości pola wyświetlania nicka z formatowamiem.
|
||||
- Obsługa długich nicków z obcinaniem i wskaźnikiem
|
||||
|
||||
## Dotychczasowe Próby Implementacji
|
||||
|
||||
[Tu następuje szczegółowa dokumentacja techniczna z poprzedniego dokumentu]
|
||||
|
||||
## Standardowe Formatowanie Wiadomości irssi
|
||||
```
|
||||
# Oryginalny format (bez wyrównania):
|
||||
msgnick = "%K<%n$0$1-%K>%n %|";
|
||||
ownmsgnick = "{msgnick $0 $1-}%g";
|
||||
|
||||
# Parametry: $0=tryb(mode) (@,+), $1=nick, wynik: <@nick> wiadomość
|
||||
```
|
||||
|
||||
## Zmodyfikowane Pliki
|
||||
|
||||
### 1. `/src/core/special-vars.h`
|
||||
- Dodano flagę `#define ALIGN_COMBINE_MODE 0x10`
|
||||
- Rozszerzono system wyrównywania o obsługę kombinacji tryb+nick
|
||||
|
||||
### 2. `/src/core/special-vars.c`
|
||||
- Zmodyfikowano `get_alignment_args()` aby parsować flagę '&': `*flags |= ALIGN_COMBINE_MODE`
|
||||
- Zaimplementowano logikę kombinacji w `parse_special()`:
|
||||
- Pobiera tryb z `arglist[2]` i nick z `arglist[0]`
|
||||
- Oblicza dostępną przestrzeń: `total_width - mode_len - 2` (dla nawiasów)
|
||||
- Wyrównuje do prawej z wypełnieniem: `" @nick"`
|
||||
- Obcina długie nicki: `"@bardzodlu+"`
|
||||
- Zwraca połączony string do przetworzenia przez motyw
|
||||
|
||||
### 3. `/themes/default.theme`
|
||||
- Zaktualizowano komendy formatowania używając składni `$[~&12]0`:
|
||||
```
|
||||
own_msg = "{ownmsgnick $[~&12]0}$1";
|
||||
pubmsg = "{pubmsgnick $[~&12]0}$1";
|
||||
```
|
||||
- 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
|
||||
|
||||
## HISTORIA PRÓB IMPLEMENTACJI
|
||||
|
||||
### PRÓBA 1: Parse Special + ALIGN_COMBINE_MODE (2025-01-24)
|
||||
**Podejście**: Modyfikacja `parse_special()` z flagą `&` do łączenia mode+nick przed wyrównaniem.
|
||||
**Problem**: Ograniczenie interpretacji kolorów - po połączeniu mode+nick w jeden string, theme nie może zastosować osobnych kolorów.
|
||||
**Status**: ❌ Niepowodzenie
|
||||
|
||||
### PRÓBA 2: Expandos bez kontekstu (wcześniej)
|
||||
**Podejście**: Tworzenie expandos `nick_with_mode`, `nick_padding` itp.
|
||||
**Problem**: Expandos nie mają dostępu do `arglist` z formatowania - zwracają puste stringi.
|
||||
**Status**: ❌ Niepowodzenie
|
||||
|
||||
### PRÓBA 3: Modyfikacja format_get_text_args (2025-01-24)
|
||||
**Podejście**: Wstrzyknięcie dodatkowego parametru padding do `arglist` w `format_get_text_args()`.
|
||||
**Problem**: Błędna analiza argumentów - myślałem że `$0=nick`, ale `$0=mode`, `$1=nick`. Przesuwanie argumentów psuło mapowanie.
|
||||
**Status**: ❌ Niepowodzenie - fundamentalnie błędne założenia
|
||||
|
||||
### WNIOSKI Z NIEPOWODZEŃ:
|
||||
1. **Modyfikacja argumentów formatowania jest ryzykowna** - łatwo zepsuć istniejące mapowanie
|
||||
2. **Expandos bez kontekstu nie działają** - potrzebują dostępu do aktualnych danych message
|
||||
3. **Analiza flow musi być dokładna** - błędne założenia prowadzą do niefunkcjonalnych rozwiązań
|
||||
|
||||
## AKTUALNE USTALENIA (2025-01-24)
|
||||
|
||||
### Rekomendowane Rozwiązanie: Expandos z kontekstem sygnałów
|
||||
**INSPIRACJA**: Skrypt nm2.pl pokazuje właściwe podejście - expandos + sygnały + dynamiczne przepisywanie formatów.
|
||||
|
||||
**KLUCZOWA IDEA**:
|
||||
Zamiast modyfikować argumenty, stworzyć expando który zwraca gotowy string z paddingiem, mode i nickiem.
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
|
||||
# Don't index SpecStory auto-save files, but allow explicit context inclusion via @ references
|
||||
.specstory/**
|
||||
4
.specstory/.gitignore
vendored
4
.specstory/.gitignore
vendored
|
|
@ -1,4 +0,0 @@
|
|||
# SpecStory project identity file
|
||||
/.project.json
|
||||
# SpecStory explanation file
|
||||
/.what-is-this.md
|
||||
12
.vscode/settings.json
vendored
12
.vscode/settings.json
vendored
|
|
@ -1,12 +0,0 @@
|
|||
{
|
||||
"editor.codeLensFontFamily": "FiraCode Nerd Font Mono",
|
||||
"editor.inlayHints.fontFamily": "FiraCode Nerd Font Mono",
|
||||
"editor.inlineSuggest.fontFamily": "FiraCode Nerd Font Mono",
|
||||
"debug.console.fontFamily": "FiraCode Nerd Font Mono",
|
||||
"scm.inputFontFamily": "FiraCode Nerd Font Mono",
|
||||
"terminal.integrated.fontFamily": "FiraCode Nerd Font Mono",
|
||||
"notebook.markup.fontFamily": "FiraCode Nerd Font Mono",
|
||||
"notebook.output.fontFamily": "FiraCode Nerd Font Mono",
|
||||
"chat.editor.fontFamily": "FiraCode Nerd Font Mono",
|
||||
"terminal.integrated.fontLigatures.enabled": true
|
||||
}
|
||||
32
GEMINI.md
Normal file
32
GEMINI.md
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
## Project Overview
|
||||
|
||||
Irssi is a modular chat client written in C. It is primarily an IRC client, but also supports other protocols like ICB, SILC, XMPP, PSYC, and Quassel through third-party modules. It has a text-based user interface and is highly extensible with Perl scripts.
|
||||
|
||||
The project uses the Meson build system. The main dependencies are GLib, OpenSSL, and Perl.
|
||||
|
||||
## Building and Running
|
||||
|
||||
To build and run the project, you need to have Meson, Ninja, and the required dependencies installed.
|
||||
|
||||
**Building:**
|
||||
|
||||
```bash
|
||||
meson Build
|
||||
ninja -C Build
|
||||
```
|
||||
|
||||
**Running:**
|
||||
|
||||
```bash
|
||||
sudo ninja -C Build install
|
||||
```
|
||||
|
||||
## Development Conventions
|
||||
|
||||
The project follows the GNU General Public License. The code style is not explicitly defined, but the existing code seems to follow a consistent style.
|
||||
|
||||
The project has a test suite in the `tests/` directory. To run the tests, you can use the following command:
|
||||
|
||||
```bash
|
||||
ninja -C Build test
|
||||
```
|
||||
350
config_dev
350
config_dev
|
|
@ -1,350 +0,0 @@
|
|||
servers = (
|
||||
{ address = "irc.dal.net"; chatnet = "DALnet"; port = "6667"; },
|
||||
{
|
||||
address = "ssl.efnet.org";
|
||||
chatnet = "EFNet";
|
||||
port = "9999";
|
||||
use_tls = "yes";
|
||||
tls_verify = "no";
|
||||
},
|
||||
{
|
||||
address = "irc.esper.net";
|
||||
chatnet = "EsperNet";
|
||||
port = "6697";
|
||||
use_tls = "yes";
|
||||
tls_verify = "yes";
|
||||
},
|
||||
{
|
||||
address = "irc.libera.chat";
|
||||
chatnet = "liberachat";
|
||||
port = "6697";
|
||||
use_tls = "yes";
|
||||
tls_verify = "yes";
|
||||
},
|
||||
{
|
||||
address = "irc.gamesurge.net";
|
||||
chatnet = "GameSurge";
|
||||
port = "6667";
|
||||
},
|
||||
{
|
||||
address = "ssl.ircnet.ovh";
|
||||
chatnet = "IRCnet";
|
||||
port = "6697";
|
||||
use_tls = "yes";
|
||||
tls_verify = "yes";
|
||||
},
|
||||
{ address = "open.ircnet.net"; chatnet = "IRCnet"; port = "6667"; },
|
||||
{
|
||||
address = "irc.ircsource.net";
|
||||
chatnet = "IRCSource";
|
||||
port = "6667";
|
||||
},
|
||||
{ address = "irc.netfuze.net"; chatnet = "NetFuze"; port = "6667"; },
|
||||
{
|
||||
address = "irc.oftc.net";
|
||||
chatnet = "OFTC";
|
||||
port = "6697";
|
||||
use_tls = "yes";
|
||||
tls_verify = "yes";
|
||||
},
|
||||
{
|
||||
address = "irc.quakenet.org";
|
||||
chatnet = "QuakeNet";
|
||||
port = "6667";
|
||||
},
|
||||
{
|
||||
address = "irc.rizon.net";
|
||||
chatnet = "Rizon";
|
||||
port = "6697";
|
||||
use_tls = "yes";
|
||||
tls_verify = "yes";
|
||||
},
|
||||
{ address = "silc.silcnet.org"; chatnet = "SILC"; port = "706"; },
|
||||
{
|
||||
address = "irc.undernet.org";
|
||||
chatnet = "Undernet";
|
||||
port = "6667";
|
||||
}
|
||||
);
|
||||
|
||||
chatnets = {
|
||||
DALnet = {
|
||||
type = "IRC";
|
||||
max_kicks = "4";
|
||||
max_msgs = "20";
|
||||
max_whois = "30";
|
||||
};
|
||||
EFNet = {
|
||||
type = "IRC";
|
||||
max_kicks = "1";
|
||||
max_msgs = "4";
|
||||
max_whois = "1";
|
||||
};
|
||||
EsperNet = {
|
||||
type = "IRC";
|
||||
max_kicks = "1";
|
||||
max_msgs = "4";
|
||||
max_whois = "1";
|
||||
};
|
||||
liberachat = {
|
||||
type = "IRC";
|
||||
max_kicks = "1";
|
||||
max_msgs = "4";
|
||||
max_whois = "1";
|
||||
};
|
||||
GameSurge = {
|
||||
type = "IRC";
|
||||
max_kicks = "1";
|
||||
max_msgs = "1";
|
||||
max_whois = "1";
|
||||
};
|
||||
IRCnet = {
|
||||
type = "IRC";
|
||||
max_kicks = "1";
|
||||
max_msgs = "1";
|
||||
max_whois = "1";
|
||||
};
|
||||
IRCSource = {
|
||||
type = "IRC";
|
||||
max_kicks = "1";
|
||||
max_msgs = "4";
|
||||
max_whois = "1";
|
||||
};
|
||||
NetFuze = {
|
||||
type = "IRC";
|
||||
max_kicks = "1";
|
||||
max_msgs = "1";
|
||||
max_whois = "1";
|
||||
};
|
||||
OFTC = { type = "IRC"; max_kicks = "1"; max_msgs = "1"; max_whois = "1"; };
|
||||
QuakeNet = {
|
||||
type = "IRC";
|
||||
max_kicks = "1";
|
||||
max_msgs = "1";
|
||||
max_whois = "1";
|
||||
};
|
||||
Rizon = {
|
||||
type = "IRC";
|
||||
max_kicks = "1";
|
||||
max_msgs = "1";
|
||||
max_whois = "1";
|
||||
};
|
||||
SILC = { type = "SILC"; };
|
||||
Undernet = {
|
||||
type = "IRC";
|
||||
max_kicks = "1";
|
||||
max_msgs = "1";
|
||||
max_whois = "1";
|
||||
};
|
||||
};
|
||||
|
||||
channels = (
|
||||
{ name = "#lobby"; chatnet = "EsperNet"; autojoin = "No"; },
|
||||
{ name = "#libera"; chatnet = "liberachat"; autojoin = "No"; },
|
||||
{ name = "#irssi"; chatnet = "liberachat"; autojoin = "No"; },
|
||||
{ name = "#gamesurge"; chatnet = "GameSurge"; autojoin = "No"; },
|
||||
{ name = "#irssi"; chatnet = "IRCNet"; autojoin = "No"; },
|
||||
{ name = "#ircsource"; chatnet = "IRCSource"; autojoin = "No"; },
|
||||
{ name = "#netfuze"; chatnet = "NetFuze"; autojoin = "No"; },
|
||||
{ name = "#oftc"; chatnet = "OFTC"; autojoin = "No"; },
|
||||
{ name = "silc"; chatnet = "SILC"; autojoin = "No"; }
|
||||
);
|
||||
|
||||
aliases = {
|
||||
ATAG = "WINDOW SERVER";
|
||||
ADDALLCHANS = "SCRIPT EXEC foreach my \\$channel (Irssi::channels()) { Irssi::command(\"CHANNEL ADD -auto \\$channel->{visible_name} \\$channel->{server}->{tag} \\$channel->{key}\")\\;}";
|
||||
B = "BAN";
|
||||
BACK = "AWAY";
|
||||
BANS = "BAN";
|
||||
BYE = "QUIT";
|
||||
C = "CLEAR";
|
||||
CALC = "EXEC - if command -v bc >/dev/null 2>&1\\; then printf '%s=' '$*'\\; echo '$*' | bc -l\\; else echo bc was not found\\; fi";
|
||||
CHAT = "DCC CHAT";
|
||||
CS = "QUOTE CS";
|
||||
DATE = "TIME";
|
||||
DEHIGHLIGHT = "DEHILIGHT";
|
||||
DESCRIBE = "ACTION";
|
||||
DHL = "DEHILIGHT";
|
||||
EXEMPTLIST = "MODE $C +e";
|
||||
EXIT = "QUIT";
|
||||
GOTO = "SCROLLBACK GOTO";
|
||||
HIGHLIGHT = "HILIGHT";
|
||||
HL = "HILIGHT";
|
||||
HOST = "USERHOST";
|
||||
INVITELIST = "MODE $C +I";
|
||||
J = "JOIN";
|
||||
K = "KICK";
|
||||
KB = "KICKBAN";
|
||||
KN = "KNOCKOUT";
|
||||
LAST = "LASTLOG";
|
||||
LEAVE = "PART";
|
||||
M = "MSG";
|
||||
MS = "QUOTE MS";
|
||||
MUB = "UNBAN *";
|
||||
N = "NAMES";
|
||||
NMSG = "^MSG";
|
||||
NS = "QUOTE NS";
|
||||
OS = "QUOTE OS";
|
||||
P = "PART";
|
||||
Q = "QUERY";
|
||||
RESET = "SET -default";
|
||||
RUN = "SCRIPT LOAD";
|
||||
SAY = "MSG *";
|
||||
SB = "SCROLLBACK";
|
||||
SBAR = "STATUSBAR";
|
||||
SHELP = "QUOTE HELP";
|
||||
SIGNOFF = "QUIT";
|
||||
SV = "MSG * Irssi $J ($V) - https://irssi.org";
|
||||
T = "TOPIC";
|
||||
UB = "UNBAN";
|
||||
UMODE = "MODE $N";
|
||||
UNSET = "SET -clear";
|
||||
W = "WHO";
|
||||
WC = "WINDOW CLOSE";
|
||||
WG = "WINDOW GOTO";
|
||||
WJOIN = "JOIN -window";
|
||||
WI = "WHOIS";
|
||||
WII = "WHOIS $0 $0";
|
||||
WL = "WINDOW LIST";
|
||||
WN = "WINDOW NEW HIDDEN";
|
||||
WQUERY = "QUERY -window";
|
||||
WW = "WHOWAS";
|
||||
};
|
||||
|
||||
statusbar = {
|
||||
items = {
|
||||
barstart = "{sbstart}";
|
||||
barend = "{sbend}";
|
||||
topicbarstart = "{topicsbstart}";
|
||||
topicbarend = "{topicsbend}";
|
||||
time = "{sb %B$Z%n%W❱ %G⚡%n Connected: %G%W$tag%n %W>%B>%C> %WNexus %G<%B<%W<%W}";
|
||||
user = "{sb %WU%wser ⇋ %B$cumode%w$N%W : ➜ %WS%wtatus {sbmode (%C+$usermode%n)}}";
|
||||
window = "%W ➜ %n{sbmode %WC%whannel (%C+$M%n%W) %B ➜ %WW%window: %G$winref }{sbaway $A}%W %n";
|
||||
window_empty = "{sb $winref{sbservertag $tag}}";
|
||||
prompt = "%B⚡%N %k❮%B$itemname%k❯%N%C:%N ";
|
||||
prompt_empty = "%k❮%B$winname%k❯%N ";
|
||||
topic = "%WTopic%C:%W $topic";
|
||||
topic_empty = " Irssi v$J - https://irssi.org";
|
||||
lag = "{sb ⇉ %WL%wagging ⇋ %W: %R$0- }";
|
||||
act = "{sb %WActive Windows%C: $0-}";
|
||||
more = "%C-- %Wmore %C--";
|
||||
};
|
||||
default = {
|
||||
window = {
|
||||
type = "window";
|
||||
placement = "bottom";
|
||||
position = "0";
|
||||
visible = "active";
|
||||
items = {
|
||||
barstart = { priority = "100"; };
|
||||
time = { priority = "10"; };
|
||||
more = { priority = "-1"; alignment = "right"; };
|
||||
barend = { priority = "100"; alignment = "right"; };
|
||||
};
|
||||
disabled = "yes";
|
||||
};
|
||||
prompt = {
|
||||
type = "root";
|
||||
placement = "bottom";
|
||||
position = "100";
|
||||
visible = "active";
|
||||
items = {
|
||||
prompt = { priority = "-1"; };
|
||||
prompt_empty = { priority = "-1"; };
|
||||
input = { priority = "10"; };
|
||||
};
|
||||
};
|
||||
topic = {
|
||||
type = "root";
|
||||
placement = "top";
|
||||
position = "1";
|
||||
visible = "always";
|
||||
items = {
|
||||
topicbarstart = { priority = "100"; };
|
||||
topic = { };
|
||||
topic_empty = { };
|
||||
topicbarend = { priority = "100"; alignment = "right"; };
|
||||
};
|
||||
};
|
||||
info1 = {
|
||||
items = { user = { }; window = { }; };
|
||||
position = "10";
|
||||
placement = "bottom";
|
||||
};
|
||||
info2 = {
|
||||
items = { time = { }; more = { }; act = { }; lag = { }; };
|
||||
position = "0";
|
||||
};
|
||||
add = { disabled = "yes"; };
|
||||
window1 = { disabled = "yes"; };
|
||||
};
|
||||
};
|
||||
|
||||
settings = {
|
||||
core = {
|
||||
nick = "irssi_user";
|
||||
hostname = "0.0.0.0";
|
||||
timestamp_format = "%H:%M:%S";
|
||||
override_coredump_limit = "no";
|
||||
resolve_prefer_ipv6 = "no";
|
||||
server_reconnect_time = "300";
|
||||
recode_out_default_charset = "utf8";
|
||||
recode_autodetect_utf8 = "yes";
|
||||
recode_fallback = "ISO-8859-2";
|
||||
recode_transliterate = "yes";
|
||||
recode = "yes";
|
||||
real_name = "irssi User";
|
||||
user_name = "irssi";
|
||||
};
|
||||
"irc/core" = {
|
||||
lag_check_time = "5s";
|
||||
ctcp_version_reply = "";
|
||||
skip_motd = "no";
|
||||
lag_max_before_disconnect = "300";
|
||||
cmds_max_at_once = "10";
|
||||
};
|
||||
"fe-common/core" = {
|
||||
activity_hide_level = "KICK MODE TOPIC NICK QUIT CLIENTNOTICE CLIENTCRAP SNOTICE JOIN PART CRAP";
|
||||
timestamps = "yes";
|
||||
timestamp_level = "ALL";
|
||||
hilight_color = "%M";
|
||||
autolog = "yes";
|
||||
autolog_path = "~/.irssi/logs/$tag/$0.log";
|
||||
term_charset = "UTF-8";
|
||||
use_status_window = "no";
|
||||
hilight_nick_matches = "yes";
|
||||
hilight_nick_matches_everywhere = "yes";
|
||||
window_auto_change = "yes";
|
||||
print_active_channel = "yes";
|
||||
theme = "default.theme";
|
||||
nick_column_enabled = "yes";
|
||||
nick_column_width = "10";
|
||||
};
|
||||
"fe-text" = {
|
||||
lag_min_show = "1s";
|
||||
scrollback_lines = "2000";
|
||||
paste_verify_line_count = "2";
|
||||
term_force_colors = "no";
|
||||
colors = "yes";
|
||||
actlist_sort = "refnum";
|
||||
colors_ansi_24bit = "yes";
|
||||
};
|
||||
lookandfeel = {
|
||||
sidepanel_left = "yes";
|
||||
sidepanel_right = "yes";
|
||||
sidepanel_left_width = "20";
|
||||
sidepanel_right_width = "16";
|
||||
sidepanel_debug = "no";
|
||||
sidepanel_right_auto_hide = "yes";
|
||||
};
|
||||
"fe-common/irc" = { print_whois_rpl_in_active_window = "yes"; };
|
||||
};
|
||||
|
||||
hilights = ( { text = ""; nick = "yes"; word = "yes"; } );
|
||||
|
||||
logs = { };
|
||||
|
||||
ignores = ( );
|
||||
|
||||
# Set default window name to Notices
|
||||
windows = { 1 = { name = "Notices"; }; };
|
||||
160
configure.sh
160
configure.sh
|
|
@ -1,160 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
# configure.sh - Inteligentny, przenośny skrypt konfiguracyjny dla irssi-dev
|
||||
|
||||
# --- Funkcje Pomocnicze ---
|
||||
ask_yes_no() {
|
||||
while true; do
|
||||
printf "$1 [y/n]: "
|
||||
read -r answer
|
||||
case "$answer" in
|
||||
[Yy]*) return 0 ;;
|
||||
[Nn]*) return 1 ;;
|
||||
*) printf "Proszę odpowiedzieć 'y' lub 'n'.\n" ;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
cleanup_backups() {
|
||||
printf "🧹 Czyszczenie plików tymczasowych (.bak)...
|
||||
"
|
||||
find . -name "*.bak" -type f -delete
|
||||
}
|
||||
|
||||
# --- Krok 1: Wykrywanie OS i ustawianie domyślnych ścieżek ---
|
||||
OS_TYPE=$(uname -s)
|
||||
DEFAULT_SYSTEM_PREFIX="/usr/local"
|
||||
DEFAULT_USER_PREFIX="$HOME/.local"
|
||||
|
||||
# --- Krok 2: Wykrywanie istniejącego irssi ---
|
||||
printf "🔎 Sprawdzanie istniejącej instalacji irssi...\n"
|
||||
EXISTING_IRSSI_BIN=$(command -v irssi)
|
||||
EXISTING_IRSSI_DIR="$HOME/.irssi"
|
||||
TARGET_NAME="irssi"
|
||||
|
||||
if [ -n "$EXISTING_IRSSI_BIN" ] || [ -d "$EXISTING_IRSSI_DIR" ]; then
|
||||
printf "⚠️ Wykryto istniejącą instalację irssi!\n"
|
||||
if [ -n "$EXISTING_IRSSI_BIN" ]; then
|
||||
printf " - Plik binarny znaleziony w: %s\n" "$EXISTING_IRSSI_BIN"
|
||||
fi
|
||||
if [ -d "$EXISTING_IRSSI_DIR" ]; then
|
||||
printf " - Katalog konfiguracyjny znaleziony w: %s\n" "$EXISTING_IRSSI_DIR"
|
||||
fi
|
||||
|
||||
printf "\nMożesz zainstalować tę wersję jako główny program lub obok, pod inną nazwą.\n"
|
||||
printf "1. Zastąp (zainstaluj jako 'irssi')\n"
|
||||
printf "2. Zainstaluj obok (jako 'arssi')\n"
|
||||
|
||||
while true; do
|
||||
printf "Wybierz opcję [1/2]: "
|
||||
read -r choice
|
||||
case "$choice" in
|
||||
1)
|
||||
printf "Wybrano instalację jako 'irssi'.\n"
|
||||
printf "🚨 Pamiętaj, aby ręcznie odinstalować poprzednią wersję za pomocą menedżera pakietów, aby uniknąć konfliktów.\n"
|
||||
if ! ask_yes_no "Kontynuować?"; then printf "Przerwano.\n"; exit 1; fi
|
||||
TARGET_NAME="irssi"
|
||||
break
|
||||
;;
|
||||
2)
|
||||
printf "Wybrano instalację obok pod nazwą 'arssi'.\n"
|
||||
TARGET_NAME="arssi"
|
||||
break
|
||||
;;
|
||||
*)
|
||||
printf "Nieprawidłowy wybór.\n"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
|
||||
# --- Krok 3: Wybór typu instalacji (Systemowa vs. Użytkownika) ---
|
||||
printf "\nWybierz typ instalacji:\n"
|
||||
printf "1. Systemowa (dla wszystkich użytkowników, wymaga sudo, zalecane: %s)\n" "$DEFAULT_SYSTEM_PREFIX"
|
||||
printf "2. Lokalna (tylko dla Ciebie, nie wymaga sudo, zalecane: %s)\n" "$DEFAULT_USER_PREFIX"
|
||||
|
||||
while true; do
|
||||
printf "Wybierz opcję [1/2]: "
|
||||
read -r choice
|
||||
case "$choice" in
|
||||
1)
|
||||
INSTALL_PREFIX="$DEFAULT_SYSTEM_PREFIX"
|
||||
SUDO_NEEDED="tak"
|
||||
break
|
||||
;;
|
||||
2)
|
||||
INSTALL_PREFIX="$DEFAULT_USER_PREFIX"
|
||||
SUDO_NEEDED="nie"
|
||||
break
|
||||
;;
|
||||
*)
|
||||
printf "Nieprawidłowy wybór.\n"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# --- Krok 4: Dynamiczna zmiana nazwy (jeśli to konieczne) ---
|
||||
MESON_OPTS=""
|
||||
if [ "$TARGET_NAME" != "irssi" ]; then
|
||||
printf "\n🔧 Konfiguruj
|
||||
ę projektu do używania nazwy '%s'...
|
||||
" "$TARGET_NAME"
|
||||
MESON_OPTS="-Dpkgname=$TARGET_NAME"
|
||||
|
||||
# Zmiana nazwy binarnej w meson.build
|
||||
sed -i.bak "s/executable('irssi'/executable('$TARGET_NAME'/" src/fe-text/meson.build
|
||||
|
||||
# Zmiana katalogu domowego w common.h
|
||||
sed -i.bak "s|\"%s/.irssi\"|\"%s/.$TARGET_NAME\"|" src/common.h
|
||||
|
||||
# Zmiana ścieżek #include w całym kodzie
|
||||
printf "Aktualizowanie ścieżek #include...
|
||||
"
|
||||
for ext in c h xs; do
|
||||
find src tests -type f -name "*.$ext" -exec sed -i.bak "s|<irssi/|<$TARGET_NAME/|g" {} \;
|
||||
done
|
||||
|
||||
printf "✅ Konfiguracja nazwy zakończona.\n"
|
||||
fi
|
||||
|
||||
# --- Krok 5: Uruchomienie procesu budowania ---
|
||||
BUILD_DIR="$(pwd)/Build"
|
||||
|
||||
printf "\n🛠️ Przygotowywanie do budowania w katalogu: %s\n" "$BUILD_DIR"
|
||||
printf "📦 Prefiks instalacji: %s\n" "$INSTALL_PREFIX"
|
||||
|
||||
if [ -d "$BUILD_DIR" ]; then
|
||||
printf "Usuwanie istniejącego katalogu Build...
|
||||
"
|
||||
rm -rf "$BUILD_DIR"
|
||||
fi
|
||||
|
||||
printf "\n⚙️ Uruchamianie Meson...
|
||||
"
|
||||
if ! meson setup "$BUILD_DIR" -Dprefix="$INSTALL_PREFIX" -Dwith-perl=yes -Dwith-proxy=yes $MESON_OPTS; then
|
||||
printf "❌ Błąd podczas konfiguracji Meson. Sprawdź logi powyżej.\n"
|
||||
cleanup_backups
|
||||
exit 1
|
||||
fi
|
||||
|
||||
printf "\n🔨 Uruchamianie Ninja (kompilacja)...
|
||||
"
|
||||
if ! ninja -C "$BUILD_DIR"; then
|
||||
printf "❌ Błąd podczas kompilacji. Sprawdź logi powyżej.\n"
|
||||
cleanup_backups
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Czyszczenie po udanej kompilacji
|
||||
cleanup_backups
|
||||
|
||||
printf "\n✨ Kompilacja zakończona sukcesem!\n"
|
||||
printf "Aby zainstalować, uruchom następującą komendę:\n"
|
||||
if [ "$SUDO_NEEDED" = "tak" ]; then
|
||||
printf "sudo ninja -C %s install\n" "$BUILD_DIR"
|
||||
else
|
||||
printf "ninja -C %s install\n" "$BUILD_DIR"
|
||||
printf "\nUpewnij się, że katalog '%s/bin' jest dodany do Twojej zmiennej środowiskowej PATH.\n" "$INSTALL_PREFIX"
|
||||
fi
|
||||
|
||||
exit 0
|
||||
193
summary.md
193
summary.md
|
|
@ -1,193 +0,0 @@
|
|||
# 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:
|
||||
|
||||
```bash
|
||||
ls -la /Users/kfn/.irssip/config
|
||||
lrwxr-xr-x 1 kfn staff 27 Aug 23 22:13 /Users/kfn/.irssip/config -> /Users/kfn/irssi/config_dev
|
||||
|
||||
ls -la /Users/kfn/.irssip/default.theme
|
||||
lrwxr-xr-x 1 kfn staff 37 Aug 23 02:59 /Users/kfn/.irssip/default.theme -> /Users/kfn/irssi/themes/default.theme
|
||||
```
|
||||
|
||||
## Filozofia Rozwoju
|
||||
|
||||
### Zasady KISS (Keep It Simple Stupid)
|
||||
- Wszelkie wprowadzane zmiany/funkcje mają oddawać ducha prostoty
|
||||
- Implementacje nie mogą zmieniać działania istniejących mechanizmów
|
||||
- Zachowanie wstecznej kompatybilności jest priorytetem
|
||||
- Nowe funkcje powinny być opcjonalne - możliwe do wyłączenia w ustawieniach lub nieaktywne do czasu wywołania
|
||||
|
||||
### Proces Deweloperski
|
||||
1. **Checkpointy**: Przed wprowadzaniem większych zmian zawsze robimy commit roboczy
|
||||
2. **Testowanie**: Tylko ja testuję wprowadzone zmiany. Ty możesz testować Build lokalnie bez instalacji
|
||||
3. **Budowanie**: Proces budowania do testów:
|
||||
```bash
|
||||
sudo rm -rf /opt/irssip && rm -rf $(pwd)/Build && \
|
||||
meson setup $(pwd)/Build -Dprefix=/opt/irssip -Dwith-perl=yes -Dwith-proxy=yes && \
|
||||
ninja -C Build && sudo ninja -C Build install
|
||||
```
|
||||
|
||||
### Pliki Konfiguracyjne
|
||||
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:
|
||||
```
|
||||
21:36:06> < @kofany> bittersweets outstript
|
||||
21:36:16> < @kofany> sarcomas oven's pebble's
|
||||
21:37:46> <+testNick>> truncation's debarked Allie
|
||||
21:37:56> <+testNick>> griming surtax's intermediary's
|
||||
```
|
||||
|
||||
### Wymagania Techniczne
|
||||
- Implementacja **musi** wspierać aktualne formatowanie linii w theme
|
||||
- Zachowanie kompatybilności z istniejącymi motywami
|
||||
- Możliwość konfiguracji szerokości pola wyświetlania nicka z formatowamiem.
|
||||
- Obsługa długich nicków z obcinaniem i wskaźnikiem
|
||||
|
||||
## Dotychczasowe Próby Implementacji
|
||||
|
||||
[Tu następuje szczegółowa dokumentacja techniczna z poprzedniego dokumentu]
|
||||
|
||||
## Standardowe Formatowanie Wiadomości irssi
|
||||
```
|
||||
# Oryginalny format (bez wyrównania):
|
||||
msgnick = "%K<%n$0$1-%K>%n %|";
|
||||
ownmsgnick = "{msgnick $0 $1-}%g";
|
||||
|
||||
# Parametry: $0=tryb(mode) (@,+), $1=nick, wynik: <@nick> wiadomość
|
||||
```
|
||||
|
||||
## Zmodyfikowane Pliki
|
||||
|
||||
### 1. `/src/core/special-vars.h`
|
||||
- Dodano flagę `#define ALIGN_COMBINE_MODE 0x10`
|
||||
- Rozszerzono system wyrównywania o obsługę kombinacji tryb+nick
|
||||
|
||||
### 2. `/src/core/special-vars.c`
|
||||
- Zmodyfikowano `get_alignment_args()` aby parsować flagę '&': `*flags |= ALIGN_COMBINE_MODE`
|
||||
- Zaimplementowano logikę kombinacji w `parse_special()`:
|
||||
- Pobiera tryb z `arglist[2]` i nick z `arglist[0]`
|
||||
- Oblicza dostępną przestrzeń: `total_width - mode_len - 2` (dla nawiasów)
|
||||
- Wyrównuje do prawej z wypełnieniem: `" @nick"`
|
||||
- Obcina długie nicki: `"@bardzodlu+"`
|
||||
- Zwraca połączony string do przetworzenia przez motyw
|
||||
|
||||
### 3. `/themes/default.theme`
|
||||
- Zaktualizowano komendy formatowania używając składni `$[~&12]0`:
|
||||
```
|
||||
own_msg = "{ownmsgnick $[~&12]0}$1";
|
||||
pubmsg = "{pubmsgnick $[~&12]0}$1";
|
||||
```
|
||||
- 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
|
||||
|
||||
## HISTORIA PRÓB IMPLEMENTACJI
|
||||
|
||||
### PRÓBA 1: Parse Special + ALIGN_COMBINE_MODE (2025-01-24)
|
||||
**Podejście**: Modyfikacja `parse_special()` z flagą `&` do łączenia mode+nick przed wyrównaniem.
|
||||
**Problem**: Ograniczenie interpretacji kolorów - po połączeniu mode+nick w jeden string, theme nie może zastosować osobnych kolorów.
|
||||
**Status**: ❌ Niepowodzenie
|
||||
|
||||
### PRÓBA 2: Expandos bez kontekstu (wcześniej)
|
||||
**Podejście**: Tworzenie expandos `nick_with_mode`, `nick_padding` itp.
|
||||
**Problem**: Expandos nie mają dostępu do `arglist` z formatowania - zwracają puste stringi.
|
||||
**Status**: ❌ Niepowodzenie
|
||||
|
||||
### PRÓBA 3: Modyfikacja format_get_text_args (2025-01-24)
|
||||
**Podejście**: Wstrzyknięcie dodatkowego parametru padding do `arglist` w `format_get_text_args()`.
|
||||
**Problem**: Błędna analiza argumentów - myślałem że `$0=nick`, ale `$0=mode`, `$1=nick`. Przesuwanie argumentów psuło mapowanie.
|
||||
**Status**: ❌ Niepowodzenie - fundamentalnie błędne założenia
|
||||
|
||||
### WNIOSKI Z NIEPOWODZEŃ:
|
||||
1. **Modyfikacja argumentów formatowania jest ryzykowna** - łatwo zepsuć istniejące mapowanie
|
||||
2. **Expandos bez kontekstu nie działają** - potrzebują dostępu do aktualnych danych message
|
||||
3. **Analiza flow musi być dokładna** - błędne założenia prowadzą do niefunkcjonalnych rozwiązań
|
||||
|
||||
## AKTUALNE USTALENIA (2025-01-24)
|
||||
|
||||
### Rekomendowane Rozwiązanie: Expandos z kontekstem sygnałów
|
||||
**INSPIRACJA**: Skrypt nm2.pl pokazuje właściwe podejście - expandos + sygnały + dynamiczne przepisywanie formatów.
|
||||
|
||||
**KLUCZOWA IDEA**:
|
||||
Zamiast modyfikować argumenty, stworzyć expando który zwraca gotowy string z paddingiem, mode i nickiem.
|
||||
Loading…
Add table
Add a link
Reference in a new issue