2008-04-23 [paul] 3.4.0cvs8
[claws.git] / src / prefs_common.c
1 /*
2  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3  * Copyright (C) 1999-2007 Hiroyuki Yamamoto and the Claws Mail team
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17  * 
18  */
19
20 #ifdef HAVE_CONFIG_H
21 #  include "config.h"
22 #endif
23
24 #include "defs.h"
25
26 #include <glib.h>
27 #include <glib/gi18n.h>
28 #include <gtk/gtk.h>
29 #include <gdk/gdkkeysyms.h>
30 #include <stdio.h>
31 #include <stdlib.h>
32 #include <string.h>
33 #include <unistd.h>
34 #include <sys/types.h>
35 #include <sys/stat.h>
36 #include <errno.h>
37
38 #include "main.h"
39 #include "prefs_gtk.h"
40 #include "prefs_common.h"
41 #include "prefs_display_header.h"
42 #include "prefs_summary_column.h"
43 #include "prefs_folder_column.h"
44 #include "mainwindow.h"
45 #include "summaryview.h"
46 #include "folderview.h"
47 #include "messageview.h"
48 #include "manage_window.h"
49 #include "inc.h"
50 #include "menu.h"
51 #include "codeconv.h"
52 #include "utils.h"
53 #include "gtkutils.h"
54 #include "alertpanel.h"
55 #include "folder.h"
56 #include "socket.h"
57 #include "filesel.h"
58 #include "folderview.h"
59 #include "stock_pixmap.h"
60 #include "prefswindow.h"
61 #include "colorlabel.h"
62 #include "addrcustomattr.h"
63
64 enum {
65         DATEFMT_FMT,
66         DATEFMT_TXT,
67         N_DATEFMT_COLUMNS
68 };
69
70 PrefsCommon prefs_common;
71
72 GtkWidget *notebook;
73
74 #ifdef G_OS_WIN32
75 /*
76  * In the Windows version prefs_common contains
77  *   - the non-OS-specific settings of the "Common" section and
78  *   - the OS-specific settings of the "CommonWin32" section
79  * The OS-specific settings of the "Common" section are not used
80  * but saved in prefs_unix.
81  */
82
83 #  define SPECIFIC_PREFS prefs_unix
84
85 static PrefsCommon prefs_unix;
86
87 static PrefParam param_os_specific[] = {
88         /* Receive */
89         {"ext_inc_path", "",
90          &prefs_common.extinc_cmd, P_STRING, NULL, NULL, NULL},
91         {"newmail_notify_cmd", "",
92          &prefs_common.newmail_notify_cmd, P_STRING, NULL, NULL, NULL},
93
94         /* new fonts */
95         {"widget_font_gtk2",    NULL,
96           &prefs_common.widgetfont,             P_STRING, NULL, NULL, NULL},
97         {"message_font_gtk2",   "Monospace 9",
98          &prefs_common.textfont,                P_STRING, NULL, NULL, NULL},
99         {"print_font_gtk2",     "Monospace 9",
100          &prefs_common.printfont,               P_STRING, NULL, NULL, NULL},
101         {"small_font_gtk2",     "Sans 9",
102           &prefs_common.smallfont,              P_STRING, NULL, NULL, NULL},
103         {"normal_font_gtk2",    "Sans 9",
104           &prefs_common.normalfont,             P_STRING, NULL, NULL, NULL},
105         {"bold_font_gtk2",      "Sans 9 Bold",
106           &prefs_common.boldfont,               P_STRING, NULL, NULL, NULL},
107         /* Message */
108         {"attach_save_directory", NULL,
109          &prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL},
110         {"attach_load_directory", NULL,
111          &prefs_common.attach_load_dir, P_STRING, NULL, NULL, NULL},
112
113         /* MIME viewer */
114         {"mime_textviewer", NULL,
115          &prefs_common.mime_textviewer,   P_STRING, NULL, NULL, NULL},
116         {"mime_open_command", "notepad '%s'",
117          &prefs_common.mime_open_cmd,     P_STRING, NULL, NULL, NULL},
118
119         /* Interface */
120         {"pixmap_theme_path", DEFAULT_PIXMAP_THEME, 
121          &prefs_common.pixmap_theme_path, P_STRING, NULL, NULL, NULL},
122
123         /* Other */
124         {"uri_open_command", NULL,
125          &prefs_common.uri_cmd, P_STRING, NULL, NULL, NULL},
126         {"print_command", "notepad /p %s",
127          &prefs_common.print_cmd, P_STRING, NULL, NULL, NULL},
128         {"ext_editor_command", "notepad %s",
129          &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
130
131         {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
132 };
133 #else
134 #  define SPECIFIC_PREFS prefs_common
135 #endif
136
137 /*
138    parameter name, default value, pointer to the prefs variable, data type,
139    pointer to the widget pointer,
140    pointer to the function for data setting,
141    pointer to the function for widget setting
142  */
143
144 static PrefParam param[] = {
145 #ifdef MAEMO
146         {"data_root", "", &prefs_common.data_root, P_STRING,
147          NULL, NULL, NULL},
148 #endif
149         /* Receive */
150         {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
151          NULL, NULL, NULL},
152         {"ext_inc_path", DEFAULT_INC_PATH, &SPECIFIC_PREFS.extinc_cmd, P_STRING,
153          NULL, NULL, NULL},
154
155         {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
156          NULL, NULL, NULL},
157         {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
158          NULL, NULL, NULL},
159         {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
160          NULL, NULL, NULL},
161         {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
162          P_BOOL, NULL, NULL, NULL},
163         {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
164          P_BOOL, NULL, NULL, NULL},
165         {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
166          P_BOOL, NULL, NULL, NULL},
167         {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
168         P_BOOL, NULL, NULL, NULL},
169         {"newmail_notify_cmd", "", &SPECIFIC_PREFS.newmail_notify_cmd, P_STRING,
170          NULL, NULL, NULL},
171 #ifdef MAEMO
172         {"maemo_show_led", "TRUE", &prefs_common.maemo_show_led, P_BOOL,
173          NULL, NULL, NULL},
174         {"maemo_play_sound", "FALSE", &prefs_common.maemo_play_sound, P_BOOL,
175          NULL, NULL, NULL},
176         {"maemo_show_banner", "FALSE", &prefs_common.maemo_show_banner, P_BOOL,
177          NULL, NULL, NULL},
178 #endif
179         {"receive_dialog_mode", "2", &prefs_common.recv_dialog_mode, P_ENUM,
180          NULL, NULL, NULL},
181         {"receivewin_width", "460", &prefs_common.receivewin_width, P_INT,
182          NULL, NULL, NULL},
183         {"receivewin_height", "-1", &prefs_common.receivewin_height, P_INT,
184          NULL, NULL, NULL},
185         {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
186          P_BOOL, NULL, NULL, NULL},
187         {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
188          P_BOOL, NULL, NULL, NULL},
189  
190         /* Send */
191         {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
192          NULL, NULL, NULL},
193         {"confirm_send_queued_messages", "FALSE", &prefs_common.confirm_send_queued_messages,
194          P_BOOL, NULL, NULL, NULL},
195 #ifndef MAEMO
196         {"send_dialog_mode", "0", &prefs_common.send_dialog_invisible, P_BOOL,
197          NULL, NULL, NULL},
198 #else
199         {"send_dialog_mode", "1", &prefs_common.send_dialog_invisible, P_BOOL,
200          NULL, NULL, NULL},
201 #endif
202         {"sendwin_width", "460", &prefs_common.sendwin_width, P_INT,
203          NULL, NULL, NULL},
204         {"sendwin_height", "-1", &prefs_common.sendwin_height, P_INT,
205          NULL, NULL, NULL},
206
207         {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
208          NULL, NULL, NULL},
209         {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
210          NULL, NULL, NULL},
211
212         {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
213          P_BOOL, NULL, NULL, NULL},
214
215         /* Compose */
216         {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
217          NULL, NULL, NULL},
218         {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
219          P_BOOL, NULL, NULL, NULL},
220         {"redirect_keep_from", "FALSE",
221          &prefs_common.redirect_keep_from, P_BOOL,
222          NULL, NULL, NULL},
223         {"undo_level", "50", &prefs_common.undolevels, P_INT,
224          NULL, NULL, NULL},
225         {"compose_with_format", "FALSE", &prefs_common.compose_with_format, P_BOOL,
226          NULL, NULL, NULL},
227         {"compose_subject_format", "",
228          &prefs_common.compose_subject_format, P_STRING, NULL, NULL, NULL},
229         {"compose_body_format", NULL,
230          &prefs_common.compose_body_format, P_STRING, NULL, NULL, NULL},
231
232         {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
233          NULL, NULL, NULL},
234         {"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
235          NULL, NULL, NULL},
236         {"linewrap_pastes", "TRUE", &prefs_common.linewrap_pastes, P_BOOL,
237          NULL, NULL, NULL},
238         {"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
239          NULL, NULL, NULL},
240         {"autosave", "TRUE", &prefs_common.autosave,
241          P_BOOL, NULL, NULL, NULL},
242         {"autosave_length", "50", &prefs_common.autosave_length, P_INT,
243          NULL, NULL, NULL},
244 #if USE_ASPELL
245         {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
246          NULL, NULL, NULL},
247         {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path, P_STRING,
248          NULL, NULL, NULL},
249         {"dictionary",  "", &prefs_common.dictionary, P_STRING,
250          NULL, NULL, NULL},
251         {"alt_dictionary",  "", &prefs_common.alt_dictionary, P_STRING,
252          NULL, NULL, NULL},
253         {"aspell_sugmode", "1", &prefs_common.aspell_sugmode, P_INT,
254          NULL, NULL, NULL},
255         {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
256          NULL, NULL, NULL},
257         {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
258          NULL, NULL, NULL},
259         {"recheck_when_changing_dict", "TRUE", &prefs_common.recheck_when_changing_dict,
260          P_BOOL, NULL, NULL, NULL},
261         {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
262          NULL, NULL, NULL},
263         {"use_both_dicts", "FALSE", &prefs_common.use_both_dicts, P_BOOL,
264          NULL, NULL, NULL},
265 #endif
266         {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
267          NULL, NULL, NULL},
268         {"compose_dnd_insert_or_attach", "0", &prefs_common.compose_dnd_mode, P_ENUM,
269          NULL, NULL, NULL},
270
271         /* Account autoselection */
272         {"reply_account_autoselect", "TRUE",
273          &prefs_common.reply_account_autosel, P_BOOL,
274          NULL, NULL, NULL},
275         {"forward_account_autoselect", "TRUE",
276          &prefs_common.forward_account_autosel, P_BOOL,
277          NULL, NULL, NULL},
278         {"reedit_account_autoselect", "TRUE",
279          &prefs_common.reedit_account_autosel, P_BOOL,
280          NULL, NULL, NULL},
281
282         {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
283          NULL, NULL, NULL},
284
285 #ifndef MAEMO
286         {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
287          NULL, NULL, NULL},
288 #else
289         {"show_ruler", "FALSE", &prefs_common.show_ruler, P_BOOL,
290          NULL, NULL, NULL},
291 #endif
292
293         /* Quote */
294         {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
295          NULL, NULL, NULL},
296         {"reply_quote_format", NULL,
297          &prefs_common.quotefmt, P_STRING, NULL, NULL, NULL},
298
299         {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
300          NULL, NULL, NULL},
301         {"forward_quote_format", NULL, &prefs_common.fw_quotefmt, P_STRING,
302          NULL, NULL, NULL},
303         {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
304          NULL, NULL, NULL},
305
306         /* Display */
307         /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
308         {"widget_font",         NULL,
309           &prefs_common.widgetfont_gtk1,        P_STRING, NULL, NULL, NULL},
310         {"message_font",        "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
311          &prefs_common.textfont_gtk1,           P_STRING, NULL, NULL, NULL},
312         {"small_font",          "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
313           &prefs_common.smallfont_gtk1,         P_STRING, NULL, NULL, NULL},
314         {"bold_font",           "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
315           &prefs_common.boldfont_gtk1,          P_STRING, NULL, NULL, NULL},
316         {"normal_font",         "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
317           &prefs_common.normalfont_gtk1,        P_STRING, NULL, NULL, NULL},
318
319         /* new fonts */
320 #ifndef MAEMO
321         {"widget_font_gtk2",    NULL,
322           &SPECIFIC_PREFS.widgetfont,           P_STRING, NULL, NULL, NULL},
323         {"message_font_gtk2",   "Monospace 9",
324          &SPECIFIC_PREFS.textfont,                      P_STRING, NULL, NULL, NULL},
325         {"print_font_gtk2",     "Monospace 9",
326          &SPECIFIC_PREFS.printfont,             P_STRING, NULL, NULL, NULL},
327         {"small_font_gtk2",     "Sans 9",
328           &SPECIFIC_PREFS.smallfont,            P_STRING, NULL, NULL, NULL},
329         {"normal_font_gtk2",    "Sans 9",
330           &SPECIFIC_PREFS.normalfont,           P_STRING, NULL, NULL, NULL},
331         {"bold_font_gtk2",      "Sans Bold 9",
332           &SPECIFIC_PREFS.boldfont,             P_STRING, NULL, NULL, NULL},
333 #else
334         {"widget_font_gtk2",    NULL,
335           &SPECIFIC_PREFS.widgetfont,           P_STRING, NULL, NULL, NULL},
336         {"message_font_gtk2",   "Monospace 8",
337          &SPECIFIC_PREFS.textfont,                      P_STRING, NULL, NULL, NULL},
338         {"print_font_gtk2",     "Monospace 8",
339          &SPECIFIC_PREFS.printfont,             P_STRING, NULL, NULL, NULL},
340         {"small_font_gtk2",     "Sans 8",
341           &SPECIFIC_PREFS.smallfont,            P_STRING, NULL, NULL, NULL},
342         {"normal_font_gtk2",    "Sans 8",
343           &SPECIFIC_PREFS.normalfont,           P_STRING, NULL, NULL, NULL},
344         {"bold_font_gtk2",      "Sans Bold 8",
345           &SPECIFIC_PREFS.boldfont,             P_STRING, NULL, NULL, NULL},
346 #endif
347
348         {"use_different_print_font", "FALSE", &prefs_common.use_different_print_font, P_BOOL,
349          NULL, NULL, NULL},
350         {"derive_from_normal_font", "TRUE", &prefs_common.derive_from_normal_font, P_BOOL,
351          NULL, NULL, NULL},
352
353         /* custom colors */
354         {"custom_color1", "#ff9900", &prefs_common.custom_colorlabel[0].color, P_COLOR,
355          NULL, NULL, NULL},
356         {"custom_colorlabel1", N_("Orange"), &prefs_common.custom_colorlabel[0].label, P_STRING,
357          NULL, NULL, NULL},
358         {"custom_color2", "#ff0000", &prefs_common.custom_colorlabel[1].color, P_COLOR,
359          NULL, NULL, NULL},
360         {"custom_colorlabel2", N_("Red"), &prefs_common.custom_colorlabel[1].label, P_STRING,
361          NULL, NULL, NULL},
362         {"custom_color3", "#ff66ff", &prefs_common.custom_colorlabel[2].color, P_COLOR,
363          NULL, NULL, NULL},
364         {"custom_colorlabel3", N_("Pink"), &prefs_common.custom_colorlabel[2].label, P_STRING,
365          NULL, NULL, NULL},
366         {"custom_color4", "#00ccff", &prefs_common.custom_colorlabel[3].color, P_COLOR,
367          NULL, NULL, NULL},
368         {"custom_colorlabel4", N_("Sky blue"), &prefs_common.custom_colorlabel[3].label, P_STRING,
369          NULL, NULL, NULL},
370         {"custom_color5", "#0000ff", &prefs_common.custom_colorlabel[4].color, P_COLOR,
371          NULL, NULL, NULL},
372         {"custom_colorlabel5", N_("Blue"), &prefs_common.custom_colorlabel[4].label, P_STRING,
373          NULL, NULL, NULL},
374         {"custom_color6", "#009900", &prefs_common.custom_colorlabel[5].color, P_COLOR,
375          NULL, NULL, NULL},
376         {"custom_colorlabel6", N_("Green"), &prefs_common.custom_colorlabel[5].label, P_STRING,
377          NULL, NULL, NULL},
378         {"custom_color7", "#663333", &prefs_common.custom_colorlabel[6].color, P_COLOR,
379          NULL, NULL, NULL},
380         {"custom_colorlabel7", N_("Brown"), &prefs_common.custom_colorlabel[6].label, P_STRING,
381          NULL, NULL, NULL},
382         {"custom_color8", "#aaaaaa", &prefs_common.custom_colorlabel[7].color, P_COLOR,
383          NULL, NULL, NULL},
384         {"custom_colorlabel8", N_("Grey"), &prefs_common.custom_colorlabel[7].label, P_STRING,
385          NULL, NULL, NULL},
386         {"custom_color9", "#c07254", &prefs_common.custom_colorlabel[8].color, P_COLOR,
387          NULL, NULL, NULL},
388         {"custom_colorlabel9", N_("Light brown"), &prefs_common.custom_colorlabel[8].label, P_STRING,
389          NULL, NULL, NULL},
390         {"custom_color10", "#c00000", &prefs_common.custom_colorlabel[9].color, P_COLOR,
391          NULL, NULL, NULL},
392         {"custom_colorlabel10", N_("Dark red"), &prefs_common.custom_colorlabel[9].label, P_STRING,
393          NULL, NULL, NULL},
394         {"custom_color11", "#cc1074", &prefs_common.custom_colorlabel[10].color, P_COLOR,
395          NULL, NULL, NULL},
396         {"custom_colorlabel11", N_("Dark pink"), &prefs_common.custom_colorlabel[10].label, P_STRING,
397          NULL, NULL, NULL},
398         {"custom_color12", "#5094cd", &prefs_common.custom_colorlabel[11].color, P_COLOR,
399          NULL, NULL, NULL},
400         {"custom_colorlabel12", N_("Steel blue"), &prefs_common.custom_colorlabel[11].label, P_STRING,
401          NULL, NULL, NULL},
402         {"custom_color13", "#ffd500", &prefs_common.custom_colorlabel[12].color, P_COLOR,
403          NULL, NULL, NULL},
404         {"custom_colorlabel13", N_("Gold"), &prefs_common.custom_colorlabel[12].label, P_STRING,
405          NULL, NULL, NULL},
406         {"custom_color14", "#00d800", &prefs_common.custom_colorlabel[13].color, P_COLOR,
407          NULL, NULL, NULL},
408         {"custom_colorlabel14", N_("Bright green"), &prefs_common.custom_colorlabel[13].label, P_STRING,
409          NULL, NULL, NULL},
410         {"custom_color15", "#c060c0", &prefs_common.custom_colorlabel[14].color, P_COLOR,
411          NULL, NULL, NULL},
412         {"custom_colorlabel15", N_("Magenta"), &prefs_common.custom_colorlabel[14].label, P_STRING,
413          NULL, NULL, NULL},
414
415         /* image viewer */
416         {"display_image", "TRUE", &prefs_common.display_img, P_BOOL,
417          NULL, NULL, NULL},
418         {"resize_image", "TRUE", &prefs_common.resize_img, P_BOOL,
419          NULL, NULL, NULL},
420         {"inline_image", "TRUE", &prefs_common.inline_img, P_BOOL,
421          NULL, NULL, NULL},
422
423         {"display_folder_unread_num", "0",
424          &prefs_common.display_folder_unread, P_INT,
425          NULL, NULL, NULL},
426         {"newsgroup_abbrev_len", "16",
427          &prefs_common.ng_abbrev_len, P_INT,
428          NULL, NULL, NULL},
429
430         {"translate_header", "FALSE", &prefs_common.trans_hdr, P_BOOL,
431          NULL, NULL, NULL},
432
433         /* Display: Summary View */
434         {"use_address_book", "FALSE", &prefs_common.use_addr_book, P_BOOL,
435          NULL, NULL, NULL},
436         {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
437          NULL, NULL, NULL},
438         {"date_format", N_("%y/%m/%d(%a) %H:%M"), &prefs_common.date_format,
439          P_STRING, NULL, NULL, NULL},
440
441         {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
442          NULL, NULL, NULL},
443
444         {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
445          NULL, NULL, NULL},
446 #ifndef MAEMO
447         {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
448          NULL, NULL, NULL},
449 #else
450         {"toolbar_style", "1", &prefs_common.toolbar_style, P_ENUM,
451          NULL, NULL, NULL},
452 #endif
453         {"toolbar_detachable", "FALSE", &prefs_common.toolbar_detachable, P_BOOL,
454          NULL, NULL, NULL},
455         {"show_col_headers", "TRUE", &prefs_common.show_col_headers, P_BOOL,
456          NULL, NULL, NULL},
457 #ifndef MAEMO
458         {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
459          NULL, NULL, NULL},
460         {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
461          NULL, NULL, NULL},
462 #else
463         {"show_statusbar", "FALSE", &prefs_common.show_statusbar, P_BOOL,
464          NULL, NULL, NULL},
465         {"show_searchbar", "FALSE", &prefs_common.show_searchbar, P_BOOL,
466          NULL, NULL, NULL},
467 #endif
468
469         {"summary_col_show_mark", "TRUE",
470          &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
471         {"summary_col_show_unread", "TRUE",
472          &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
473         {"summary_col_show_subject", "TRUE",
474          &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
475         {"summary_col_show_from", "TRUE",
476          &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
477         {"summary_col_show_to", "FALSE",
478          &prefs_common.summary_col_visible[S_COL_TO], P_BOOL, NULL, NULL, NULL},
479         {"summary_col_show_date", "TRUE",
480          &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
481         {"summary_col_show_mime", "TRUE",
482          &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
483         {"summary_col_show_size", "TRUE",
484          &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
485         {"summary_col_show_number", "FALSE",
486          &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
487         {"summary_col_show_score", "FALSE",
488          &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
489         {"summary_col_show_locked", "FALSE",
490          &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
491         {"summary_col_show_tags", "FALSE",
492          &prefs_common.summary_col_visible[S_COL_TAGS], P_BOOL, NULL, NULL, NULL},
493
494         {"summary_col_pos_mark", "0",
495           &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
496         {"summary_col_pos_unread", "1",
497           &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
498         {"summary_col_pos_mime", "2",
499           &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
500         {"summary_col_pos_subject", "3",
501           &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
502         {"summary_col_pos_from", "4",
503           &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
504         {"summary_col_pos_date", "5",
505           &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
506         {"summary_col_pos_size", "6",
507           &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
508         {"summary_col_pos_number", "7",
509           &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
510         {"summary_col_pos_score", "8",
511          &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
512         {"summary_col_pos_locked", "9",
513          &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
514         {"summary_col_pos_to", "10",
515           &prefs_common.summary_col_pos[S_COL_TO], P_INT, NULL, NULL, NULL},
516         {"summary_col_pos_tags", "11",
517           &prefs_common.summary_col_pos[S_COL_TAGS], P_INT, NULL, NULL, NULL},
518
519         {"summary_col_size_mark", "10",
520          &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
521         {"summary_col_size_unread", "13",
522          &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
523         {"summary_col_size_mime", "10",
524          &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
525 #ifndef MAEMO
526         {"summary_col_size_subject", "200",
527          &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
528         {"summary_col_size_from", "120",
529          &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
530         {"summary_col_size_to", "120",
531          &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
532 #else
533         {"summary_col_size_subject", "300",
534          &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
535         {"summary_col_size_from", "150",
536          &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
537         {"summary_col_size_to", "150",
538          &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
539
540 #endif
541         {"summary_col_size_date", "118",
542          &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
543         {"summary_col_size_size", "45",
544          &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
545         {"summary_col_size_number", "40",
546          &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
547         {"summary_col_size_score", "40",
548          &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
549         {"summary_col_size_locked", "13",
550          &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
551         {"summary_col_size_tags", "150",
552          &prefs_common.summary_col_size[S_COL_TAGS], P_INT, NULL, NULL, NULL},
553
554         /* Widget size */
555         {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
556          NULL, NULL, NULL},
557         {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
558          NULL, NULL, NULL},
559         {"folderview_width", "270", &prefs_common.folderview_width, P_INT,
560          NULL, NULL, NULL},
561         {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
562          NULL, NULL, NULL},
563         {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
564          NULL, NULL, NULL},
565
566         {"folder_col_show_folder", "TRUE",
567          &prefs_common.folder_col_visible[F_COL_FOLDER], P_BOOL, NULL, NULL, NULL},
568         {"folder_col_show_new", "TRUE",
569          &prefs_common.folder_col_visible[F_COL_NEW], P_BOOL, NULL, NULL, NULL},
570         {"folder_col_show_unread", "TRUE",
571          &prefs_common.folder_col_visible[F_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
572         {"folder_col_show_total", "TRUE",
573          &prefs_common.folder_col_visible[F_COL_TOTAL], P_BOOL, NULL, NULL, NULL},
574
575         {"folder_col_pos_folder", "0",
576          &prefs_common.folder_col_pos[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
577         {"folder_col_pos_new", "1",
578          &prefs_common.folder_col_pos[F_COL_NEW], P_INT, NULL, NULL, NULL},
579         {"folder_col_pos_unread", "2",
580          &prefs_common.folder_col_pos[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
581         {"folder_col_pos_total", "3",
582          &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
583
584 #ifndef MAEMO
585         {"folder_col_size_folder", "120",
586          &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
587         {"folder_col_size_new", "32",
588          &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
589         {"folder_col_size_unread", "32",
590          &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
591         {"folder_col_size_total", "32",
592          &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
593 #else
594         {"folder_col_size_folder", "400",
595          &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
596         {"folder_col_size_new", "32",
597          &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
598         {"folder_col_size_unread", "32",
599          &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
600         {"folder_col_size_total", "32",
601          &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
602 #endif
603         {"summaryview_width", "500", &prefs_common.summaryview_width, P_INT,
604          NULL, NULL, NULL},
605         {"summaryview_height", "244", &prefs_common.summaryview_height, P_INT,
606          NULL, NULL, NULL},
607
608         {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
609          NULL, NULL, NULL},
610         {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
611          NULL, NULL, NULL},
612         {"messageview_width", "500", &prefs_common.msgview_width, P_INT,
613          NULL, NULL, NULL},
614         {"messageview_height", "213", &prefs_common.msgview_height, P_INT,
615          NULL, NULL, NULL},
616         {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
617          NULL, NULL, NULL},
618
619         {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
620          NULL, NULL, NULL},
621         {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
622          NULL, NULL, NULL},
623         {"mainview_width", "500", &prefs_common.mainview_width, P_INT,
624          NULL, NULL, NULL},
625         {"mainview_height", "400", &prefs_common.mainview_height, P_INT,
626          NULL, NULL, NULL},
627         {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
628          NULL, NULL, NULL},
629         {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
630          NULL, NULL, NULL},
631         {"mainwin_maximised", "FALSE", &prefs_common.mainwin_maximised, P_BOOL,
632          NULL, NULL, NULL},
633 #ifndef MAEMO
634         {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
635          NULL, NULL, NULL},
636         {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
637          NULL, NULL, NULL},
638         {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
639          NULL, NULL, NULL},
640         {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
641          NULL, NULL, NULL},
642         {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
643          NULL, NULL, NULL},
644         {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
645          NULL, NULL, NULL},
646         {"compose_width", "600", &prefs_common.compose_width, P_INT,
647          NULL, NULL, NULL},
648         {"compose_height", "560", &prefs_common.compose_height, P_INT,
649          NULL, NULL, NULL},
650 #else
651         {"mainwin_width", "700", &prefs_common.mainwin_width, P_INT,
652          NULL, NULL, NULL},
653         {"mainwin_height", "470", &prefs_common.mainwin_height, P_INT,
654          NULL, NULL, NULL},
655         {"messagewin_width", "700", &prefs_common.msgwin_width, P_INT,
656          NULL, NULL, NULL},
657         {"messagewin_height", "470", &prefs_common.msgwin_height, P_INT,
658          NULL, NULL, NULL},
659         {"sourcewin_width", "700", &prefs_common.sourcewin_width, P_INT,
660          NULL, NULL, NULL},
661         {"sourcewin_height", "470", &prefs_common.sourcewin_height, P_INT,
662          NULL, NULL, NULL},
663         {"compose_width", "700", &prefs_common.compose_width, P_INT,
664          NULL, NULL, NULL},
665         {"compose_height", "470", &prefs_common.compose_height, P_INT,
666          NULL, NULL, NULL},
667 #endif
668         {"compose_x", "0", &prefs_common.compose_x, P_INT,
669          NULL, NULL, NULL},
670         {"compose_y", "0", &prefs_common.compose_y, P_INT,
671          NULL, NULL, NULL},
672         /* Message */
673         {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
674          NULL, NULL, NULL},
675
676         {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
677          NULL, NULL, NULL},
678         {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
679          NULL, NULL, NULL},
680         {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
681          NULL, NULL, NULL},
682         {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
683          NULL, NULL, NULL},
684         {"quote_level1_bgcolor", "13421772", &prefs_common.quote_level1_bgcol, P_COLOR,
685          NULL, NULL, NULL},
686         {"quote_level2_bgcolor", "13948116", &prefs_common.quote_level2_bgcol, P_COLOR,
687          NULL, NULL, NULL},
688         {"quote_level3_bgcolor", "14540253", &prefs_common.quote_level3_bgcol, P_COLOR,
689          NULL, NULL, NULL},
690         {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
691          NULL, NULL, NULL},
692         {"emphasis_color", "207", &prefs_common.emphasis_col, P_COLOR,
693          NULL, NULL, NULL},
694         {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
695          NULL, NULL, NULL},
696         {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
697          NULL, NULL, NULL},
698         {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
699          P_BOOL, NULL, NULL, NULL},
700
701         {"display_header_pane", "FALSE", &prefs_common.display_header_pane,
702          P_BOOL, NULL, NULL, NULL},
703         {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
704          NULL, NULL, NULL},
705         {"display_xface", "TRUE", &prefs_common.display_xface,
706          P_BOOL, NULL, NULL, NULL},
707         {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
708          NULL, NULL, NULL},
709         {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
710          NULL, NULL, NULL},
711         {"line_space", "2", &prefs_common.line_space, P_INT,
712          NULL, NULL, NULL},
713         {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
714          NULL, NULL, NULL},
715
716         {"enable_smooth_scroll", "FALSE",
717          &prefs_common.enable_smooth_scroll, P_BOOL,
718          NULL, NULL, NULL},
719         {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
720          NULL, NULL, NULL},
721         {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
722          NULL, NULL, NULL},
723         {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
724          NULL, NULL, NULL},
725
726         {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
727          NULL, NULL, NULL},
728
729         {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
730          NULL, NULL, NULL},
731         {"attach_save_directory", NULL,
732          &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
733         {"attach_load_directory", NULL,
734          &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
735
736         /* MIME viewer */
737         {"mime_textviewer",   NULL,
738          &SPECIFIC_PREFS.mime_textviewer,   P_STRING, NULL, NULL, NULL},
739         {"mime_open_command", "gedit '%s'",
740          &SPECIFIC_PREFS.mime_open_cmd,     P_STRING, NULL, NULL, NULL},
741
742         /* Interface */
743 #ifndef MAEMO
744         {"layout_mode", "0", &prefs_common.layout_mode, P_INT,
745          NULL, NULL, NULL},
746 #else
747         {"layout_mode", "5", &prefs_common.layout_mode, P_INT,
748          NULL, NULL, NULL},
749 #endif
750         /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
751          NULL, NULL, NULL}, */
752         {"always_show_message_when_selected", "FALSE",
753          &prefs_common.always_show_msg,
754          P_BOOL, NULL, NULL, NULL},
755         {"select_on_entry", "3", &prefs_common.select_on_entry,
756          P_ENUM, NULL, NULL, NULL},
757         {"show_tooltips", "TRUE", &prefs_common.show_tooltips,
758          P_BOOL, NULL, NULL, NULL},
759
760         /* do it SUMMARY_OPEN_ACTIONS-1 times */
761         {"summary_select_prio1", "0", &prefs_common.summary_select_prio[0], P_ENUM,
762          NULL, NULL, NULL},
763         {"summary_select_prio2", "0", &prefs_common.summary_select_prio[1], P_ENUM,
764          NULL, NULL, NULL},
765         {"summary_select_prio3", "0", &prefs_common.summary_select_prio[2], P_ENUM,
766          NULL, NULL, NULL},
767         {"summary_select_prio4", "0", &prefs_common.summary_select_prio[3], P_ENUM,
768          NULL, NULL, NULL},
769         {"summary_select_prio5", "0", &prefs_common.summary_select_prio[4], P_ENUM,
770          NULL, NULL, NULL},
771         {"summary_select_prio6", "0", &prefs_common.summary_select_prio[5], P_ENUM,
772          NULL, NULL, NULL},
773         {"summary_select_prio7", "0", &prefs_common.summary_select_prio[6], P_ENUM,
774          NULL, NULL, NULL},
775
776         {"mark_as_read_on_new_window", "FALSE",
777          &prefs_common.mark_as_read_on_new_window,
778          P_BOOL, NULL, NULL, NULL},
779         {"mark_as_read_delay", "0",
780          &prefs_common.mark_as_read_delay, P_INT, 
781          NULL, NULL, NULL},
782         {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
783          NULL, NULL, NULL},
784         {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
785          NULL, NULL, NULL},
786
787         {"pixmap_theme_path", DEFAULT_PIXMAP_THEME, 
788          &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
789          NULL, NULL, NULL},
790
791         {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
792          NULL, NULL, NULL},
793
794         {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
795          NULL, NULL, NULL},
796         {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
797          NULL, NULL, NULL},
798
799         /* Addressbook */
800         {"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog,
801          P_BOOL, NULL, NULL, NULL},
802         {"addressbook_hpaned_pos", "-1", &prefs_common.addressbook_hpaned_pos,
803          P_INT, NULL, NULL, NULL},
804         {"addressbook_vpaned_pos", "-1", &prefs_common.addressbook_vpaned_pos,
805          P_INT, NULL, NULL, NULL},
806
807         /* Other */
808         {"uri_open_command", DEFAULT_BROWSER_CMD,
809          &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
810         {"print_command", "lpr %s",
811          &SPECIFIC_PREFS.print_cmd, P_STRING, NULL, NULL, NULL},
812         {"ext_editor_command", DEFAULT_EDITOR_CMD,
813          &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
814         {"cmds_use_system_default", "FALSE",
815          &prefs_common.cmds_use_system_default, P_BOOL, NULL, NULL, NULL},
816         {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
817          P_BOOL, NULL, NULL, NULL},
818         {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
819          NULL, NULL, NULL},
820         {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
821          NULL, NULL, NULL},
822         {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
823          NULL, NULL, NULL},
824         {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
825          P_BOOL, NULL, NULL, NULL},
826         {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
827          NULL, NULL, NULL},
828         {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
829          NULL, NULL, NULL},
830 #ifndef MAEMO
831         {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
832          NULL, NULL, NULL},
833 #else
834         {"summary_quicksearch_recurse", "0", &prefs_common.summary_quicksearch_recurse, P_INT,
835          NULL, NULL, NULL},
836 #endif
837
838 #if defined(__OpenBSD__)
839         {"io_timeout_secs", "75", &prefs_common.io_timeout_secs,
840          P_INT, NULL, NULL, NULL},
841 #else
842         {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
843          P_INT, NULL, NULL, NULL},
844 #endif
845         {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
846          NULL, NULL, NULL},
847         {"important_score", "1", &prefs_common.important_score, P_INT,
848          NULL, NULL, NULL},
849
850         {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
851          NULL, NULL, NULL},
852         {"log_length", "500", &prefs_common.loglength, P_INT,
853          NULL, NULL, NULL},
854 #ifndef MAEMO
855         {"enable_log_standard", "TRUE", &prefs_common.enable_log_standard, P_BOOL,
856          NULL, NULL, NULL},
857         {"enable_log_warning", "TRUE", &prefs_common.enable_log_warning, P_BOOL,
858          NULL, NULL, NULL},
859         {"enable_log_error", "TRUE", &prefs_common.enable_log_error, P_BOOL,
860          NULL, NULL, NULL},
861         {"enable_log_status", "TRUE", &prefs_common.enable_log_status, P_BOOL,
862          NULL, NULL, NULL},
863 #else
864         {"enable_log_standard", "FALSE", &prefs_common.enable_log_standard, P_BOOL,
865          NULL, NULL, NULL},
866         {"enable_log_warning", "FALSE", &prefs_common.enable_log_warning, P_BOOL,
867          NULL, NULL, NULL},
868         {"enable_log_error", "FALSE", &prefs_common.enable_log_error, P_BOOL,
869          NULL, NULL, NULL},
870         {"enable_log_status", "FALSE", &prefs_common.enable_log_status, P_BOOL,
871          NULL, NULL, NULL},
872 #endif
873         {"log_msg_color", "#00af00", &prefs_common.log_msg_color, P_COLOR,
874          NULL, NULL, NULL},
875         {"log_warn_color", "#af0000", &prefs_common.log_warn_color, P_COLOR,
876          NULL, NULL, NULL},
877         {"log_error_color", "#af0000", &prefs_common.log_error_color, P_COLOR,
878          NULL, NULL, NULL},
879         {"log_in_color", "#000000", &prefs_common.log_in_color, P_COLOR,
880          NULL, NULL, NULL},
881         {"log_out_color", "#0000ef", &prefs_common.log_out_color, P_COLOR,
882          NULL, NULL, NULL},
883         {"log_status_ok_color", "#00af00", &prefs_common.log_status_ok_color, P_COLOR,
884          NULL, NULL, NULL},
885         {"log_status_nok_color", "#0000af", &prefs_common.log_status_nok_color, P_COLOR,
886          NULL, NULL, NULL},
887         {"log_status_skip_color", "#aa00aa", &prefs_common.log_status_skip_color, P_COLOR,
888          NULL, NULL, NULL},
889
890     {"enable_filtering_debug", "FALSE", &prefs_common.enable_filtering_debug, P_BOOL,
891          NULL, NULL, NULL},
892     {"filtering_debug_level", "1", &prefs_common.filtering_debug_level, P_INT,
893          NULL, NULL, NULL},
894     {"enable_filtering_debug_inc", "TRUE", &prefs_common.enable_filtering_debug_inc, P_BOOL,
895          NULL, NULL, NULL},
896     {"enable_filtering_debug_manual", "TRUE", &prefs_common.enable_filtering_debug_manual, P_BOOL,
897          NULL, NULL, NULL},
898     {"enable_filtering_debug_folder_proc", "FALSE", &prefs_common.enable_filtering_debug_folder_proc, P_BOOL,
899          NULL, NULL, NULL},
900     {"enable_filtering_debug_pre_proc", "FALSE", &prefs_common.enable_filtering_debug_pre_proc, P_BOOL,
901          NULL, NULL, NULL},
902     {"enable_filtering_debug_post_proc", "FALSE", &prefs_common.enable_filtering_debug_post_proc, P_BOOL,
903          NULL, NULL, NULL},
904     {"filtering_debug_clip_log", "TRUE", &prefs_common.filtering_debug_cliplog, P_BOOL,
905          NULL, NULL, NULL},
906         {"filtering_debug_log_length", "500", &prefs_common.filtering_debug_loglength, P_INT,
907          NULL, NULL, NULL},
908
909         {"gtk_can_change_accels", "TRUE", &prefs_common.gtk_can_change_accels, P_BOOL,
910          NULL, NULL, NULL},
911
912         {"color_new", "179", &prefs_common.color_new, P_COLOR,
913          NULL, NULL, NULL},
914
915         /* Some windows' sizes */
916         {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
917          NULL, NULL, NULL},
918         {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
919          NULL, NULL, NULL},
920
921         {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
922          NULL, NULL, NULL},
923         {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
924          NULL, NULL, NULL},
925
926         {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
927          NULL, NULL, NULL},
928         {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
929          NULL, NULL, NULL},
930
931         {"templateswin_width", "480", &prefs_common.templateswin_width, P_INT,
932          NULL, NULL, NULL},
933         {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
934          NULL, NULL, NULL},
935
936         {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
937          NULL, NULL, NULL},
938         {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
939          NULL, NULL, NULL},
940
941         {"tagswin_width", "486", &prefs_common.tagswin_width, P_INT,
942          NULL, NULL, NULL},
943         {"tagswin_height", "-1", &prefs_common.tagswin_height, P_INT,
944          NULL, NULL, NULL},
945
946         {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
947          NULL, NULL, NULL},
948         {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
949          NULL, NULL, NULL},
950
951         {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
952          NULL, NULL, NULL},
953         {"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT,
954          NULL, NULL, NULL},
955
956         {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
957          NULL, NULL, NULL},
958         {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
959          NULL, NULL, NULL},
960
961         {"pluginswin_width", "-1", &prefs_common.pluginswin_width, P_INT,
962          NULL, NULL, NULL},
963         {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
964          NULL, NULL, NULL},
965
966         {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
967          NULL, NULL, NULL},
968         {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
969          NULL, NULL, NULL},
970
971         {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
972          NULL, NULL, NULL},
973         {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
974          NULL, NULL, NULL},
975
976         {"zero_replacement_char", "0", &prefs_common.zero_replacement, P_STRING,
977          NULL, NULL, NULL},
978
979         {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
980          NULL, NULL, NULL},
981         {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
982          NULL, NULL, NULL},
983
984         {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
985          NULL, NULL, NULL},
986         {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
987          NULL, NULL, NULL},
988
989         {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
990          NULL, NULL, NULL},
991         {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
992          NULL, NULL, NULL},
993
994         {"filtering_debugwin_width", "600", &prefs_common.filtering_debugwin_width, P_INT,
995          NULL, NULL, NULL},
996         {"filtering_debugwin_height", "-1", &prefs_common.filtering_debugwin_height, P_INT,
997          NULL, NULL, NULL},
998
999         {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
1000          NULL, NULL, NULL},
1001         {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
1002          NULL, NULL, NULL},
1003
1004         {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
1005          NULL, NULL, NULL},
1006         {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
1007          NULL, NULL, NULL},
1008
1009         {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
1010          NULL, NULL, NULL},
1011         {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
1012          NULL, NULL, NULL},
1013
1014         /* Hidden */
1015         {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
1016          NULL, NULL, NULL},
1017         {"utf8_instead_of_locale_for_broken_mail", "0", 
1018          &prefs_common.broken_are_utf8, P_INT,
1019          NULL, NULL, NULL},
1020         {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
1021          NULL, NULL, NULL},
1022         {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
1023          NULL, NULL, NULL},
1024         {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
1025          NULL, NULL, NULL},
1026         {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
1027          NULL, NULL, NULL},
1028         {"enable_dotted_lines", "FALSE", &prefs_common.enable_dotted_lines, P_BOOL,
1029          NULL, NULL, NULL},
1030         {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
1031          NULL, NULL, NULL},
1032         {"folderview_vscrollbar_policy", "0",
1033          &prefs_common.folderview_vscrollbar_policy, P_ENUM,
1034          NULL, NULL, NULL},
1035         {"textview_cursor_visible", "FALSE",
1036          &prefs_common.textview_cursor_visible, P_BOOL,
1037          NULL, NULL, NULL},
1038         {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
1039          NULL, NULL, NULL},
1040 #ifndef MAEMO
1041         {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1042          NULL, NULL, NULL},
1043         {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
1044          NULL, NULL, NULL},
1045 #else
1046         {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1047          NULL, NULL, NULL},
1048         {"cache_min_keep_time", "0", &prefs_common.cache_min_keep_time, P_INT,
1049          NULL, NULL, NULL},
1050 #endif
1051         {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
1052         P_INT, NULL, NULL, NULL },
1053         {"last_opened_folder", "", &prefs_common.last_opened_folder,
1054         P_STRING, NULL, NULL, NULL },
1055         {"goto_last_folder_on_startup", "FALSE", &prefs_common.goto_last_folder_on_startup,
1056         P_BOOL, NULL, NULL, NULL },
1057         {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
1058          NULL, NULL, NULL},
1059         {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
1060          NULL, NULL, NULL},
1061         {"summary_quicksearch_autorun", "0", &prefs_common.summary_quicksearch_autorun, P_INT,
1062          NULL, NULL, NULL},
1063         {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
1064          NULL, NULL, NULL},
1065         {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
1066          NULL, NULL, NULL},
1067         {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
1068          NULL, NULL, NULL},
1069         {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
1070          NULL, NULL, NULL},
1071         {"save_parts_readwrite", "FALSE", &prefs_common.save_parts_readwrite, P_BOOL,
1072          NULL, NULL, NULL},
1073         {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
1074          NULL, NULL, NULL},
1075         {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
1076          NULL, NULL, NULL},
1077 #ifndef MAEMO
1078         {"real_time_sync", "FALSE", &prefs_common.real_time_sync, P_BOOL,
1079          NULL, NULL, NULL},
1080 #else
1081         {"real_time_sync", "TRUE", &prefs_common.real_time_sync, P_BOOL,
1082          NULL, NULL, NULL},
1083 #endif
1084
1085         {"print_paper_type", NULL, &prefs_common.print_paper_type, P_STRING,
1086          NULL, NULL, NULL},
1087         {"print_paper_orientation", "0", &prefs_common.print_paper_orientation, P_INT,
1088          NULL, NULL, NULL},
1089         {"print_use_color", "0", &prefs_common.print_use_color, P_INT,
1090          NULL, NULL, NULL},
1091         {"print_use_collate", "0", &prefs_common.print_use_collate, P_INT,
1092          NULL, NULL, NULL},
1093         {"print_use_reverse", "0", &prefs_common.print_use_reverse, P_INT,
1094          NULL, NULL, NULL},
1095         {"print_use_duplex", "0", &prefs_common.print_use_duplex, P_INT,
1096          NULL, NULL, NULL},
1097         {"print_imgs", "1", &prefs_common.print_imgs, P_INT,
1098          NULL, NULL, NULL},
1099         {"print_previewwin_width", "600", &prefs_common.print_previewwin_width, P_INT,
1100          NULL, NULL, NULL},
1101         {"print_previewwin_height", "-1", &prefs_common.print_previewwin_height, P_INT,
1102          NULL, NULL, NULL},
1103         {"use_networkmanager", "TRUE", &prefs_common.use_networkmanager, P_BOOL,
1104          NULL, NULL, NULL},
1105         {"use_shred", "FALSE", &prefs_common.use_shred, P_BOOL,
1106          NULL, NULL, NULL},
1107
1108         {"two_line_vertical", "TRUE", &prefs_common.two_line_vert,
1109         P_BOOL, NULL, NULL, NULL },
1110
1111         {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
1112 };
1113
1114 /*
1115  * Read history list from the specified history file in the specified directory (subdir of rc_dir)
1116  * Fallback to default_list if history file is not found
1117  */
1118 GList *prefs_common_read_history_from_dir_with_defaults(const gchar *dirname, const gchar *history,
1119                                                                                                                           GList *default_list)
1120 {
1121         FILE *fp;
1122         gchar *path;
1123         gchar buf[PREFSBUFSIZE];
1124         GList *tmp = NULL;
1125
1126         if (dirname) {
1127                 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, dirname,
1128                                    G_DIR_SEPARATOR_S, history,
1129                                    NULL);
1130         } else {
1131         path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1132                            NULL);
1133         }
1134         if ((fp = g_fopen(path, "rb")) == NULL) {
1135                 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
1136                 g_free(path);
1137                 /* returns default list if set, otherwise NULL */
1138                 return default_list;
1139         }
1140         g_free(path);
1141         while (fgets(buf, sizeof(buf), fp) != NULL) {
1142                 g_strstrip(buf);
1143                 if (buf[0] == '\0') continue;
1144                 tmp = add_history(tmp, buf);
1145         }
1146         fclose(fp);
1147
1148         tmp = g_list_reverse(tmp);
1149
1150         return tmp;
1151 }
1152
1153 /*
1154  * Read history list from the specified history file in the specified directory (subdir of rc_dir)
1155  */
1156 static GList *prefs_common_read_history_from_dir(const gchar *dirname, const gchar *history) 
1157 {
1158         return prefs_common_read_history_from_dir_with_defaults(dirname, history, NULL);
1159 }
1160
1161 /*
1162  * Read history list from the specified history file
1163  */
1164 static GList *prefs_common_read_history(const gchar *history) 
1165 {
1166         return prefs_common_read_history_from_dir(NULL, history);
1167 }
1168
1169 void prefs_common_read_config(void)
1170 {
1171         gchar *rcpath;
1172         gchar *tmp;
1173
1174         rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
1175         prefs_read_config(param, "Common", rcpath, NULL);
1176 #ifdef G_OS_WIN32
1177         prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
1178 #endif
1179
1180         g_free(rcpath);
1181
1182         tmp = g_strdup(gettext(prefs_common.date_format));
1183         g_free(prefs_common.date_format);
1184         prefs_common.date_format = tmp;
1185
1186         prefs_common.mime_open_cmd_history =
1187                 prefs_common_read_history(COMMAND_HISTORY);
1188         prefs_common.summary_quicksearch_history =
1189                 prefs_common_read_history(QUICKSEARCH_HISTORY);
1190         prefs_common.summary_search_from_history =
1191                 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
1192         prefs_common.summary_search_to_history =
1193                 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
1194         prefs_common.summary_search_subject_history =
1195                 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
1196         prefs_common.summary_search_body_history =
1197                 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
1198         prefs_common.summary_search_adv_condition_history =
1199                 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
1200         prefs_common.message_search_history =
1201                 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
1202
1203         prefs_common.addressbook_custom_attributes = addressbook_update_custom_attr_from_prefs();
1204
1205         colorlabel_update_colortable_from_prefs();
1206 }
1207
1208 #define TRY(func) \
1209 if (!(func)) \
1210 { \
1211         g_warning("failed to write\n"); \
1212         goto out;                       \
1213 } \
1214
1215 /*
1216  * Save history list to the specified history file in the specified directory (subdir of rc_dir)
1217  */
1218 static void prefs_common_save_history_to_dir(const gchar *dirname, const gchar *history, GList *list)
1219 {
1220         GList *cur;
1221         FILE *fp;
1222         gchar *path, *tmp_path;
1223
1224         if (dirname) {
1225                 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, dirname,
1226                                    G_DIR_SEPARATOR_S, history,
1227                                    NULL);
1228         } else {
1229         path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1230                            NULL);
1231         }
1232         tmp_path = g_strconcat(path, ".tmp", NULL);
1233
1234         if ((fp = g_fopen(tmp_path, "wb")) == NULL) {
1235                 FILE_OP_ERROR(tmp_path, "fopen");
1236                 goto out;
1237         }
1238
1239         for (cur = list; cur != NULL; cur = cur->next) {
1240                 TRY(fputs((gchar *)cur->data, fp) != EOF &&
1241                     fputc('\n', fp) != EOF);
1242         }
1243
1244         if (fclose(fp) == EOF) {
1245                 FILE_OP_ERROR(tmp_path, "fclose");
1246                 fp = NULL;
1247                 goto out;
1248         }
1249         fp = NULL;
1250 #ifdef G_OS_WIN32
1251         claws_unlink(path);
1252 #endif
1253         if (g_rename(tmp_path, path) < 0) {
1254                 FILE_OP_ERROR(path, "rename");
1255                 goto out;
1256         }
1257
1258 out:
1259         if (fp)
1260                 fclose(fp);
1261         g_free(tmp_path);
1262         g_free(path);
1263 }
1264
1265 /*
1266  * Save history list to the specified history file
1267  */
1268 static void prefs_common_save_history(const gchar *history, GList *list)
1269 {
1270         prefs_common_save_history_to_dir(NULL, history, list);
1271 }
1272
1273 #undef TRY
1274
1275 void prefs_common_write_config(void)
1276 {
1277         prefs_write_config(param, "Common", COMMON_RC);
1278 #ifdef G_OS_WIN32
1279         prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
1280 #endif
1281
1282         prefs_common_save_history(COMMAND_HISTORY, 
1283                 prefs_common.mime_open_cmd_history);
1284         prefs_common_save_history(QUICKSEARCH_HISTORY, 
1285                 prefs_common.summary_quicksearch_history);
1286         prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY, 
1287                 prefs_common.summary_search_from_history);
1288         prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY, 
1289                 prefs_common.summary_search_to_history);
1290         prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY, 
1291                 prefs_common.summary_search_subject_history);
1292         prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY, 
1293                 prefs_common.summary_search_body_history);
1294         prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY, 
1295                 prefs_common.summary_search_adv_condition_history);
1296         prefs_common_save_history(MESSAGE_SEARCH_HISTORY, 
1297                 prefs_common.message_search_history);
1298
1299         prefs_common_save_history_to_dir(ADDRBOOK_DIR,
1300                 ADDRESSBOOK_CUSTOM_ATTRIBUTES, 
1301                 prefs_common.addressbook_custom_attributes);
1302 }
1303
1304 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
1305    both 'in' and 'out' must be non-NULL.
1306    'out' must be a pointer to a buffer whose size is at least equal
1307    to strlen(txt)+1, this buffer will get cleared. out's contents
1308    will always get set to a valid string, even if it's "".*/
1309 void pref_get_unescaped_pref(gchar *out, const gchar *in)
1310 {
1311         const gchar *i;
1312         gchar *o;
1313
1314         *out = '\0';
1315
1316         g_return_if_fail( in != NULL );
1317         g_return_if_fail( out != NULL );
1318
1319         i = in;
1320         o = out;
1321         memset(out, 0, strlen(in)+1);
1322         while (*i != '\0') {
1323                 if (*i == '\\' && *(i+1) == 'n') {
1324                         *o++ = '\n';
1325                         i++;
1326                 } else if (*i == '\\' && *(i+1) == 't') {
1327                         *o++ = '\t';
1328                         i++;
1329                 } else if (*i == '\\' && *(i+1) == '\\') {
1330                         *o++ = '\\';
1331                         i++;
1332                 } else {
1333                         *o++ = *i;
1334                 }
1335                 i++;
1336         }
1337         *o='\0';
1338 }
1339
1340 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1341    both 'in' and 'out' must be non-NULL.
1342    'out' must be a pointer to a buffer whose size is at least equal
1343    to 2*strlen(txt)+1. out's contents will always get set to a valid
1344    string, even if it's "". */
1345 void pref_get_escaped_pref(gchar *out, const gchar *in)
1346 {
1347         const gchar *i;
1348         gchar *o;
1349
1350         *out = '\0';
1351
1352         g_return_if_fail( in != NULL );
1353         g_return_if_fail( out != NULL );
1354
1355         i = in;
1356         o = out;
1357         while (*i != '\0') {
1358                 if (*i == '\n') {
1359                         *o++ = '\\';
1360                         *o++ = 'n';
1361                 } else if (*i == '\t') {
1362                         *o++ = '\\';
1363                         *o++ = 't';
1364                 } else if (*i == '\\') {
1365                         *o++ = '\\';
1366                         *o++ = '\\';
1367                 } else {
1368                         *o++ = *i;
1369                 }
1370                 i++;
1371         }
1372         *o = '\0';
1373 }
1374                 
1375 /* set the contents of a textview widget from the internal \-escaped
1376   representation of a pref string. both txt and textview must be non-NULL. */
1377 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1378 {
1379         GtkTextBuffer *buffer;
1380         gchar *out = NULL;
1381
1382         g_return_if_fail( textview != NULL );
1383
1384         buffer = gtk_text_view_get_buffer(textview);
1385
1386         if (!txt) {
1387                 gtk_text_buffer_set_text(buffer, "", -1);
1388         } else {
1389                 out = malloc(strlen(txt)+1);
1390
1391                 pref_get_unescaped_pref(out, txt);
1392
1393                 gtk_text_buffer_set_text(buffer, out?out:"", -1);
1394                 g_free(out);
1395         }
1396 }
1397
1398 /* set the contents of a gtkentry widget from the internal \-escaped
1399   representation of a pref string. both txt and entry must be non-NULL. */
1400 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1401 {
1402         gchar *out = NULL;
1403
1404         g_return_if_fail( entry != NULL );
1405         if (!txt) {
1406                 gtk_entry_set_text(entry, "");
1407         } else {
1408                 out = malloc(strlen(txt)+1);
1409
1410                 pref_get_unescaped_pref(out, txt);
1411
1412                 gtk_entry_set_text(entry, out?out:"");
1413                 g_free(out);
1414         }
1415 }
1416
1417 /* get the \-escaped internal representation of a pref from the contents of
1418    a textview widget. textview must be non-NULL. */
1419 gchar *pref_get_pref_from_textview(GtkTextView *textview) 
1420 {
1421         GtkTextBuffer *buffer;
1422         GtkTextIter start, end;
1423         gchar *out, *tmp;
1424         
1425         g_return_val_if_fail( textview != NULL, "" );
1426
1427         buffer = gtk_text_view_get_buffer(textview);
1428         gtk_text_buffer_get_start_iter(buffer, &start);
1429         gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1430         tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1431         out = malloc(2*strlen(tmp)+1);
1432         
1433         pref_get_escaped_pref(out, tmp);
1434         g_free(tmp);
1435
1436         return out?out:"";
1437 }
1438
1439 /* get the \-escaped internal representation of a pref from the contents of
1440    a gtkentry widget. entry must be non-NULL. */
1441 gchar *pref_get_pref_from_entry(GtkEntry *entry) 
1442 {
1443         gchar *out, *tmp;
1444
1445         g_return_val_if_fail( entry != NULL, "" );
1446
1447         tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1448         out = malloc(2*strlen(tmp)+1);
1449
1450         pref_get_escaped_pref(out, tmp);
1451         g_free(tmp);
1452
1453         return out?out:"";
1454 }
1455
1456 /* ugly hack to be able to get this pref from ssl_certificate.c */
1457 gboolean prefs_common_unsafe_ssl_certs(void)
1458 {
1459         return prefs_common.unsafe_ssl_certs;
1460 }
1461
1462 gboolean prefs_common_enable_log_standard(void)
1463 {
1464         return prefs_common.enable_log_standard;
1465 }
1466
1467 gboolean prefs_common_enable_log_warning(void)
1468 {
1469         return prefs_common.enable_log_warning;
1470 }
1471 gboolean prefs_common_enable_log_error(void)
1472 {
1473         return prefs_common.enable_log_error;
1474 }
1475 gboolean prefs_common_enable_log_status(void)
1476 {
1477         return prefs_common.enable_log_status;
1478 }
1479
1480 #ifdef MAEMO
1481 const gchar *prefs_common_get_data_root(void)
1482 {
1483         if (prefs_common.data_root && *prefs_common.data_root)
1484                 return prefs_common.data_root;
1485         else
1486                 return NULL;
1487 }
1488 #endif
1489 /**
1490    return the translated name of a header, if the translate_header option is
1491    set, otherwise return the untranslated header name (header_name itself).
1492    this function is provided for convenience, it's an interface to
1493    prefs_common.trans_hdr.
1494    works with header names either with or without trailing colon, provided
1495    that gettext found such header name in the sources (they should all be
1496    found in src/gtk/headers.h anyway).
1497 */
1498 const gchar *prefs_common_translated_header_name(const gchar *header_name)
1499 {
1500         if (header_name == NULL || *header_name == '\0')
1501                 return header_name;
1502
1503         return prefs_common.trans_hdr ? gettext(header_name) : header_name;
1504 }
1505
1506 const gchar *prefs_common_get_uri_cmd(void)
1507 {
1508         gchar *tmp = NULL;
1509         
1510         if (!prefs_common.cmds_use_system_default)
1511                 return prefs_common.uri_cmd;
1512         
1513         tmp = g_find_program_in_path("xdg-open");
1514         if (!tmp) 
1515                 return prefs_common.uri_cmd;
1516         
1517         g_free(tmp);
1518         return "xdg-open %s";
1519 }
1520
1521 const gchar *prefs_common_get_ext_editor_cmd(void)
1522 {
1523         return prefs_common.ext_editor_cmd;
1524 #if 0 /* we should do that, but it detaches the editor and breaks
1525          compose.c's external composition. */
1526         gchar *tmp = NULL;
1527         
1528         if (!prefs_common.cmds_use_system_default)
1529                 return prefs_common.ext_editor_cmd;
1530         
1531         tmp = g_find_program_in_path("xdg-open");
1532         if (!tmp) 
1533                 return prefs_common.ext_editor_cmd;
1534         
1535         g_free(tmp);
1536         return "xdg-open %s";
1537 #endif 
1538 }
1539
1540 gboolean prefs_common_get_use_shred(void)
1541 {
1542         return prefs_common.use_shred;
1543 }