mirror of
https://github.com/irssi/irssi.git
synced 2026-08-08 19:30:15 +02:00
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:
parent
1fa2f42b6f
commit
f69e40e745
3 changed files with 61 additions and 24 deletions
|
|
@ -319,7 +319,7 @@ settings = {
|
|||
theme = "default.theme";
|
||||
nick_column_enabled = "yes";
|
||||
nick_column_width = "10";
|
||||
debug_nick_column = "no";
|
||||
debug_nick_column = "yes";
|
||||
};
|
||||
"fe-text" = {
|
||||
lag_min_show = "1s";
|
||||
|
|
|
|||
|
|
@ -87,19 +87,6 @@ static char *expando_nickalign(SERVER_REC *server, void *item, int *free_ret)
|
|||
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 >> */
|
||||
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;
|
||||
} else {
|
||||
padding = width - total_chars;
|
||||
|
|
@ -107,14 +94,60 @@ static char *expando_nickalign(SERVER_REC *server, void *item, int *free_ret)
|
|||
|
||||
/* Debug output */
|
||||
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",
|
||||
current_nick, mode, width, mode_chars, nick_chars, padding);
|
||||
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, total_chars, padding);
|
||||
}
|
||||
|
||||
*free_ret = TRUE;
|
||||
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 */
|
||||
void update_nick_context(const char *nick, const char *mode)
|
||||
{
|
||||
|
|
@ -142,6 +175,9 @@ void fe_expandos_init(void)
|
|||
expando_create("nickalign", expando_nickalign,
|
||||
"message public", EXPANDO_ARG_NONE,
|
||||
"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)
|
||||
|
|
@ -149,4 +185,5 @@ void fe_expandos_deinit(void)
|
|||
expando_destroy("winref", expando_winref);
|
||||
expando_destroy("winname", expando_winname);
|
||||
expando_destroy("nickalign", expando_nickalign);
|
||||
expando_destroy("nicktrunc", expando_nicktrunc);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -306,14 +306,14 @@ abstracts = {
|
|||
formats = {
|
||||
"fe-common/core" = {
|
||||
|
||||
own_msg = "$nickalign{ownmsgnick $2 {ownnick $0}}$1";
|
||||
own_msg_channel = "$nickalign{ownmsgnick $3 {ownnick $0}{msgchannel $1}}$2";
|
||||
pubmsg_me = "$nickalign{pubmsgmenick $2 {menick $0}}$1";
|
||||
pubmsg_me_channel = "$nickalign{pubmsgmenick $3 {menick $0}{msgchannel $1}}$2";
|
||||
pubmsg_hilight = "$nickalign{pubmsghinick $0 $3 $1}$2";
|
||||
pubmsg_hilight_channel = "$nickalign{pubmsghinick $0 $4 $1{msgchannel $2}}$3";
|
||||
pubmsg = "$nickalign{pubmsgnick $2 {pubnick $0}}$1";
|
||||
pubmsg_channel = "$nickalign{pubmsgnick $3 {pubnick $0}{msgchannel $1}}$2";
|
||||
own_msg = "$nickalign{ownmsgnick $2 {ownnick $nicktrunc}}$1";
|
||||
own_msg_channel = "$nickalign{ownmsgnick $3 {ownnick $nicktrunc}{msgchannel $1}}$2";
|
||||
pubmsg_me = "$nickalign{pubmsgmenick $2 {menick $nicktrunc}}$1";
|
||||
pubmsg_me_channel = "$nickalign{pubmsgmenick $3 {menick $nicktrunc}{msgchannel $1}}$2";
|
||||
pubmsg_hilight = "$nickalign{pubmsghinick $0 $3 $nicktrunc}$2";
|
||||
pubmsg_hilight_channel = "$nickalign{pubmsghinick $0 $4 $nicktrunc{msgchannel $2}}$3";
|
||||
pubmsg = "$nickalign{pubmsgnick $2 {pubnick $nicktrunc}}$1";
|
||||
pubmsg_channel = "$nickalign{pubmsgnick $3 {pubnick $nicktrunc}{msgchannel $1}}$2";
|
||||
msg_private = "{privmsg $0 $1}$2";
|
||||
msg_private_query = "{privmsgnick $0}$2";
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue