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