mirror of
https://github.com/irssi/irssi.git
synced 2026-08-08 19:30:15 +02:00
[2025-08-24 15:27:35] Inicjalizacja pracy z augment code po oczyszczeniu repo
This commit is contained in:
parent
b5dfea8d6d
commit
4f8ef0ccb7
6 changed files with 860 additions and 27 deletions
191
.augment/rules/imported/summary.md
Normal file
191
.augment/rules/imported/summary.md
Normal file
|
|
@ -0,0 +1,191 @@
|
|||
---
|
||||
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
|
||||
|
||||
## AKTUALNE USTALENIA (2025-01-24)
|
||||
|
||||
### Analiza Flow Wiadomości
|
||||
Przeprowadzono szczegółową analizę flow wiadomości w Irssi od otrzymania z serwera do wyświetlenia (dokumentacja w `msg_flow.md`). Zidentyfikowano fundamentalny problem z podejściem expandos.
|
||||
|
||||
### Problem z Expandos
|
||||
Expandos nie mają dostępu do `arglist` z formatowania - są wywoływane globalnie bez kontekstu lokalnego formatowania. To powoduje, że zwracają puste stringi zamiast rzeczywistych wartości mode i nick.
|
||||
|
||||
### Rekomendowane Rozwiązanie
|
||||
**Rozszerzenie systemu wyrównania w `parse_special`** zamiast expandos:
|
||||
|
||||
1. **Nowa składnia**: `$[~&nick_column]0` - wyrównanie z flagą nick_column
|
||||
2. **Zachowuje osobne parametry** - mode ($0) i nick ($1) pozostają oddzielne dla kolorowania
|
||||
3. **Zgodne z roadmapą Irssi** - "variable/dynamic expandos with arguments"
|
||||
4. **Eleganckie kodowo** - rozszerza istniejący system zamiast go obchodzić
|
||||
|
||||
### Wymagania Implementacji
|
||||
|
||||
- Rozszerzyć `get_alignment_args()` o flagę `&nick_column`
|
||||
- Dodać `ALIGN_NICK_COLUMN` do special-vars.h
|
||||
- Implementować logikę kombinowania mode+nick przed wyrównaniem
|
||||
- Zachować osobne parametry po wyrównaniu dla theme
|
||||
- Ustawienia: `nick_column_enabled` i `nick_column_width`
|
||||
5
.gitignore
vendored
5
.gitignore
vendored
|
|
@ -91,3 +91,8 @@ setup.cfg
|
|||
*.egg-info
|
||||
src/.DS_Store
|
||||
.DS_Store
|
||||
Build/
|
||||
.cache
|
||||
.cache/
|
||||
build
|
||||
build/
|
||||
348
config_dev
Normal file
348
config_dev
Normal file
|
|
@ -0,0 +1,348 @@
|
|||
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 = "irssip_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 = "Irssip User";
|
||||
user_name = "irssip";
|
||||
};
|
||||
"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 = "~/.irssip/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";
|
||||
};
|
||||
"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"; }; };
|
||||
86
msg_flow.md
Normal file
86
msg_flow.md
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
## ANALIZA KROK PO KROKU - FLOW WIADOMOŚCI W IRSSI
|
||||
|
||||
### 1. WIADOMOŚCI PRZYCHODZĄCE (od serwera do wyświetlenia)
|
||||
|
||||
#### Krok 1: Odbieranie z serwera
|
||||
**Funkcja**: `irc_parse_incoming()` w `src/irc/core/irc.c:543`
|
||||
- Czyta dane z socketu przez `net_sendbuffer_receive_line()`
|
||||
- Emituje sygnał `"server incoming"` z surową linią
|
||||
|
||||
#### Krok 2: Parsowanie IRC
|
||||
**Funkcja**: `irc_parse_incoming_line()` w `src/irc/core/irc.c:528`
|
||||
- Parsuje prefix (nick, address, tags) przez `irc_parse_prefix()`
|
||||
- Emituje sygnał `"server event tags"` z parsowanymi danymi
|
||||
|
||||
#### Krok 3: Rozpoznanie typu wiadomości
|
||||
**Funkcja**: `irc_server_event()` w `src/irc/core/irc.c:370`
|
||||
- Parsuje komendę IRC (PRIVMSG, JOIN, etc.)
|
||||
- Emituje odpowiedni sygnał np. `"event privmsg"`
|
||||
|
||||
#### Krok 4: Konwersja na sygnały wiadomości
|
||||
**Funkcja**: `event_privmsg()` w `src/fe-common/irc/fe-events.c:42`
|
||||
- Dekoduje wiadomość przez `recode_in()`
|
||||
- Rozróżnia kanał vs prywatna
|
||||
- Emituje `"message public"` lub `"message private"`
|
||||
|
||||
#### Krok 5: Obsługa sygnału wiadomości
|
||||
**Funkcja**: `sig_message_public()` w `src/fe-common/core/fe-messages.c:168`
|
||||
- Znajduje kanał i nick record
|
||||
- Pobiera nickmode przez `channel_get_nickmode()`
|
||||
- Sprawdza highlight przez `hilight_match()`
|
||||
- **WYWOŁUJE**: `printformat_module("fe-common/core", server, target, level, TXT_PUBMSG, nick, address, msg, nickmode)`
|
||||
|
||||
### 2. FORMATOWANIE I THEME
|
||||
|
||||
#### Krok 6: printformat_module
|
||||
**Funkcja**: `printformat_module()` w `src/fe-common/core/printtext.c:101`
|
||||
- Tworzy `TEXT_DEST_REC` przez `format_create_dest()`
|
||||
- Wywołuje `printformat_module_dest_args()`
|
||||
|
||||
#### Krok 7: Emisja sygnału formatowania
|
||||
**Funkcja**: `printformat_module_dest_charargs()` w `src/fe-common/core/printtext.c:64`
|
||||
- Pobiera theme przez `window_get_theme()`
|
||||
- **EMITUJE**: `signal_emit_id(signal_print_format, 5, theme, module, dest, formatnum, arglist)`
|
||||
|
||||
#### Krok 8: Obsługa sygnału formatowania
|
||||
**Funkcja**: `sig_print_format()` w `src/fe-common/core/printtext.c:459`
|
||||
- **WYWOŁUJE**: `format_get_text_theme_charargs(theme, module, dest, formatnum, arglist)`
|
||||
|
||||
#### Krok 9: Pobieranie tekstu z theme
|
||||
**Funkcja**: `format_get_text_theme_charargs()` w `src/fe-common/core/formats.c:831`
|
||||
- Znajduje moduł theme w `theme->modules`
|
||||
- Pobiera expanded format: `text = module_theme->expanded_formats[formatnum]`
|
||||
- **WYWOŁUJE**: `format_get_text_args(dest, text, args)`
|
||||
|
||||
#### Krok 10: Parsowanie expandos i zmiennych
|
||||
**Funkcja**: `format_get_text_args()` w `src/fe-common/core/formats.c:737`
|
||||
- Iteruje przez tekst formatujący
|
||||
- Gdy napotka `$`, wywołuje `parse_special()`
|
||||
|
||||
#### Krok 11: Parsowanie expandos
|
||||
**Funkcja**: `parse_special()` w `src/core/special-vars.c:425`
|
||||
- Parsuje składnię `$[alignment]variable`
|
||||
- **WYWOŁUJE**: `get_special_value()` → `get_variable()` → `get_long_variable_value()`
|
||||
|
||||
#### Krok 12: Wykonanie expando
|
||||
**Funkcja**: `get_long_variable_value()` w `src/core/special-vars.c:95`
|
||||
- **WYWOŁUJE**: `func = expando_find_long(key)`
|
||||
- **WYWOŁUJE**: `return func(server, item, free_ret)` ← **TU SĄ NASZE EXPANDOS!**
|
||||
|
||||
### 3. WIADOMOŚCI WYCHODZĄCE (nasze wiadomości)
|
||||
|
||||
#### Krok 1: Input od użytkownika
|
||||
**Funkcja**: Obsługa klawiatury w `src/fe-text/gui-readline.c`
|
||||
- Przechwytuje Enter, wywołuje `signal_emit("send command", ...)`
|
||||
|
||||
#### Krok 2: Parsowanie komendy
|
||||
**Funkcja**: `cmd_msg()` lub podobne w `src/irc/core/irc-commands.c`
|
||||
- Wysyła PRIVMSG do serwera
|
||||
- Emituje `"message own_public"` lub `"message own_private"`
|
||||
|
||||
#### Krok 3: Formatowanie własnej wiadomości
|
||||
**Funkcja**: `sig_message_own_public()` w `src/fe-common/core/fe-messages.c:281`
|
||||
- Pobiera nickmode przez `channel_get_nickmode(channel, server->nick)`
|
||||
- **WYWOŁUJE**: `printformat_module("fe-common/core", server, target, level, TXT_OWN_MSG, server->nick, target, msg, nickmode)`
|
||||
|
||||
**Dalej flow jest identyczny jak dla wiadomości przychodzących od kroku 6.**
|
||||
186
summary.md
Normal file
186
summary.md
Normal file
|
|
@ -0,0 +1,186 @@
|
|||
# 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
|
||||
|
||||
## AKTUALNE USTALENIA (2025-01-24)
|
||||
|
||||
### Analiza Flow Wiadomości
|
||||
Przeprowadzono szczegółową analizę flow wiadomości w Irssi od otrzymania z serwera do wyświetlenia (dokumentacja w `msg_flow.md`). Zidentyfikowano fundamentalny problem z podejściem expandos.
|
||||
|
||||
### Problem z Expandos
|
||||
Expandos nie mają dostępu do `arglist` z formatowania - są wywoływane globalnie bez kontekstu lokalnego formatowania. To powoduje, że zwracają puste stringi zamiast rzeczywistych wartości mode i nick.
|
||||
|
||||
### Rekomendowane Rozwiązanie
|
||||
**Rozszerzenie systemu wyrównania w `parse_special`** zamiast expandos:
|
||||
|
||||
1. **Nowa składnia**: `$[~&nick_column]0` - wyrównanie z flagą nick_column
|
||||
2. **Zachowuje osobne parametry** - mode ($0) i nick ($1) pozostają oddzielne dla kolorowania
|
||||
3. **Zgodne z roadmapą Irssi** - "variable/dynamic expandos with arguments"
|
||||
4. **Eleganckie kodowo** - rozszerza istniejący system zamiast go obchodzić
|
||||
|
||||
### Wymagania Implementacji
|
||||
- Rozszerzyć `get_alignment_args()` o flagę `&nick_column`
|
||||
- Dodać `ALIGN_NICK_COLUMN` do special-vars.h
|
||||
- Implementować logikę kombinowania mode+nick przed wyrównaniem
|
||||
- Zachować osobne parametry po wyrównaniu dla theme
|
||||
- Ustawienia: `nick_column_enabled` i `nick_column_width`
|
||||
|
|
@ -45,7 +45,6 @@
|
|||
# at start, the normal behaviour of %n would occur. If you _really_ want
|
||||
# to use the terminal's default color, use %N.
|
||||
|
||||
#############################################################################
|
||||
|
||||
# default foreground color (%N) - -1 is the "default terminal color"
|
||||
default_color = "-1";
|
||||
|
|
@ -66,7 +65,7 @@ abstracts = {
|
|||
line_start = "%N";
|
||||
|
||||
# timestamp styling, nothing by default
|
||||
timestamp = "%b$*%C❱%N";
|
||||
timestamp = "%b$*%C>%N";
|
||||
|
||||
# any kind of text that needs hilighting, default is to bold
|
||||
hilight = "%Y%_$*%_%N";
|
||||
|
|
@ -112,14 +111,15 @@ abstracts = {
|
|||
# ban/ban exception/invite list mask is printed
|
||||
ban = "%c$*%n";
|
||||
|
||||
|
||||
##
|
||||
## messages
|
||||
##
|
||||
|
||||
# the basic styling of how to print message, $0 = nick mode, $1 = nick
|
||||
msgnick = "%K<%n$0$[10]1-%K>%n %|";
|
||||
msgnick = "%K<%n$0$1-%K>%n %|";
|
||||
|
||||
# message from you is printed. "ownnick" specifies the styling of the
|
||||
# message from you is printed. "msgownnick" specifies the styling of the
|
||||
# nick ($0 part in msgnick) and "ownmsgnick" specifies the styling of the
|
||||
# whole line.
|
||||
|
||||
|
|
@ -136,15 +136,15 @@ abstracts = {
|
|||
# privmsgnick = "%K{msgnick %R$*%K}%n";
|
||||
|
||||
# $0 = nick mode, $1 = nick
|
||||
ownmsgnick = "{msgnick $0 $[10]1-}";
|
||||
ownmsgnick = "{msgnick $0 $1-}";
|
||||
ownnick = "%_$*%n";
|
||||
|
||||
# public message in channel, $0 = nick mode, $1 = nick
|
||||
pubmsgnick = "{msgnick $0 $[10]1-}";
|
||||
pubmsgnick = "{msgnick $0 $1-}";
|
||||
pubnick = "%N$*%n";
|
||||
|
||||
# public message in channel meant for me, $0 = nick mode, $1 = nick
|
||||
pubmsgmenick = "{msgnick $0 $[10]1-}";
|
||||
pubmsgmenick = "{msgnick $0 $1-}";
|
||||
menick = "%Y$*%n";
|
||||
|
||||
# public highlighted message in channel
|
||||
|
|
@ -167,6 +167,9 @@ abstracts = {
|
|||
# private message in query
|
||||
privmsgnick = "{msgnick %R$*%n}";
|
||||
|
||||
# channel name is printed with message
|
||||
msgchannel = "%K:%c$*%n";
|
||||
|
||||
##
|
||||
## Actions (/ME stuff)
|
||||
##
|
||||
|
|
@ -251,20 +254,20 @@ abstracts = {
|
|||
# Statusbar background and styling elements
|
||||
sb_background = "%K";
|
||||
# Void black background
|
||||
window_border = "%B│%N";
|
||||
window_border = "%B|%N";
|
||||
# Electric blue cyberpunk border character
|
||||
sb_topic_bg = "%B%W";
|
||||
# Electric blue + white for topic
|
||||
sb = "%B⚡%N $0-%B ⚬%N";
|
||||
sb = " %c[%n$*%c]%n";
|
||||
# Electric blue lightning + bullet
|
||||
sbmode = "$0-";
|
||||
sbmode = "(%c+%n$*)";
|
||||
# Mode display
|
||||
sbservertag = ":$0 %N(%Gchange with ^X%N)";
|
||||
sbservertag = ":$0 (change with ^X)";
|
||||
# Server tag with green hint
|
||||
sbmore = " %R❰%r❰%k❰ %Nmore %k❱%r❱%R❱ ";
|
||||
sbmore = " %R<%r<%k< %Nmore %k>%r>%R> ";
|
||||
# Triple-layered more indicator
|
||||
sblag = "%R☠%N %RLAG%N %w$0-%N seconds";
|
||||
# Skull + lag in crimson red
|
||||
sblag = "%R!%N %RLAG%N %w$0-%N seconds";
|
||||
# Exclamation + lag in crimson red
|
||||
sb_default_bg = "%K";
|
||||
# Default void black background
|
||||
sb_info1_bg = "%B";
|
||||
|
|
@ -288,10 +291,7 @@ abstracts = {
|
|||
|
||||
prompt = "[$*] ";
|
||||
|
||||
sb = " %c[%n$*%c]%n";
|
||||
sbmode = "(%c+%n$*)";
|
||||
sbaway = " (%GzZzZ%n)";
|
||||
sbservertag = ":$0 (change with ^X)";
|
||||
sbnickmode = "$0";
|
||||
|
||||
# activity in statusbar
|
||||
|
|
@ -306,35 +306,52 @@ abstracts = {
|
|||
sb_act_hilight = "%g$*";
|
||||
# Sky blue highlight with color
|
||||
sb_act_hilight_color = "%b$0$1-%N";
|
||||
|
||||
};
|
||||
formats = {
|
||||
"fe-text" = {
|
||||
"fe-common/core" = {
|
||||
|
||||
own_msg = "{ownmsgnick $2 {ownnick $0}}$1";
|
||||
own_msg_channel = "{ownmsgnick $3 {ownnick $0}{msgchannel $1}}$2";
|
||||
own_msg_private = "{ownprivmsg msg $0}$1";
|
||||
own_msg_private_query = "{ownprivmsgnick {ownprivnick $2}}$1";
|
||||
pubmsg_me = "{pubmsgmenick $2 {menick $0}}$1";
|
||||
pubmsg_me_channel = "{pubmsgmenick $3 {menick $0}{msgchannel $1}}$2";
|
||||
pubmsg_hilight = "{pubmsghinick $0 $3 $1}$2";
|
||||
pubmsg_hilight_channel = "{pubmsghinick $0 $4 $1{msgchannel $2}}$3";
|
||||
pubmsg = "{pubmsgnick $2 {pubnick $0}}$1";
|
||||
pubmsg_channel = "{pubmsgnick $3 {pubnick $0}{msgchannel $1}}$2";
|
||||
msg_private = "{privmsg $0 $1}$2";
|
||||
msg_private_query = "{privmsgnick $0}$2";
|
||||
|
||||
};
|
||||
"fe-text" = {
|
||||
# === LEFT PANEL (Window List) ===
|
||||
# Server headers - electric blue with power symbol (consistent with theme primary)
|
||||
sidepanel_header = "%B⚡%B$0%N";
|
||||
# Server headers - electric blue with asterisk symbol (consistent with theme primary)
|
||||
sidepanel_header = "%B*%B$0%N";
|
||||
|
||||
# Normal items - steel gray (consistent with theme secondary text)
|
||||
sidepanel_item = "%W %W$0%N";
|
||||
|
||||
# Selected items - neon green highlight (consistent with theme highlights)
|
||||
sidepanel_item_selected = "%g%k❱ %g%k$0%N";
|
||||
sidepanel_item_selected = "%g%k> %g%k$0%N";
|
||||
|
||||
# === ACTIVITY HIERARCHY (by priority) ===
|
||||
|
||||
# PRIORITY 4 (Highest): NICK MENTION - magenta alert (when your nick is mentioned on channel)
|
||||
sidepanel_item_nick_mention = "%M⬢ %M$0%N";
|
||||
sidepanel_item_nick_mention = "%M# %M$0%N";
|
||||
|
||||
# PRIORITY 4 (Highest): QUERY MESSAGE - magenta alert (new messages in query/private)
|
||||
sidepanel_item_query_msg = "%M◆ %M$0%N";
|
||||
sidepanel_item_query_msg = "%M+ %M$0%N";
|
||||
|
||||
# PRIORITY 3: CHANNEL ACTIVITY - yellow warning (messages on channel without mention)
|
||||
sidepanel_item_activity = "%y● %y$0%N";
|
||||
sidepanel_item_activity = "%y* %y$0%N";
|
||||
|
||||
# PRIORITY 1 (Lowest): EVENTS - green info (join/part/quit/nick changes)
|
||||
sidepanel_item_events = "%G○%N %G$0%N";
|
||||
sidepanel_item_events = "%Go%N %G$0%N";
|
||||
|
||||
# PRIORITY 2: HIGHLIGHTS - red alert (keyword highlights, fallback)
|
||||
sidepanel_item_highlight = "%R☠ %R$0%N";
|
||||
sidepanel_item_highlight = "%R! %R$0%N";
|
||||
|
||||
# New dual-parameter formats - status and nick separated for theme flexibility
|
||||
# Operators - gold status symbol with steel nick (power users)
|
||||
|
|
@ -345,5 +362,5 @@ formats = {
|
|||
|
||||
# Normal users - subtle gray for clean appearance
|
||||
sidepanel_nick_normal_status = "%k$0%N%w$1%N";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue