aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordequis <dx@dxzone.com.ar>2016-12-24 01:56:45 -0300
committerdequis <dx@dxzone.com.ar>2016-12-25 21:18:55 -0300
commit90254d0d6daa664707503f5c909198aefdc1151c (patch)
treeee200e261a20d92cbbaddcb6b851c9051a27c3c6
parent0483e1e6e3954787058aff78223cb758f0074f2d (diff)
Add nick_lowercase and nick_underscores settings
-rw-r--r--doc/user-guide/commands.xml41
-rw-r--r--irc.c3
-rw-r--r--irc_channel.c2
-rw-r--r--nick.c20
4 files changed, 49 insertions, 17 deletions
diff --git a/doc/user-guide/commands.xml b/doc/user-guide/commands.xml
index ee361b0f..e27356b8 100644
--- a/doc/user-guide/commands.xml
+++ b/doc/user-guide/commands.xml
@@ -1036,17 +1036,6 @@
</bitlbee-setting>
- <bitlbee-setting name="lcnicks" type="boolean" scope="global">
- <default>true</default>
-
- <description>
- <para>
- Hereby you can change whether you want all lower case nick names or leave the case as it intended by your peer.
- </para>
- </description>
-
- </bitlbee-setting>
-
<bitlbee-setting name="local_display_name" type="boolean" scope="account">
<default>false</default>
@@ -1213,6 +1202,36 @@
</description>
</bitlbee-setting>
+ <bitlbee-setting name="nick_lowercase" type="boolean" scope="global">
+ <default>true</default>
+
+ <description>
+ <para>
+ If enabled, all nicknames are turned into lower case.
+ </para>
+
+ <para>
+ See also the <emphasis>nick_underscores</emphasis> setting. This setting was previously known as <emphasis>lcnicks</emphasis>.
+ </para>
+ </description>
+
+ </bitlbee-setting>
+
+ <bitlbee-setting name="nick_underscores" type="boolean" scope="global">
+ <default>true</default>
+
+ <description>
+ <para>
+ If enabled, spaces in nicknames are turned into underscores instead of being stripped.
+ </para>
+
+ <para>
+ See also the <emphasis>nick_lowercase</emphasis> setting.
+ </para>
+ </description>
+
+ </bitlbee-setting>
+
<bitlbee-setting name="oauth" type="boolean" scope="account">
<default>true</default>
diff --git a/irc.c b/irc.c
index 835bffa0..c1821eac 100644
--- a/irc.c
+++ b/irc.c
@@ -112,8 +112,9 @@ irc_t *irc_new(int fd)
s = set_add(&b->set, "handle_unknown", "add_channel", NULL, irc);
s = set_add(&b->set, "last_version", "0", NULL, irc);
s->flags |= SET_HIDDEN;
- s = set_add(&b->set, "lcnicks", "true", set_eval_bool, irc);
s = set_add(&b->set, "nick_format", "%-@nick", NULL, irc);
+ s = set_add(&b->set, "nick_lowercase", "false", set_eval_bool, irc);
+ s = set_add(&b->set, "nick_underscores", "false", set_eval_bool, irc);
s = set_add(&b->set, "offline_user_quits", "true", set_eval_bool, irc);
s = set_add(&b->set, "ops", "both", set_eval_irc_channel_ops, irc);
s = set_add(&b->set, "paste_buffer", "false", set_eval_bool, irc);
diff --git a/irc_channel.c b/irc_channel.c
index 3ccbce55..e2c77fc5 100644
--- a/irc_channel.c
+++ b/irc_channel.c
@@ -637,7 +637,7 @@ char *irc_channel_name_gen(irc_t *irc, const char *hint)
irc_channel_name_strip(name);
- if (set_getbool(&irc->b->set, "lcnicks")) {
+ if (set_getbool(&irc->b->set, "nick_lowercase")) {
nick_lc(irc, name + 1);
}
diff --git a/nick.c b/nick.c
index 9c47c2fe..f782aea2 100644
--- a/nick.c
+++ b/nick.c
@@ -93,7 +93,7 @@ char *nick_get(bee_user_t *bu)
}
nick_strip(irc, nick);
- if (set_getbool(&bu->bee->set, "lcnicks")) {
+ if (set_getbool(&bu->bee->set, "nick_lowercase")) {
nick_lc(irc, nick);
}
}
@@ -214,6 +214,11 @@ char *nick_gen(bee_user_t *bu)
rets = g_string_free(ret, FALSE);
if (ok && rets && *rets) {
nick_strip(irc, rets);
+
+ if (set_getbool(&bu->bee->set, "nick_lowercase")) {
+ nick_lc(irc, rets);
+ }
+
truncate_utf8(rets, MAX_NICK_LENGTH);
return rets;
}
@@ -287,6 +292,7 @@ void nick_del(bee_user_t *bu)
void nick_strip(irc_t *irc, char *nick)
{
int len = 0;
+ gboolean nick_underscores = set_getbool(&irc->b->set, "nick_underscores");
if (irc && (irc->status & IRC_UTF8_NICKS)) {
gunichar c;
@@ -296,8 +302,11 @@ void nick_strip(irc_t *irc, char *nick)
c = g_utf8_get_char_validated(p, -1);
n = g_utf8_find_next_char(p, NULL);
- if ((c < 0x7f && !(strchr(nick_lc_chars, c) ||
- strchr(nick_uc_chars, c))) ||
+ if (nick_underscores && c == ' ') {
+ *p = '_';
+ p = n;
+ } else if ((c < 0x7f && !(strchr(nick_lc_chars, c) ||
+ strchr(nick_uc_chars, c))) ||
!g_unichar_isgraph(c)) {
strcpy(tmp, n);
strcpy(p, tmp);
@@ -312,7 +321,10 @@ void nick_strip(irc_t *irc, char *nick)
int i;
for (i = len = 0; nick[i] && len < MAX_NICK_LENGTH; i++) {
- if (strchr(nick_lc_chars, nick[i]) ||
+ if (nick_underscores && nick[i] == ' ') {
+ nick[len] = '_';
+ len++;
+ } else if (strchr(nick_lc_chars, nick[i]) ||
strchr(nick_uc_chars, nick[i])) {
nick[len] = nick[i];
len++;