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