mirror of
https://github.com/irssi/irssi.git
synced 2026-08-21 17:42:49 +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";
|
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";
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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";
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue