Fix nick truncation: Add nicktrunc expando and separate logic

- Add expando_nicktrunc() that returns truncated nick with >> indicator
- Keep expando_nickalign() for padding only (no nick modification)
- Update theme to use $nicktrunc instead of $0 for nick display
- Fix logic: nickalign returns spaces, nicktrunc returns truncated nick
- This resolves issue where long nicks weren't being truncated

Timestamp: 2025-01-24 23:50
This commit is contained in:
kofany 2025-08-25 00:01:39 +02:00
commit f69e40e745
3 changed files with 61 additions and 24 deletions

View file

@ -319,7 +319,7 @@ settings = {
theme = "default.theme"; theme = "default.theme";
nick_column_enabled = "yes"; nick_column_enabled = "yes";
nick_column_width = "10"; nick_column_width = "10";
debug_nick_column = "no"; debug_nick_column = "yes";
}; };
"fe-text" = { "fe-text" = {
lag_min_show = "1s"; lag_min_show = "1s";

View file

@ -87,19 +87,6 @@ static char *expando_nickalign(SERVER_REC *server, void *item, int *free_ret)
total_chars = mode_chars + nick_chars; total_chars = mode_chars + nick_chars;
if (total_chars > width) { if (total_chars > width) {
/* Nick za długi - przytnij z >> */
int available_for_nick = width - mode_chars - 2; /* -2 dla >> */
if (available_for_nick > 0) {
/* Przytnij nick i dodaj >> */
char *truncated = g_strndup(current_nick, available_for_nick);
g_free(current_nick);
current_nick = g_strdup_printf("%s>>", truncated);
g_free(truncated);
} else {
/* Mode sam za długi */
g_free(current_nick);
current_nick = g_strdup(">>");
}
padding = 0; padding = 0;
} else { } else {
padding = width - total_chars; padding = width - total_chars;
@ -107,14 +94,60 @@ static char *expando_nickalign(SERVER_REC *server, void *item, int *free_ret)
/* Debug output */ /* Debug output */
if (settings_get_bool("debug_nick_column")) { if (settings_get_bool("debug_nick_column")) {
printf("DEBUG nickalign: nick='%s', mode='%s', width=%d, mode_chars=%d, nick_chars=%d, padding=%d\n", printf("DEBUG nickalign: nick='%s', mode='%s', width=%d, mode_chars=%d, nick_chars=%d, total_chars=%d, padding=%d\n",
current_nick, mode, width, mode_chars, nick_chars, padding); current_nick, mode, width, mode_chars, nick_chars, total_chars, padding);
} }
*free_ret = TRUE; *free_ret = TRUE;
return g_strnfill(padding, ' '); return g_strnfill(padding, ' ');
} }
/* Nick truncated - returns truncated nick with >> indicator */
static char *expando_nicktrunc(SERVER_REC *server, void *item, int *free_ret)
{
int width, mode_chars, nick_chars, total_chars;
const char *mode;
char *result;
if (!settings_get_bool("nick_column_enabled") || !nick_context_valid || !current_nick) {
return current_nick ? current_nick : "";
}
width = settings_get_int("nick_column_width");
mode = current_mode ? current_mode : "";
/* Zawsze 1 miejsce na mode (nawet spacja) */
mode_chars = strlen(mode) > 0 ? strlen(mode) : 1;
nick_chars = count_nick_chars(current_nick);
total_chars = mode_chars + nick_chars;
if (total_chars > width) {
/* Nick za długi - przytnij z >> */
int available_for_nick = width - mode_chars - 2; /* -2 dla >> */
if (available_for_nick > 0) {
/* Przytnij nick i dodaj >> */
result = g_strdup_printf("%.*s>>", available_for_nick, current_nick);
if (settings_get_bool("debug_nick_column")) {
printf("DEBUG nicktrunc TRUNCATED: original='%s', truncated='%s', available_for_nick=%d\n",
current_nick, result, available_for_nick);
}
} else {
/* Mode sam za długi */
result = g_strdup(">>");
if (settings_get_bool("debug_nick_column")) {
printf("DEBUG nicktrunc MODE_TOO_LONG: result='%s'\n", result);
}
}
*free_ret = TRUE;
return result;
} else {
/* Nick się zmieści - zwróć oryginalny */
return current_nick;
}
}
/* Update nick context for expandos */ /* Update nick context for expandos */
void update_nick_context(const char *nick, const char *mode) void update_nick_context(const char *nick, const char *mode)
{ {
@ -142,6 +175,9 @@ void fe_expandos_init(void)
expando_create("nickalign", expando_nickalign, expando_create("nickalign", expando_nickalign,
"message public", EXPANDO_ARG_NONE, "message public", EXPANDO_ARG_NONE,
"message own_public", EXPANDO_ARG_NONE, NULL); "message own_public", EXPANDO_ARG_NONE, NULL);
expando_create("nicktrunc", expando_nicktrunc,
"message public", EXPANDO_ARG_NONE,
"message own_public", EXPANDO_ARG_NONE, NULL);
} }
void fe_expandos_deinit(void) void fe_expandos_deinit(void)
@ -149,4 +185,5 @@ void fe_expandos_deinit(void)
expando_destroy("winref", expando_winref); expando_destroy("winref", expando_winref);
expando_destroy("winname", expando_winname); expando_destroy("winname", expando_winname);
expando_destroy("nickalign", expando_nickalign); expando_destroy("nickalign", expando_nickalign);
expando_destroy("nicktrunc", expando_nicktrunc);
} }

View file

@ -306,14 +306,14 @@ abstracts = {
formats = { formats = {
"fe-common/core" = { "fe-common/core" = {
own_msg = "$nickalign{ownmsgnick $2 {ownnick $0}}$1"; own_msg = "$nickalign{ownmsgnick $2 {ownnick $nicktrunc}}$1";
own_msg_channel = "$nickalign{ownmsgnick $3 {ownnick $0}{msgchannel $1}}$2"; own_msg_channel = "$nickalign{ownmsgnick $3 {ownnick $nicktrunc}{msgchannel $1}}$2";
pubmsg_me = "$nickalign{pubmsgmenick $2 {menick $0}}$1"; pubmsg_me = "$nickalign{pubmsgmenick $2 {menick $nicktrunc}}$1";
pubmsg_me_channel = "$nickalign{pubmsgmenick $3 {menick $0}{msgchannel $1}}$2"; pubmsg_me_channel = "$nickalign{pubmsgmenick $3 {menick $nicktrunc}{msgchannel $1}}$2";
pubmsg_hilight = "$nickalign{pubmsghinick $0 $3 $1}$2"; pubmsg_hilight = "$nickalign{pubmsghinick $0 $3 $nicktrunc}$2";
pubmsg_hilight_channel = "$nickalign{pubmsghinick $0 $4 $1{msgchannel $2}}$3"; pubmsg_hilight_channel = "$nickalign{pubmsghinick $0 $4 $nicktrunc{msgchannel $2}}$3";
pubmsg = "$nickalign{pubmsgnick $2 {pubnick $0}}$1"; pubmsg = "$nickalign{pubmsgnick $2 {pubnick $nicktrunc}}$1";
pubmsg_channel = "$nickalign{pubmsgnick $3 {pubnick $0}{msgchannel $1}}$2"; pubmsg_channel = "$nickalign{pubmsgnick $3 {pubnick $nicktrunc}{msgchannel $1}}$2";
msg_private = "{privmsg $0 $1}$2"; msg_private = "{privmsg $0 $1}$2";
msg_private_query = "{privmsgnick $0}$2"; msg_private_query = "{privmsgnick $0}$2";