From c3e321d6b50659d32d7d6965da8709efc1709392 Mon Sep 17 00:00:00 2001 From: kofany Date: Wed, 27 Aug 2025 15:00:41 +0200 Subject: [PATCH] Clean up branch for pull request --- .augment/rules/imported/summary.md | 197 ---------------- .cursorindexingignore | 3 - .specstory/.gitignore | 4 - .vscode/settings.json | 12 - GEMINI.md | 32 +++ config_dev | 350 ----------------------------- configure.sh | 160 ------------- summary.md | 193 ---------------- 8 files changed, 32 insertions(+), 919 deletions(-) delete mode 100644 .augment/rules/imported/summary.md delete mode 100644 .cursorindexingignore delete mode 100644 .specstory/.gitignore delete mode 100644 .vscode/settings.json create mode 100644 GEMINI.md delete mode 100644 config_dev delete mode 100755 configure.sh delete mode 100644 summary.md diff --git a/.augment/rules/imported/summary.md b/.augment/rules/imported/summary.md deleted file mode 100644 index bbf45e28..00000000 --- a/.augment/rules/imported/summary.md +++ /dev/null @@ -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. diff --git a/.cursorindexingignore b/.cursorindexingignore deleted file mode 100644 index 953908e7..00000000 --- a/.cursorindexingignore +++ /dev/null @@ -1,3 +0,0 @@ - -# Don't index SpecStory auto-save files, but allow explicit context inclusion via @ references -.specstory/** diff --git a/.specstory/.gitignore b/.specstory/.gitignore deleted file mode 100644 index c5b4129e..00000000 --- a/.specstory/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# SpecStory project identity file -/.project.json -# SpecStory explanation file -/.what-is-this.md diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index d9718476..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -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 -} \ No newline at end of file diff --git a/GEMINI.md b/GEMINI.md new file mode 100644 index 00000000..3a59c50e --- /dev/null +++ b/GEMINI.md @@ -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 +``` diff --git a/config_dev b/config_dev deleted file mode 100644 index a29b672f..00000000 --- a/config_dev +++ /dev/null @@ -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"; }; }; diff --git a/configure.sh b/configure.sh deleted file mode 100755 index 4f133478..00000000 --- a/configure.sh +++ /dev/null @@ -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| /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.