add hidden prefs to choose old or new style addr and folder matching
[claws.git] / src / prefs_common.c
blobe2c676b7a455d4c7f1f408e247c114e83fd58702
1 /*
2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2013 Hiroyuki Yamamoto and the Claws Mail team
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.
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.
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/>.
20 #ifdef HAVE_CONFIG_H
21 # include "config.h"
22 #include "claws-features.h"
23 #endif
25 #include "defs.h"
27 #include <glib.h>
28 #include <glib/gi18n.h>
29 #include <gtk/gtk.h>
30 #include <gdk/gdkkeysyms.h>
31 #include <stdio.h>
32 #include <stdlib.h>
33 #include <string.h>
34 #include <unistd.h>
35 #include <sys/types.h>
36 #include <sys/stat.h>
37 #include <errno.h>
39 #include "main.h"
40 #include "prefs_gtk.h"
41 #include "prefs_common.h"
42 #include "prefs_display_header.h"
43 #include "prefs_summary_column.h"
44 #include "prefs_folder_column.h"
45 #include "mainwindow.h"
46 #include "summaryview.h"
47 #include "folderview.h"
48 #include "messageview.h"
49 #include "manage_window.h"
50 #include "inc.h"
51 #include "menu.h"
52 #include "codeconv.h"
53 #include "utils.h"
54 #include "gtkutils.h"
55 #include "alertpanel.h"
56 #include "folder.h"
57 #include "socket.h"
58 #include "filesel.h"
59 #include "folderview.h"
60 #include "stock_pixmap.h"
61 #include "prefswindow.h"
62 #include "colorlabel.h"
63 #ifndef USE_NEW_ADDRBOOK
64 #include "addrcustomattr.h"
65 #endif
67 enum {
68 DATEFMT_FMT,
69 DATEFMT_TXT,
70 N_DATEFMT_COLUMNS
73 PrefsCommon prefs_common;
75 GtkWidget *notebook;
77 #ifdef G_OS_WIN32
79 * In the Windows version prefs_common contains
80 * - the non-OS-specific settings of the "Common" section and
81 * - the OS-specific settings of the "CommonWin32" section
82 * The OS-specific settings of the "Common" section are not used
83 * but saved in prefs_unix.
86 # define SPECIFIC_PREFS prefs_unix
88 static PrefsCommon prefs_unix;
90 static PrefParam param_os_specific[] = {
91 /* Receive */
92 {"ext_inc_path", "",
93 &prefs_common.extinc_cmd, P_STRING, NULL, NULL, NULL},
94 {"newmail_notify_cmd", "",
95 &prefs_common.newmail_notify_cmd, P_STRING, NULL, NULL, NULL},
97 /* new fonts */
98 {"widget_font_gtk2", NULL,
99 &prefs_common.widgetfont, P_STRING, NULL, NULL, NULL},
100 {"message_font_gtk2", "Monospace 9",
101 &prefs_common.textfont, P_STRING, NULL, NULL, NULL},
102 {"print_font_gtk2", "Monospace 9",
103 &prefs_common.printfont, P_STRING, NULL, NULL, NULL},
104 {"small_font_gtk2", "Sans 9",
105 &prefs_common.smallfont, P_STRING, NULL, NULL, NULL},
106 {"normal_font_gtk2", "Sans 9",
107 &prefs_common.normalfont, P_STRING, NULL, NULL, NULL},
108 {"bold_font_gtk2", "Sans 9 Bold",
109 &prefs_common.boldfont, P_STRING, NULL, NULL, NULL},
110 /* Message */
111 {"attach_save_directory", NULL,
112 &prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL},
113 {"attach_load_directory", NULL,
114 &prefs_common.attach_load_dir, P_STRING, NULL, NULL, NULL},
116 /* MIME viewer */
117 {"mime_textviewer", NULL,
118 &prefs_common.mime_textviewer, P_STRING, NULL, NULL, NULL},
119 {"mime_open_command", "notepad '%s'",
120 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
122 /* Interface */
123 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
124 &prefs_common.pixmap_theme_path, P_STRING, NULL, NULL, NULL},
126 /* Other */
127 {"ext_editor_command", "notepad %s",
128 &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
130 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
132 #else
133 # define SPECIFIC_PREFS prefs_common
134 #endif
137 parameter name, default value, pointer to the prefs variable, data type,
138 pointer to the widget pointer,
139 pointer to the function for data setting,
140 pointer to the function for widget setting
143 static PrefParam param[] = {
144 /* Receive */
145 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
146 NULL, NULL, NULL},
147 {"ext_inc_path", DEFAULT_INC_PATH, &SPECIFIC_PREFS.extinc_cmd, P_STRING,
148 NULL, NULL, NULL},
150 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
151 NULL, NULL, NULL},
152 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
153 NULL, NULL, NULL},
154 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
155 NULL, NULL, NULL},
156 {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
157 P_BOOL, NULL, NULL, NULL},
158 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
159 P_BOOL, NULL, NULL, NULL},
160 {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
161 P_BOOL, NULL, NULL, NULL},
162 {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
163 P_BOOL, NULL, NULL, NULL},
164 {"newmail_notify_cmd", "", &SPECIFIC_PREFS.newmail_notify_cmd, P_STRING,
165 NULL, NULL, NULL},
166 {"receive_dialog_mode", "2", &prefs_common.recv_dialog_mode, P_ENUM,
167 NULL, NULL, NULL},
168 {"receivewin_width", "460", &prefs_common.receivewin_width, P_INT,
169 NULL, NULL, NULL},
170 {"receivewin_height", "-1", &prefs_common.receivewin_height, P_INT,
171 NULL, NULL, NULL},
172 {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
173 P_BOOL, NULL, NULL, NULL},
174 {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
175 P_BOOL, NULL, NULL, NULL},
177 /* Send */
178 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
179 NULL, NULL, NULL},
180 {"confirm_send_queued_messages", "FALSE", &prefs_common.confirm_send_queued_messages,
181 P_BOOL, NULL, NULL, NULL},
182 #ifndef GENERIC_UMPC
183 {"send_dialog_mode", "0", &prefs_common.send_dialog_invisible, P_BOOL,
184 NULL, NULL, NULL},
185 #else
186 {"send_dialog_mode", "1", &prefs_common.send_dialog_invisible, P_BOOL,
187 NULL, NULL, NULL},
188 #endif
189 {"sendwin_width", "460", &prefs_common.sendwin_width, P_INT,
190 NULL, NULL, NULL},
191 {"sendwin_height", "-1", &prefs_common.sendwin_height, P_INT,
192 NULL, NULL, NULL},
194 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
195 NULL, NULL, NULL},
196 {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
197 NULL, NULL, NULL},
198 {"outgoing_fallback_to_ascii", "TRUE", &prefs_common.outgoing_fallback_to_ascii, P_BOOL,
199 NULL, NULL, NULL},
200 {"warn_empty_subj", "TRUE", &prefs_common.warn_empty_subj,
201 P_BOOL, NULL, NULL, NULL},
203 {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
204 P_BOOL, NULL, NULL, NULL},
206 /* Compose */
207 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
208 NULL, NULL, NULL},
209 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
210 P_BOOL, NULL, NULL, NULL},
211 {"redirect_keep_from", "FALSE",
212 &prefs_common.redirect_keep_from, P_BOOL,
213 NULL, NULL, NULL},
214 {"undo_level", "50", &prefs_common.undolevels, P_INT,
215 NULL, NULL, NULL},
216 {"compose_with_format", "FALSE", &prefs_common.compose_with_format, P_BOOL,
217 NULL, NULL, NULL},
218 {"compose_subject_format", "",
219 &prefs_common.compose_subject_format, P_STRING, NULL, NULL, NULL},
220 {"compose_body_format", N_("Hello,\\n"),
221 &prefs_common.compose_body_format, P_STRING, NULL, NULL, NULL},
222 {"show_compose_margin", "FALSE", &prefs_common.show_compose_margin, P_BOOL,
223 NULL, NULL, NULL},
226 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
227 NULL, NULL, NULL},
228 {"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
229 NULL, NULL, NULL},
230 {"linewrap_pastes", "TRUE", &prefs_common.linewrap_pastes, P_BOOL,
231 NULL, NULL, NULL},
232 {"primary_paste_unselects", "FALSE", &prefs_common.primary_paste_unselects, P_BOOL,
233 NULL, NULL, NULL},
234 {"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
235 NULL, NULL, NULL},
236 {"auto_indent", "TRUE", &prefs_common.auto_indent, P_BOOL,
237 NULL, NULL, NULL},
238 {"autosave", "TRUE", &prefs_common.autosave,
239 P_BOOL, NULL, NULL, NULL},
240 {"autosave_length", "50", &prefs_common.autosave_length, P_INT,
241 NULL, NULL, NULL},
242 {"autosave_encrypted", "TRUE", &prefs_common.autosave_encrypted,
243 P_BOOL, NULL, NULL, NULL},
244 {"warn_large_insert", "TRUE", &prefs_common.warn_large_insert,
245 P_BOOL, NULL, NULL, NULL},
246 {"warn_large_insert_size", "500", &prefs_common.warn_large_insert_size,
247 P_INT, NULL, NULL, NULL},
249 {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
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 {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
256 NULL, NULL, NULL},
257 {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
258 NULL, NULL, NULL},
259 {"recheck_when_changing_dict", "TRUE", &prefs_common.recheck_when_changing_dict,
260 P_BOOL, NULL, NULL, NULL},
261 {"misspelled_color", "#ff0000", &prefs_common.misspelled_col, P_COLOR,
262 NULL, NULL, NULL},
263 {"use_both_dicts", "FALSE", &prefs_common.use_both_dicts, P_BOOL,
264 NULL, NULL, NULL},
266 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
267 NULL, NULL, NULL},
268 {"compose_dnd_insert_or_attach", "0", &prefs_common.compose_dnd_mode, P_ENUM,
269 NULL, NULL, NULL},
271 /* Account autoselection */
272 {"reply_account_autoselect", "TRUE",
273 &prefs_common.reply_account_autosel, P_BOOL,
274 NULL, NULL, NULL},
275 {"forward_account_autoselect", "TRUE",
276 &prefs_common.forward_account_autosel, P_BOOL,
277 NULL, NULL, NULL},
278 {"reedit_account_autoselect", "TRUE",
279 &prefs_common.reedit_account_autosel, P_BOOL,
280 NULL, NULL, NULL},
282 {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
283 NULL, NULL, NULL},
285 #ifndef GENERIC_UMPC
286 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
287 NULL, NULL, NULL},
288 #else
289 {"show_ruler", "FALSE", &prefs_common.show_ruler, P_BOOL,
290 NULL, NULL, NULL},
291 #endif
293 /* Quote */
294 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
295 NULL, NULL, NULL},
296 {"reply_quote_format", N_("On %d\\n%f wrote:\\n\\n%q\\n%X"),
297 &prefs_common.quotefmt, P_STRING, NULL, NULL, NULL},
299 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
300 NULL, NULL, NULL},
301 {"forward_quote_format",
302 N_("\\n\\nBegin forwarded message:\\n\\n"
303 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
304 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M"),
305 &prefs_common.fw_quotefmt, P_STRING,
306 NULL, NULL, NULL},
307 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
308 NULL, NULL, NULL},
310 /* Display */
311 /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
312 {"widget_font", NULL,
313 &prefs_common.widgetfont_gtk1, P_STRING, NULL, NULL, NULL},
314 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
315 &prefs_common.textfont_gtk1, P_STRING, NULL, NULL, NULL},
316 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
317 &prefs_common.smallfont_gtk1, P_STRING, NULL, NULL, NULL},
318 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
319 &prefs_common.boldfont_gtk1, P_STRING, NULL, NULL, NULL},
320 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
321 &prefs_common.normalfont_gtk1, P_STRING, NULL, NULL, NULL},
323 /* new fonts */
324 #ifndef GENERIC_UMPC
325 {"widget_font_gtk2", NULL,
326 &SPECIFIC_PREFS.widgetfont, P_STRING, NULL, NULL, NULL},
327 {"message_font_gtk2", "Monospace 9",
328 &SPECIFIC_PREFS.textfont, P_STRING, NULL, NULL, NULL},
329 {"print_font_gtk2", "Monospace 9",
330 &SPECIFIC_PREFS.printfont, P_STRING, NULL, NULL, NULL},
331 {"small_font_gtk2", "Sans 9",
332 &SPECIFIC_PREFS.smallfont, P_STRING, NULL, NULL, NULL},
333 {"normal_font_gtk2", "Sans 9",
334 &SPECIFIC_PREFS.normalfont, P_STRING, NULL, NULL, NULL},
335 {"bold_font_gtk2", "Sans Bold 9",
336 &SPECIFIC_PREFS.boldfont, P_STRING, NULL, NULL, NULL},
337 #else
338 {"widget_font_gtk2", NULL,
339 &SPECIFIC_PREFS.widgetfont, P_STRING, NULL, NULL, NULL},
340 {"message_font_gtk2", "Monospace 8",
341 &SPECIFIC_PREFS.textfont, P_STRING, NULL, NULL, NULL},
342 {"print_font_gtk2", "Monospace 8",
343 &SPECIFIC_PREFS.printfont, P_STRING, NULL, NULL, NULL},
344 {"small_font_gtk2", "Sans 8",
345 &SPECIFIC_PREFS.smallfont, P_STRING, NULL, NULL, NULL},
346 {"normal_font_gtk2", "Sans 8",
347 &SPECIFIC_PREFS.normalfont, P_STRING, NULL, NULL, NULL},
348 {"bold_font_gtk2", "Sans Bold 8",
349 &SPECIFIC_PREFS.boldfont, P_STRING, NULL, NULL, NULL},
350 #endif
352 {"use_different_print_font", "FALSE", &prefs_common.use_different_print_font, P_BOOL,
353 NULL, NULL, NULL},
354 {"derive_from_normal_font", "TRUE", &prefs_common.derive_from_normal_font, P_BOOL,
355 NULL, NULL, NULL},
357 /* custom colors */
358 {"custom_color1", "#ff9900", &prefs_common.custom_colorlabel[0].color, P_COLOR,
359 NULL, NULL, NULL},
360 {"custom_colorlabel1", N_("Orange"), &prefs_common.custom_colorlabel[0].label, P_STRING,
361 NULL, NULL, NULL},
362 {"custom_color2", "#ff0000", &prefs_common.custom_colorlabel[1].color, P_COLOR,
363 NULL, NULL, NULL},
364 {"custom_colorlabel2", N_("Red"), &prefs_common.custom_colorlabel[1].label, P_STRING,
365 NULL, NULL, NULL},
366 {"custom_color3", "#ff66ff", &prefs_common.custom_colorlabel[2].color, P_COLOR,
367 NULL, NULL, NULL},
368 {"custom_colorlabel3", N_("Pink"), &prefs_common.custom_colorlabel[2].label, P_STRING,
369 NULL, NULL, NULL},
370 {"custom_color4", "#00ccff", &prefs_common.custom_colorlabel[3].color, P_COLOR,
371 NULL, NULL, NULL},
372 {"custom_colorlabel4", N_("Sky blue"), &prefs_common.custom_colorlabel[3].label, P_STRING,
373 NULL, NULL, NULL},
374 {"custom_color5", "#0000ff", &prefs_common.custom_colorlabel[4].color, P_COLOR,
375 NULL, NULL, NULL},
376 {"custom_colorlabel5", N_("Blue"), &prefs_common.custom_colorlabel[4].label, P_STRING,
377 NULL, NULL, NULL},
378 {"custom_color6", "#009900", &prefs_common.custom_colorlabel[5].color, P_COLOR,
379 NULL, NULL, NULL},
380 {"custom_colorlabel6", N_("Green"), &prefs_common.custom_colorlabel[5].label, P_STRING,
381 NULL, NULL, NULL},
382 {"custom_color7", "#663333", &prefs_common.custom_colorlabel[6].color, P_COLOR,
383 NULL, NULL, NULL},
384 {"custom_colorlabel7", N_("Brown"), &prefs_common.custom_colorlabel[6].label, P_STRING,
385 NULL, NULL, NULL},
386 {"custom_color8", "#aaaaaa", &prefs_common.custom_colorlabel[7].color, P_COLOR,
387 NULL, NULL, NULL},
388 {"custom_colorlabel8", N_("Grey"), &prefs_common.custom_colorlabel[7].label, P_STRING,
389 NULL, NULL, NULL},
390 {"custom_color9", "#c07254", &prefs_common.custom_colorlabel[8].color, P_COLOR,
391 NULL, NULL, NULL},
392 {"custom_colorlabel9", N_("Light brown"), &prefs_common.custom_colorlabel[8].label, P_STRING,
393 NULL, NULL, NULL},
394 {"custom_color10", "#c00000", &prefs_common.custom_colorlabel[9].color, P_COLOR,
395 NULL, NULL, NULL},
396 {"custom_colorlabel10", N_("Dark red"), &prefs_common.custom_colorlabel[9].label, P_STRING,
397 NULL, NULL, NULL},
398 {"custom_color11", "#cc1074", &prefs_common.custom_colorlabel[10].color, P_COLOR,
399 NULL, NULL, NULL},
400 {"custom_colorlabel11", N_("Dark pink"), &prefs_common.custom_colorlabel[10].label, P_STRING,
401 NULL, NULL, NULL},
402 {"custom_color12", "#5094cd", &prefs_common.custom_colorlabel[11].color, P_COLOR,
403 NULL, NULL, NULL},
404 {"custom_colorlabel12", N_("Steel blue"), &prefs_common.custom_colorlabel[11].label, P_STRING,
405 NULL, NULL, NULL},
406 {"custom_color13", "#ffd500", &prefs_common.custom_colorlabel[12].color, P_COLOR,
407 NULL, NULL, NULL},
408 {"custom_colorlabel13", N_("Gold"), &prefs_common.custom_colorlabel[12].label, P_STRING,
409 NULL, NULL, NULL},
410 {"custom_color14", "#00d800", &prefs_common.custom_colorlabel[13].color, P_COLOR,
411 NULL, NULL, NULL},
412 {"custom_colorlabel14", N_("Bright green"), &prefs_common.custom_colorlabel[13].label, P_STRING,
413 NULL, NULL, NULL},
414 {"custom_color15", "#c060c0", &prefs_common.custom_colorlabel[14].color, P_COLOR,
415 NULL, NULL, NULL},
416 {"custom_colorlabel15", N_("Magenta"), &prefs_common.custom_colorlabel[14].label, P_STRING,
417 NULL, NULL, NULL},
419 /* image viewer */
420 {"display_image", "TRUE", &prefs_common.display_img, P_BOOL,
421 NULL, NULL, NULL},
422 {"resize_image", "TRUE", &prefs_common.resize_img, P_BOOL,
423 NULL, NULL, NULL},
424 {"inline_image", "TRUE", &prefs_common.inline_img, P_BOOL,
425 NULL, NULL, NULL},
427 {"display_folder_unread_num", "0",
428 &prefs_common.display_folder_unread, P_INT,
429 NULL, NULL, NULL},
430 {"newsgroup_abbrev_len", "16",
431 &prefs_common.ng_abbrev_len, P_INT,
432 NULL, NULL, NULL},
434 {"translate_header", "FALSE", &prefs_common.trans_hdr, P_BOOL,
435 NULL, NULL, NULL},
437 /* Display: Summary View */
438 {"use_address_book", "FALSE", &prefs_common.use_addr_book, P_BOOL,
439 NULL, NULL, NULL},
440 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
441 NULL, NULL, NULL},
442 {"date_format", N_("%x(%a) %H:%M"), &prefs_common.date_format,
443 P_STRING, NULL, NULL, NULL},
444 {"msgview_date_format", "FALSE", &prefs_common.msgview_date_format, P_BOOL,
445 NULL, NULL, NULL},
447 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
448 NULL, NULL, NULL},
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
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},
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},
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},
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},
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},
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},
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},
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},
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},
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 {"mainwin_fullscreen", "FALSE", &prefs_common.mainwin_fullscreen, P_BOOL,
640 NULL, NULL, NULL},
641 #ifndef GENERIC_UMPC
642 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
643 NULL, NULL, NULL},
644 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
645 NULL, NULL, NULL},
646 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
647 NULL, NULL, NULL},
648 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
649 NULL, NULL, NULL},
650 {"mimeview_tree_height", "60", &prefs_common.mimeview_tree_height, P_INT,
651 NULL, NULL, NULL},
652 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
653 NULL, NULL, NULL},
654 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
655 NULL, NULL, NULL},
656 {"compose_width", "600", &prefs_common.compose_width, P_INT,
657 NULL, NULL, NULL},
658 {"compose_height", "560", &prefs_common.compose_height, P_INT,
659 NULL, NULL, NULL},
660 #else
661 {"mainwin_width", "700", &prefs_common.mainwin_width, P_INT,
662 NULL, NULL, NULL},
663 {"mainwin_height", "470", &prefs_common.mainwin_height, P_INT,
664 NULL, NULL, NULL},
665 {"messagewin_width", "700", &prefs_common.msgwin_width, P_INT,
666 NULL, NULL, NULL},
667 {"messagewin_height", "470", &prefs_common.msgwin_height, P_INT,
668 NULL, NULL, NULL},
669 {"sourcewin_width", "700", &prefs_common.sourcewin_width, P_INT,
670 NULL, NULL, NULL},
671 {"sourcewin_height", "470", &prefs_common.sourcewin_height, P_INT,
672 NULL, NULL, NULL},
673 {"compose_width", "700", &prefs_common.compose_width, P_INT,
674 NULL, NULL, NULL},
675 {"compose_height", "470", &prefs_common.compose_height, P_INT,
676 NULL, NULL, NULL},
677 #endif
678 {"compose_notebook_height", "130", &prefs_common.compose_notebook_height, P_INT,
679 NULL, NULL, NULL},
680 {"compose_x", "0", &prefs_common.compose_x, P_INT,
681 NULL, NULL, NULL},
682 {"compose_y", "0", &prefs_common.compose_y, P_INT,
683 NULL, NULL, NULL},
684 /* Message */
685 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
686 NULL, NULL, NULL},
688 {"quote_level1_color", "#0000b3", &prefs_common.quote_level1_col, P_COLOR,
689 NULL, NULL, NULL},
690 {"quote_level2_color", "#0000b3", &prefs_common.quote_level2_col, P_COLOR,
691 NULL, NULL, NULL},
692 {"quote_level3_color", "#0000b3", &prefs_common.quote_level3_col, P_COLOR,
693 NULL, NULL, NULL},
694 {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
695 NULL, NULL, NULL},
696 {"quote_level1_bgcolor", "#cccccc", &prefs_common.quote_level1_bgcol, P_COLOR,
697 NULL, NULL, NULL},
698 {"quote_level2_bgcolor", "#d4d4d4", &prefs_common.quote_level2_bgcol, P_COLOR,
699 NULL, NULL, NULL},
700 {"quote_level3_bgcolor", "#dddddd", &prefs_common.quote_level3_bgcol, P_COLOR,
701 NULL, NULL, NULL},
702 {"uri_color", "#007f00", &prefs_common.uri_col, P_COLOR,
703 NULL, NULL, NULL},
704 {"emphasis_color", "#0000cf", &prefs_common.emphasis_col, P_COLOR,
705 NULL, NULL, NULL},
706 {"target_folder_color", "#da1cca", &prefs_common.tgt_folder_col, P_COLOR,
707 NULL, NULL, NULL},
708 {"signature_color", "#797979", &prefs_common.signature_col, P_COLOR,
709 NULL, NULL, NULL},
710 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
711 P_BOOL, NULL, NULL, NULL},
713 {"display_header_pane", "FALSE", &prefs_common.display_header_pane,
714 P_BOOL, NULL, NULL, NULL},
715 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
716 NULL, NULL, NULL},
717 {"display_xface", "TRUE", &prefs_common.display_xface,
718 P_BOOL, NULL, NULL, NULL},
719 {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
720 NULL, NULL, NULL},
721 {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
722 NULL, NULL, NULL},
723 {"promote_html_part", "FALSE", &prefs_common.promote_html_part, P_BOOL,
724 NULL, NULL, NULL},
725 {"line_space", "2", &prefs_common.line_space, P_INT,
726 NULL, NULL, NULL},
727 {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
728 NULL, NULL, NULL},
730 {"enable_smooth_scroll", "FALSE",
731 &prefs_common.enable_smooth_scroll, P_BOOL,
732 NULL, NULL, NULL},
733 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
734 NULL, NULL, NULL},
735 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
736 NULL, NULL, NULL},
737 {"hide_quoted", "TRUE",
738 &prefs_common.hide_quoted, P_BOOL,
739 NULL, NULL, NULL},
740 {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
741 NULL, NULL, NULL},
742 {"show_all_headers", "FALSE", &prefs_common.show_all_headers, P_BOOL,
743 NULL, NULL, NULL},
745 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
746 NULL, NULL, NULL},
748 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
749 NULL, NULL, NULL},
750 {"attach_save_directory", NULL,
751 &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
752 {"attach_load_directory", NULL,
753 &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
755 /* MIME viewer */
756 {"mime_textviewer", NULL,
757 &SPECIFIC_PREFS.mime_textviewer, P_STRING, NULL, NULL, NULL},
758 {"mime_open_command", "gedit '%s'",
759 &SPECIFIC_PREFS.mime_open_cmd, P_STRING, NULL, NULL, NULL},
760 {"show_inline_attachments", "TRUE",
761 &prefs_common.show_inline_attachments, P_BOOL, NULL, NULL, NULL},
763 /* Interface */
764 #ifndef GENERIC_UMPC
765 {"layout_mode", "0", &prefs_common.layout_mode, P_INT,
766 NULL, NULL, NULL},
767 #else
768 {"layout_mode", "5", &prefs_common.layout_mode, P_INT,
769 NULL, NULL, NULL},
770 #endif
771 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
772 NULL, NULL, NULL}, */
773 {"always_show_message_when_selected", "0",
774 &prefs_common.always_show_msg,
775 P_ENUM, NULL, NULL, NULL},
776 {"select_on_entry", "3", &prefs_common.select_on_entry,
777 P_ENUM, NULL, NULL, NULL},
778 {"show_tooltips", "TRUE", &prefs_common.show_tooltips,
779 P_BOOL, NULL, NULL, NULL},
781 /* do it SUMMARY_OPEN_ACTIONS-1 times */
782 {"summary_select_prio1", "0", &prefs_common.summary_select_prio[0], P_ENUM,
783 NULL, NULL, NULL},
784 {"summary_select_prio2", "0", &prefs_common.summary_select_prio[1], P_ENUM,
785 NULL, NULL, NULL},
786 {"summary_select_prio3", "0", &prefs_common.summary_select_prio[2], P_ENUM,
787 NULL, NULL, NULL},
788 {"summary_select_prio4", "0", &prefs_common.summary_select_prio[3], P_ENUM,
789 NULL, NULL, NULL},
790 {"summary_select_prio5", "0", &prefs_common.summary_select_prio[4], P_ENUM,
791 NULL, NULL, NULL},
792 {"summary_select_prio6", "0", &prefs_common.summary_select_prio[5], P_ENUM,
793 NULL, NULL, NULL},
794 {"summary_select_prio7", "0", &prefs_common.summary_select_prio[6], P_ENUM,
795 NULL, NULL, NULL},
797 {"mark_as_read_on_new_window", "FALSE",
798 &prefs_common.mark_as_read_on_new_window,
799 P_BOOL, NULL, NULL, NULL},
800 {"mark_as_read_delay", "0",
801 &prefs_common.mark_as_read_delay, P_INT,
802 NULL, NULL, NULL},
803 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
804 NULL, NULL, NULL},
805 {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
806 NULL, NULL, NULL},
807 {"summary_from_show", "0", &prefs_common.summary_from_show, P_ENUM,
808 NULL, NULL, NULL},
810 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
811 &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
812 NULL, NULL, NULL},
814 {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
815 NULL, NULL, NULL},
817 {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
818 NULL, NULL, NULL},
819 {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
820 NULL, NULL, NULL},
822 /* Addressbook */
823 {"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog,
824 P_BOOL, NULL, NULL, NULL},
825 {"addressbook_hpaned_pos", "-1", &prefs_common.addressbook_hpaned_pos,
826 P_INT, NULL, NULL, NULL},
827 {"addressbook_vpaned_pos", "-1", &prefs_common.addressbook_vpaned_pos,
828 P_INT, NULL, NULL, NULL},
830 /* Other */
831 #ifndef G_OS_WIN32
832 {"uri_open_command", DEFAULT_BROWSER_CMD,
833 &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
834 #else
835 {"gtk_theme", DEFAULT_W32_GTK_THEME,
836 &SPECIFIC_PREFS.gtk_theme, P_STRING, NULL, NULL, NULL},
837 #endif
838 {"ext_editor_command", DEFAULT_EDITOR_CMD,
839 &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
840 {"cmds_use_system_default", "TRUE",
841 &prefs_common.cmds_use_system_default, P_BOOL, NULL, NULL, NULL},
842 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
843 P_BOOL, NULL, NULL, NULL},
844 {"session_passwords", "FALSE", &prefs_common.session_passwords,
845 P_BOOL, NULL, NULL, NULL},
846 {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
847 NULL, NULL, NULL},
848 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
849 NULL, NULL, NULL},
850 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
851 NULL, NULL, NULL},
852 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
853 P_BOOL, NULL, NULL, NULL},
854 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
855 NULL, NULL, NULL},
856 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
857 NULL, NULL, NULL},
858 #ifndef GENERIC_UMPC
859 {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
860 NULL, NULL, NULL},
861 #else
862 {"summary_quicksearch_recurse", "0", &prefs_common.summary_quicksearch_recurse, P_INT,
863 NULL, NULL, NULL},
864 #endif
866 #if defined(__OpenBSD__)
867 {"io_timeout_secs", "80", &prefs_common.io_timeout_secs,
868 P_INT, NULL, NULL, NULL},
869 #else
870 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
871 P_INT, NULL, NULL, NULL},
872 #endif
873 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
874 NULL, NULL, NULL},
875 {"important_score", "1", &prefs_common.important_score, P_INT,
876 NULL, NULL, NULL},
878 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
879 NULL, NULL, NULL},
880 {"log_length", "500", &prefs_common.loglength, P_INT,
881 NULL, NULL, NULL},
882 #ifndef GENERIC_UMPC
883 {"enable_log_standard", "TRUE", &prefs_common.enable_log_standard, P_BOOL,
884 NULL, NULL, NULL},
885 {"enable_log_warning", "TRUE", &prefs_common.enable_log_warning, P_BOOL,
886 NULL, NULL, NULL},
887 {"enable_log_error", "TRUE", &prefs_common.enable_log_error, P_BOOL,
888 NULL, NULL, NULL},
889 {"enable_log_status", "TRUE", &prefs_common.enable_log_status, P_BOOL,
890 NULL, NULL, NULL},
891 #else
892 {"enable_log_standard", "FALSE", &prefs_common.enable_log_standard, P_BOOL,
893 NULL, NULL, NULL},
894 {"enable_log_warning", "FALSE", &prefs_common.enable_log_warning, P_BOOL,
895 NULL, NULL, NULL},
896 {"enable_log_error", "FALSE", &prefs_common.enable_log_error, P_BOOL,
897 NULL, NULL, NULL},
898 {"enable_log_status", "FALSE", &prefs_common.enable_log_status, P_BOOL,
899 NULL, NULL, NULL},
900 #endif
901 {"log_msg_color", "#00af00", &prefs_common.log_msg_color, P_COLOR,
902 NULL, NULL, NULL},
903 {"log_warn_color", "#af0000", &prefs_common.log_warn_color, P_COLOR,
904 NULL, NULL, NULL},
905 {"log_error_color", "#af0000", &prefs_common.log_error_color, P_COLOR,
906 NULL, NULL, NULL},
907 {"log_in_color", "#000000", &prefs_common.log_in_color, P_COLOR,
908 NULL, NULL, NULL},
909 {"log_out_color", "#0000ef", &prefs_common.log_out_color, P_COLOR,
910 NULL, NULL, NULL},
911 {"log_status_ok_color", "#00af00", &prefs_common.log_status_ok_color, P_COLOR,
912 NULL, NULL, NULL},
913 {"log_status_nok_color", "#0000af", &prefs_common.log_status_nok_color, P_COLOR,
914 NULL, NULL, NULL},
915 {"log_status_skip_color", "#aa00aa", &prefs_common.log_status_skip_color, P_COLOR,
916 NULL, NULL, NULL},
918 {"enable_filtering_debug", "FALSE", &prefs_common.enable_filtering_debug, P_BOOL,
919 NULL, NULL, NULL},
920 {"filtering_debug_level", "1", &prefs_common.filtering_debug_level, P_INT,
921 NULL, NULL, NULL},
922 {"enable_filtering_debug_inc", "TRUE", &prefs_common.enable_filtering_debug_inc, P_BOOL,
923 NULL, NULL, NULL},
924 {"enable_filtering_debug_manual", "TRUE", &prefs_common.enable_filtering_debug_manual, P_BOOL,
925 NULL, NULL, NULL},
926 {"enable_filtering_debug_folder_proc", "FALSE", &prefs_common.enable_filtering_debug_folder_proc, P_BOOL,
927 NULL, NULL, NULL},
928 {"enable_filtering_debug_pre_proc", "FALSE", &prefs_common.enable_filtering_debug_pre_proc, P_BOOL,
929 NULL, NULL, NULL},
930 {"enable_filtering_debug_post_proc", "FALSE", &prefs_common.enable_filtering_debug_post_proc, P_BOOL,
931 NULL, NULL, NULL},
932 {"filtering_debug_clip_log", "TRUE", &prefs_common.filtering_debug_cliplog, P_BOOL,
933 NULL, NULL, NULL},
934 {"filtering_debug_log_length", "500", &prefs_common.filtering_debug_loglength, P_INT,
935 NULL, NULL, NULL},
937 {"gtk_can_change_accels", "FALSE", &prefs_common.gtk_can_change_accels, P_BOOL,
938 NULL, NULL, NULL},
940 {"color_new", "#0000b3", &prefs_common.color_new, P_COLOR,
941 NULL, NULL, NULL},
943 /* Some windows' sizes */
944 {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
945 NULL, NULL, NULL},
946 {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
947 NULL, NULL, NULL},
949 {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
950 NULL, NULL, NULL},
951 {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
952 NULL, NULL, NULL},
954 {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
955 NULL, NULL, NULL},
956 {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
957 NULL, NULL, NULL},
959 {"templateswin_width", "480", &prefs_common.templateswin_width, P_INT,
960 NULL, NULL, NULL},
961 {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
962 NULL, NULL, NULL},
964 {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
965 NULL, NULL, NULL},
966 {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
967 NULL, NULL, NULL},
969 {"tagswin_width", "486", &prefs_common.tagswin_width, P_INT,
970 NULL, NULL, NULL},
971 {"tagswin_height", "-1", &prefs_common.tagswin_height, P_INT,
972 NULL, NULL, NULL},
974 {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
975 NULL, NULL, NULL},
976 {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
977 NULL, NULL, NULL},
979 {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
980 NULL, NULL, NULL},
981 {"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT,
982 NULL, NULL, NULL},
984 {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
985 NULL, NULL, NULL},
986 {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
987 NULL, NULL, NULL},
989 {"pluginswin_width", "-1", &prefs_common.pluginswin_width, P_INT,
990 NULL, NULL, NULL},
991 {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
992 NULL, NULL, NULL},
994 {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
995 NULL, NULL, NULL},
996 {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
997 NULL, NULL, NULL},
999 {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
1000 NULL, NULL, NULL},
1001 {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
1002 NULL, NULL, NULL},
1004 {"zero_replacement_char", "0", &prefs_common.zero_replacement, P_STRING,
1005 NULL, NULL, NULL},
1007 {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
1008 NULL, NULL, NULL},
1009 {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
1010 NULL, NULL, NULL},
1012 {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
1013 NULL, NULL, NULL},
1014 {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
1015 NULL, NULL, NULL},
1017 {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
1018 NULL, NULL, NULL},
1019 {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
1020 NULL, NULL, NULL},
1022 {"filtering_debugwin_width", "600", &prefs_common.filtering_debugwin_width, P_INT,
1023 NULL, NULL, NULL},
1024 {"filtering_debugwin_height", "-1", &prefs_common.filtering_debugwin_height, P_INT,
1025 NULL, NULL, NULL},
1027 {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
1028 NULL, NULL, NULL},
1029 {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
1030 NULL, NULL, NULL},
1032 {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
1033 NULL, NULL, NULL},
1034 {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
1035 NULL, NULL, NULL},
1037 {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
1038 NULL, NULL, NULL},
1039 {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
1040 NULL, NULL, NULL},
1042 {"aboutwin_width", "450", &prefs_common.aboutwin_width, P_INT,
1043 NULL, NULL, NULL},
1044 {"aboutwin_height", "500", &prefs_common.aboutwin_height, P_INT,
1045 NULL, NULL, NULL},
1047 {"addrgather_width", "450", &prefs_common.addrgather_width, P_INT,
1048 NULL, NULL, NULL},
1049 {"addrgather_height", "-1", &prefs_common.addrgather_height, P_INT,
1050 NULL, NULL, NULL},
1052 {"news_subscribe_width", "450", &prefs_common.news_subscribe_width, P_INT,
1053 NULL, NULL, NULL},
1054 {"news_subscribe_height", "400", &prefs_common.news_subscribe_height, P_INT,
1055 NULL, NULL, NULL},
1057 /* Hidden */
1058 {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
1059 NULL, NULL, NULL},
1060 {"utf8_instead_of_locale_for_broken_mail", "0",
1061 &prefs_common.broken_are_utf8, P_INT,
1062 NULL, NULL, NULL},
1063 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
1064 NULL, NULL, NULL},
1065 {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
1066 NULL, NULL, NULL},
1067 {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
1068 NULL, NULL, NULL},
1069 {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
1070 NULL, NULL, NULL},
1071 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
1072 NULL, NULL, NULL},
1073 {"folderview_vscrollbar_policy", "0",
1074 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
1075 NULL, NULL, NULL},
1076 {"textview_cursor_visible", "FALSE",
1077 &prefs_common.textview_cursor_visible, P_BOOL,
1078 NULL, NULL, NULL},
1079 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
1080 NULL, NULL, NULL},
1081 #ifndef GENERIC_UMPC
1082 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1083 NULL, NULL, NULL},
1084 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
1085 NULL, NULL, NULL},
1086 #else
1087 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1088 NULL, NULL, NULL},
1089 {"cache_min_keep_time", "0", &prefs_common.cache_min_keep_time, P_INT,
1090 NULL, NULL, NULL},
1091 #endif
1092 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
1093 P_INT, NULL, NULL, NULL },
1094 {"last_opened_folder", "", &prefs_common.last_opened_folder,
1095 P_STRING, NULL, NULL, NULL },
1096 {"goto_last_folder_on_startup", "FALSE", &prefs_common.goto_last_folder_on_startup,
1097 P_BOOL, NULL, NULL, NULL },
1098 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
1099 NULL, NULL, NULL},
1100 {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
1101 NULL, NULL, NULL},
1102 {"summary_quicksearch_autorun", "0", &prefs_common.summary_quicksearch_autorun, P_INT,
1103 NULL, NULL, NULL},
1104 {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
1105 NULL, NULL, NULL},
1106 {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
1107 NULL, NULL, NULL},
1108 {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
1109 NULL, NULL, NULL},
1110 {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
1111 NULL, NULL, NULL},
1112 {"save_parts_readwrite", "FALSE", &prefs_common.save_parts_readwrite, P_BOOL,
1113 NULL, NULL, NULL},
1114 {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
1115 NULL, NULL, NULL},
1116 {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
1117 NULL, NULL, NULL},
1118 #ifndef GENERIC_UMPC
1119 {"real_time_sync", "FALSE", &prefs_common.real_time_sync, P_BOOL,
1120 NULL, NULL, NULL},
1121 #else
1122 {"real_time_sync", "TRUE", &prefs_common.real_time_sync, P_BOOL,
1123 NULL, NULL, NULL},
1124 #endif
1126 {"print_paper_type", NULL, &prefs_common.print_paper_type, P_STRING,
1127 NULL, NULL, NULL},
1128 {"print_paper_orientation", "0", &prefs_common.print_paper_orientation, P_INT,
1129 NULL, NULL, NULL},
1130 {"print_margin_top", "-1", &prefs_common.print_margin_top, P_INT,
1131 NULL, NULL, NULL},
1132 {"print_margin_bottom", "-1", &prefs_common.print_margin_bottom, P_INT,
1133 NULL, NULL, NULL},
1134 {"print_margin_left", "-1", &prefs_common.print_margin_left, P_INT,
1135 NULL, NULL, NULL},
1136 {"print_margin_right", "-1", &prefs_common.print_margin_right, P_INT,
1137 NULL, NULL, NULL},
1138 {"print_use_color", "0", &prefs_common.print_use_color, P_INT,
1139 NULL, NULL, NULL},
1140 {"print_use_collate", "0", &prefs_common.print_use_collate, P_INT,
1141 NULL, NULL, NULL},
1142 {"print_use_reverse", "0", &prefs_common.print_use_reverse, P_INT,
1143 NULL, NULL, NULL},
1144 {"print_use_duplex", "0", &prefs_common.print_use_duplex, P_INT,
1145 NULL, NULL, NULL},
1146 {"print_imgs", "1", &prefs_common.print_imgs, P_INT,
1147 NULL, NULL, NULL},
1148 {"print_previewwin_width", "600", &prefs_common.print_previewwin_width, P_INT,
1149 NULL, NULL, NULL},
1150 {"print_previewwin_height", "-1", &prefs_common.print_previewwin_height, P_INT,
1151 NULL, NULL, NULL},
1152 {"use_networkmanager", "TRUE", &prefs_common.use_networkmanager, P_BOOL,
1153 NULL, NULL, NULL},
1154 {"use_shred", "FALSE", &prefs_common.use_shred, P_BOOL,
1155 NULL, NULL, NULL},
1157 {"two_line_vertical", "TRUE", &prefs_common.two_line_vert,
1158 P_BOOL, NULL, NULL, NULL },
1160 {"inherit_folder_properties", "FALSE", &prefs_common.inherit_folder_props, P_BOOL,
1161 NULL, NULL, NULL},
1163 {"flush_metadata", "TRUE", &prefs_common.flush_metadata, P_BOOL,
1164 NULL, NULL, NULL},
1166 {"nav_history_length", "50", &prefs_common.nav_history_length, P_INT,
1167 NULL, NULL, NULL},
1169 {"diff_added_color", "#008b8b", &prefs_common.diff_added_color, P_COLOR,
1170 NULL, NULL, NULL},
1171 {"diff_deleted_color", "#6a5acd", &prefs_common.diff_deleted_color, P_COLOR,
1172 NULL, NULL, NULL},
1173 {"diff_hunk_color", "#a52a2a", &prefs_common.diff_hunk_color, P_COLOR,
1174 NULL, NULL, NULL},
1176 {"folder_search_wildcard", "TRUE", &prefs_common.folder_search_wildcard, P_BOOL,
1177 NULL, NULL, NULL},
1178 {"address_search_wildcard", "TRUE", &prefs_common.address_search_wildcard, P_BOOL,
1179 NULL, NULL, NULL},
1181 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
1185 * Read history list from the specified history file in the specified directory (subdir of rc_dir)
1186 * Fallback to default_list if history file is not found
1188 GList *prefs_common_read_history_from_dir_with_defaults(const gchar *dirname, const gchar *history,
1189 GList *default_list)
1191 FILE *fp;
1192 gchar *path;
1193 gchar buf[PREFSBUFSIZE];
1194 GList *tmp = NULL;
1196 if (dirname) {
1197 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, dirname,
1198 G_DIR_SEPARATOR_S, history,
1199 NULL);
1200 } else {
1201 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1202 NULL);
1204 if ((fp = g_fopen(path, "rb")) == NULL) {
1205 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
1206 g_free(path);
1207 /* returns default list if set, otherwise NULL */
1208 return default_list;
1210 g_free(path);
1211 while (fgets(buf, sizeof(buf), fp) != NULL) {
1212 g_strstrip(buf);
1213 if (buf[0] == '\0') continue;
1214 tmp = add_history(tmp, buf);
1216 fclose(fp);
1218 tmp = g_list_reverse(tmp);
1220 return tmp;
1224 * Read history list from the specified history file in the specified directory (subdir of rc_dir)
1226 static GList *prefs_common_read_history_from_dir(const gchar *dirname, const gchar *history)
1228 return prefs_common_read_history_from_dir_with_defaults(dirname, history, NULL);
1232 * Read history list from the specified history file
1234 static GList *prefs_common_read_history(const gchar *history)
1236 return prefs_common_read_history_from_dir(NULL, history);
1239 void prefs_common_read_config(void)
1241 gchar *rcpath;
1242 gchar *tmp;
1244 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
1245 prefs_read_config(param, "Common", rcpath, NULL);
1246 #ifdef G_OS_WIN32
1247 prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
1248 #endif
1250 g_free(rcpath);
1252 tmp = g_strdup(gettext(prefs_common.date_format));
1253 g_free(prefs_common.date_format);
1254 prefs_common.date_format = tmp;
1256 prefs_common.mime_open_cmd_history =
1257 prefs_common_read_history(COMMAND_HISTORY);
1258 prefs_common.summary_quicksearch_history =
1259 prefs_common_read_history(QUICKSEARCH_HISTORY);
1260 prefs_common.summary_search_from_history =
1261 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
1262 prefs_common.summary_search_to_history =
1263 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
1264 prefs_common.summary_search_subject_history =
1265 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
1266 prefs_common.summary_search_body_history =
1267 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
1268 prefs_common.summary_search_adv_condition_history =
1269 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
1270 prefs_common.message_search_history =
1271 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
1272 prefs_common.compose_save_to_history =
1273 prefs_common_read_history(COMPOSE_SAVE_TO_HISTORY);
1274 #ifndef USE_NEW_ADDRBOOK
1275 prefs_common.addressbook_custom_attributes = addressbook_update_custom_attr_from_prefs();
1276 #endif
1277 colorlabel_update_colortable_from_prefs();
1280 #define TRY(func) \
1281 if (!(func)) \
1283 g_warning("failed to write\n"); \
1284 goto out; \
1288 * Save history list to the specified history file in the specified directory (subdir of rc_dir)
1290 static void prefs_common_save_history_to_dir(const gchar *dirname, const gchar *history, GList *list)
1292 GList *cur;
1293 FILE *fp;
1294 gchar *path, *tmp_path;
1296 if (dirname) {
1297 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, dirname,
1298 G_DIR_SEPARATOR_S, history,
1299 NULL);
1300 } else {
1301 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1302 NULL);
1304 tmp_path = g_strconcat(path, ".tmp", NULL);
1306 if ((fp = g_fopen(tmp_path, "wb")) == NULL) {
1307 FILE_OP_ERROR(tmp_path, "fopen");
1308 goto out;
1311 for (cur = list; cur != NULL; cur = cur->next) {
1312 TRY(fputs((gchar *)cur->data, fp) != EOF &&
1313 fputc('\n', fp) != EOF);
1316 if (fclose(fp) == EOF) {
1317 FILE_OP_ERROR(tmp_path, "fclose");
1318 fp = NULL;
1319 goto out;
1321 fp = NULL;
1322 #ifdef G_OS_WIN32
1323 claws_unlink(path);
1324 #endif
1325 if (g_rename(tmp_path, path) < 0) {
1326 FILE_OP_ERROR(path, "rename");
1327 goto out;
1330 out:
1331 if (fp)
1332 fclose(fp);
1333 g_free(tmp_path);
1334 g_free(path);
1338 * Save history list to the specified history file
1340 static void prefs_common_save_history(const gchar *history, GList *list)
1342 prefs_common_save_history_to_dir(NULL, history, list);
1345 #undef TRY
1347 void prefs_common_write_config(void)
1349 prefs_write_config(param, "Common", COMMON_RC);
1350 #ifdef G_OS_WIN32
1351 prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
1352 #endif
1354 prefs_common_save_history(COMMAND_HISTORY,
1355 prefs_common.mime_open_cmd_history);
1356 prefs_common_save_history(QUICKSEARCH_HISTORY,
1357 prefs_common.summary_quicksearch_history);
1358 prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY,
1359 prefs_common.summary_search_from_history);
1360 prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY,
1361 prefs_common.summary_search_to_history);
1362 prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY,
1363 prefs_common.summary_search_subject_history);
1364 prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY,
1365 prefs_common.summary_search_body_history);
1366 prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY,
1367 prefs_common.summary_search_adv_condition_history);
1368 prefs_common_save_history(MESSAGE_SEARCH_HISTORY,
1369 prefs_common.message_search_history);
1370 prefs_common_save_history(COMPOSE_SAVE_TO_HISTORY,
1371 prefs_common.compose_save_to_history);
1373 #ifndef USE_NEW_ADDRBOOK
1374 prefs_common_save_history_to_dir(ADDRBOOK_DIR,
1375 ADDRESSBOOK_CUSTOM_ATTRIBUTES,
1376 prefs_common.addressbook_custom_attributes);
1377 #endif
1380 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
1381 both 'in' and 'out' must be non-NULL.
1382 'out' must be a pointer to a buffer whose size is at least equal
1383 to strlen(txt)+1, this buffer will get cleared. out's contents
1384 will always get set to a valid string, even if it's "".*/
1385 void pref_get_unescaped_pref(gchar *out, const gchar *in)
1387 const gchar *i;
1388 gchar *o;
1390 *out = '\0';
1392 cm_return_if_fail( in != NULL );
1393 cm_return_if_fail( out != NULL );
1395 i = in;
1396 o = out;
1397 memset(out, 0, strlen(in)+1);
1398 while (*i != '\0') {
1399 if (*i == '\\' && *(i+1) == 'n') {
1400 *o++ = '\n';
1401 i++;
1402 } else if (*i == '\\' && *(i+1) == 't') {
1403 *o++ = '\t';
1404 i++;
1405 } else if (*i == '\\' && *(i+1) == '\\') {
1406 *o++ = '\\';
1407 i++;
1408 } else {
1409 *o++ = *i;
1411 i++;
1413 *o='\0';
1416 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1417 both 'in' and 'out' must be non-NULL.
1418 'out' must be a pointer to a buffer whose size is at least equal
1419 to 2*strlen(txt)+1. out's contents will always get set to a valid
1420 string, even if it's "". */
1421 void pref_get_escaped_pref(gchar *out, const gchar *in)
1423 const gchar *i;
1424 gchar *o;
1426 *out = '\0';
1428 cm_return_if_fail( in != NULL );
1429 cm_return_if_fail( out != NULL );
1431 i = in;
1432 o = out;
1433 while (*i != '\0') {
1434 if (*i == '\n') {
1435 *o++ = '\\';
1436 *o++ = 'n';
1437 } else if (*i == '\t') {
1438 *o++ = '\\';
1439 *o++ = 't';
1440 } else if (*i == '\\') {
1441 *o++ = '\\';
1442 *o++ = '\\';
1443 } else {
1444 *o++ = *i;
1446 i++;
1448 *o = '\0';
1451 /* set the contents of a textview widget from the internal \-escaped
1452 representation of a pref string. both txt and textview must be non-NULL. */
1453 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1455 GtkTextBuffer *buffer;
1456 gchar *out = NULL;
1458 cm_return_if_fail( textview != NULL );
1460 buffer = gtk_text_view_get_buffer(textview);
1462 if (!txt) {
1463 gtk_text_buffer_set_text(buffer, "", -1);
1464 } else {
1465 out = g_malloc(strlen(txt)+1);
1467 pref_get_unescaped_pref(out, txt);
1469 gtk_text_buffer_set_text(buffer, out?out:"", -1);
1470 g_free(out);
1474 /* set the contents of a gtkentry widget from the internal \-escaped
1475 representation of a pref string. both txt and entry must be non-NULL. */
1476 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1478 gchar *out = NULL;
1480 cm_return_if_fail( entry != NULL );
1481 if (!txt) {
1482 gtk_entry_set_text(entry, "");
1483 } else {
1484 out = g_malloc(strlen(txt)+1);
1486 pref_get_unescaped_pref(out, txt);
1488 gtk_entry_set_text(entry, out?out:"");
1489 g_free(out);
1493 /* get the \-escaped internal representation of a pref from the contents of
1494 a textview widget. textview must be non-NULL. */
1495 gchar *pref_get_pref_from_textview(GtkTextView *textview)
1497 GtkTextBuffer *buffer;
1498 GtkTextIter start, end;
1499 gchar *out, *tmp;
1501 cm_return_val_if_fail( textview != NULL, "" );
1503 buffer = gtk_text_view_get_buffer(textview);
1504 gtk_text_buffer_get_start_iter(buffer, &start);
1505 gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1506 tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1507 out = malloc(2*strlen(tmp)+1);
1508 if (out)
1509 pref_get_escaped_pref(out, tmp);
1510 g_free(tmp);
1512 return out?out:"";
1515 /* get the \-escaped internal representation of a pref from the contents of
1516 a gtkentry widget. entry must be non-NULL. */
1517 gchar *pref_get_pref_from_entry(GtkEntry *entry)
1519 gchar *out, *tmp;
1521 cm_return_val_if_fail( entry != NULL, "" );
1523 tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1524 out = malloc(2*strlen(tmp)+1);
1526 if (out)
1527 pref_get_escaped_pref(out, tmp);
1528 g_free(tmp);
1530 return out?out:"";
1533 /* ugly hack to be able to get this pref from ssl_certificate.c */
1534 gboolean prefs_common_unsafe_ssl_certs(void)
1536 return prefs_common.unsafe_ssl_certs;
1539 gboolean prefs_common_enable_log_standard(void)
1541 return prefs_common.enable_log_standard;
1544 gboolean prefs_common_enable_log_warning(void)
1546 return prefs_common.enable_log_warning;
1548 gboolean prefs_common_enable_log_error(void)
1550 return prefs_common.enable_log_error;
1552 gboolean prefs_common_enable_log_status(void)
1554 return prefs_common.enable_log_status;
1558 return the translated name of a header, if the translate_header option is
1559 set, otherwise return the untranslated header name (header_name itself).
1560 this function is provided for convenience, it's an interface to
1561 prefs_common.trans_hdr.
1562 works with header names either with or without trailing colon, provided
1563 that gettext found such header name in the sources (they should all be
1564 found in src/gtk/headers.h anyway).
1566 const gchar *prefs_common_translated_header_name(const gchar *header_name)
1568 if (header_name == NULL || *header_name == '\0')
1569 return header_name;
1571 return prefs_common.trans_hdr ? gettext(header_name) : header_name;
1574 const gchar *prefs_common_get_uri_cmd(void)
1576 #ifdef G_OS_WIN32
1577 return NULL;
1578 #else
1579 gchar *tmp = NULL;
1581 if (!prefs_common.cmds_use_system_default)
1582 return prefs_common.uri_cmd;
1584 tmp = g_find_program_in_path("xdg-open");
1585 if (!tmp)
1586 return prefs_common.uri_cmd;
1588 g_free(tmp);
1589 return "xdg-open %s";
1590 #endif
1593 const gchar *prefs_common_get_ext_editor_cmd(void)
1595 return prefs_common.ext_editor_cmd;
1596 #if 0 /* we should do that, but it detaches the editor and breaks
1597 compose.c's external composition. */
1598 gchar *tmp = NULL;
1600 if (!prefs_common.cmds_use_system_default)
1601 return prefs_common.ext_editor_cmd;
1603 tmp = g_find_program_in_path("xdg-open");
1604 if (!tmp)
1605 return prefs_common.ext_editor_cmd;
1607 g_free(tmp);
1608 return "xdg-open %s";
1609 #endif
1612 gboolean prefs_common_get_use_shred(void)
1614 return prefs_common.use_shred;
1617 gboolean prefs_common_get_flush_metadata (void)
1619 return prefs_common.flush_metadata;
1622 PrefsCommon *prefs_common_get_prefs(void)
1624 return &prefs_common;