summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormathieui <mathieui@mathieui.net>2013-03-04 00:23:58 +0100
committermathieui <mathieui@mathieui.net>2013-03-04 00:23:58 +0100
commit1e9e2112f73fc3f2e6552158e57d6a623749eb75 (patch)
treea1ce204099f06fcf69a9a66710e9e0eb3890763e /src
parent4be111b63ebf8ba0be6b12b3e370deaf5a45180f (diff)
downloadpoezio-1e9e2112f73fc3f2e6552158e57d6a623749eb75.tar.gz
poezio-1e9e2112f73fc3f2e6552158e57d6a623749eb75.tar.bz2
poezio-1e9e2112f73fc3f2e6552158e57d6a623749eb75.tar.xz
poezio-1e9e2112f73fc3f2e6552158e57d6a623749eb75.zip
Fix #2126 (per-server configuration sections)
(also move replace_key_with_bound() to core.py, to prevent having common.py depending of config.py)
Diffstat (limited to 'src')
-rw-r--r--src/common.py8
-rw-r--r--src/config.py19
-rw-r--r--src/core.py8
3 files changed, 25 insertions, 10 deletions
diff --git a/src/common.py b/src/common.py
index 3b80fa34..e4e3a52d 100644
--- a/src/common.py
+++ b/src/common.py
@@ -20,8 +20,6 @@ import time
import string
import shlex
-from config import config
-
ROOM_STATE_NONE = 11
ROOM_STATE_CURRENT = 10
ROOM_STATE_PRIVATE = 15
@@ -188,12 +186,6 @@ def shell_split(st):
except ValueError:
return st.split(" ")
-def replace_key_with_bound(key):
- bind = config.get(key, key, 'bindings')
- if not bind:
- bind = key
- return bind
-
def parse_str_to_secs(duration=''):
"""
Parse a string of with a number of d, h, m, s
diff --git a/src/config.py b/src/config.py
index 88ba38c9..e3c93f29 100644
--- a/src/config.py
+++ b/src/config.py
@@ -16,6 +16,7 @@ from configparser import RawConfigParser, NoOptionError, NoSectionError
from os import environ, makedirs, path
from shutil import copy2
from args import parse_args
+from common import safeJID
class Config(RawConfigParser):
@@ -62,7 +63,7 @@ class Config(RawConfigParser):
"""
return self.get(option, default, section).lower()
- def get_by_tabname(self, option, default, tabname, fallback=True):
+ def get_by_tabname(self, option, default, tabname, fallback=True, fallback_server=True):
"""
Try to get the value for the option. First we look in
a section named `tabname`, if the option is not present
@@ -73,11 +74,27 @@ class Config(RawConfigParser):
if option in self.options(tabname):
# We go the tab-specific option
return self.get(option, default, tabname)
+ if fallback_server:
+ return self.get_by_servname(tabname, option, default, fallback)
if fallback:
# We fallback to the global option
return self.get(option, default)
return default
+ def get_by_servname(self, jid, option, default, fallback=True):
+ """
+ Try to get the value of an option for a server
+ """
+ server = safeJID(jid).server
+ if server:
+ server = '@' + server
+ if server in self.sections() and option in self.options(server):
+ return self.get(option, default, server)
+ if fallback:
+ return self.get(option, default)
+ return default
+
+
def __get(self, option, section=DEFSECTION):
"""
facility for RawConfigParser.get
diff --git a/src/core.py b/src/core.py
index b8aaf18e..03f892b6 100644
--- a/src/core.py
+++ b/src/core.py
@@ -381,7 +381,7 @@ class Core(object):
res.append(current)
return res
while self.running:
- big_char_list = [common.replace_key_with_bound(key)\
+ big_char_list = [replace_key_with_bound(key)\
for key in self.read_keyboard()]
# whether to refresh after ALL keys have been handled
for char_list in separate_chars_from_bindings(big_char_list):
@@ -3175,4 +3175,10 @@ class KeyDict(dict):
return lambda: dict.get(self, '_exc_')(k[5:])
return dict.get(self, k, d)
+def replace_key_with_bound(key):
+ bind = config.get(key, key, 'bindings')
+ if not bind:
+ bind = key
+ return bind
+