2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2007 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 2 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, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
27 #include <glib/gi18n.h>
29 #include <gdk/gdkkeysyms.h>
34 #include <sys/types.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"
54 #include "alertpanel.h"
58 #include "folderview.h"
59 #include "stock_pixmap.h"
60 #include "prefswindow.h"
61 #include "colorlabel.h"
69 PrefsCommon prefs_common;
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.
82 # define SPECIFIC_PREFS prefs_unix
84 static PrefsCommon prefs_unix;
86 static PrefParam param_os_specific[] = {
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},
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},
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},
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},
117 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
118 &prefs_common.pixmap_theme_path, P_STRING, NULL, NULL, NULL},
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},
128 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
131 # define SPECIFIC_PREFS prefs_common
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
141 static PrefParam param[] = {
143 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
145 {"ext_inc_path", DEFAULT_INC_PATH, &SPECIFIC_PREFS.extinc_cmd, P_STRING,
148 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
150 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
152 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
154 {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
155 P_BOOL, NULL, NULL, NULL},
156 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
157 P_BOOL, NULL, NULL, NULL},
158 {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
159 P_BOOL, NULL, NULL, NULL},
160 {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
161 P_BOOL, NULL, NULL, NULL},
162 {"newmail_notify_cmd", "", &SPECIFIC_PREFS.newmail_notify_cmd, P_STRING,
164 {"receive_dialog_mode", "2", &prefs_common.recv_dialog_mode, P_ENUM,
166 {"receivewin_width", "460", &prefs_common.receivewin_width, P_INT,
168 {"receivewin_height", "-1", &prefs_common.receivewin_height, P_INT,
170 {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
171 P_BOOL, NULL, NULL, NULL},
172 {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
173 P_BOOL, NULL, NULL, NULL},
176 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
178 {"confirm_send_queued_messages", "FALSE", &prefs_common.confirm_send_queued_messages,
179 P_BOOL, NULL, NULL, NULL},
180 {"send_dialog_mode", "1", &prefs_common.send_dialog_mode, P_ENUM,
182 {"sendwin_width", "460", &prefs_common.sendwin_width, P_INT,
184 {"sendwin_height", "-1", &prefs_common.sendwin_height, P_INT,
187 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
189 {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
192 {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
193 P_BOOL, NULL, NULL, NULL},
196 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
198 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
199 P_BOOL, NULL, NULL, NULL},
200 {"redirect_keep_from", "FALSE",
201 &prefs_common.redirect_keep_from, P_BOOL,
203 {"undo_level", "50", &prefs_common.undolevels, P_INT,
205 {"compose_with_format", "FALSE", &prefs_common.compose_with_format, P_BOOL,
207 {"compose_subject_format", "",
208 &prefs_common.compose_subject_format, P_STRING, NULL, NULL, NULL},
209 {"compose_body_format", N_("Hello,\\n"),
210 &prefs_common.compose_body_format, P_STRING, NULL, NULL, NULL},
212 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
214 {"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
216 {"linewrap_pastes", "TRUE", &prefs_common.linewrap_pastes, P_BOOL,
218 {"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
220 {"autosave", "TRUE", &prefs_common.autosave,
221 P_BOOL, NULL, NULL, NULL},
222 {"autosave_length", "50", &prefs_common.autosave_length, P_INT,
225 {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
227 {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path, P_STRING,
229 {"dictionary", "", &prefs_common.dictionary, P_STRING,
231 {"alt_dictionary", "", &prefs_common.alt_dictionary, P_STRING,
233 {"aspell_sugmode", "1", &prefs_common.aspell_sugmode, P_INT,
235 {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
237 {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
239 {"recheck_when_changing_dict", "TRUE", &prefs_common.recheck_when_changing_dict,
240 P_BOOL, NULL, NULL, NULL},
241 {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
243 {"use_both_dicts", "FALSE", &prefs_common.use_both_dicts, P_BOOL,
246 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
248 {"compose_dnd_insert_or_attach", "0", &prefs_common.compose_dnd_mode, P_ENUM,
251 /* Account autoselection */
252 {"reply_account_autoselect", "TRUE",
253 &prefs_common.reply_account_autosel, P_BOOL,
255 {"forward_account_autoselect", "TRUE",
256 &prefs_common.forward_account_autosel, P_BOOL,
258 {"reedit_account_autoselect", "TRUE",
259 &prefs_common.reedit_account_autosel, P_BOOL,
262 {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
266 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
269 {"show_ruler", "FALSE", &prefs_common.show_ruler, P_BOOL,
274 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
276 {"reply_quote_format", N_("On %d\\n%f wrote:\\n\\n%q"),
277 &prefs_common.quotefmt, P_STRING, NULL, NULL, NULL},
279 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
281 {"forward_quote_format",
282 N_("\\n\\nBegin forwarded message:\\n\\n"
283 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
284 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M"),
285 &prefs_common.fw_quotefmt, P_STRING, NULL, NULL, NULL},
286 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
290 /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
291 {"widget_font", NULL,
292 &prefs_common.widgetfont_gtk1, P_STRING, NULL, NULL, NULL},
293 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
294 &prefs_common.textfont_gtk1, P_STRING, NULL, NULL, NULL},
295 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
296 &prefs_common.smallfont_gtk1, P_STRING, NULL, NULL, NULL},
297 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
298 &prefs_common.boldfont_gtk1, P_STRING, NULL, NULL, NULL},
299 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
300 &prefs_common.normalfont_gtk1, P_STRING, NULL, NULL, NULL},
304 {"widget_font_gtk2", NULL,
305 &SPECIFIC_PREFS.widgetfont, P_STRING, NULL, NULL, NULL},
306 {"message_font_gtk2", "Monospace 9",
307 &SPECIFIC_PREFS.textfont, P_STRING, NULL, NULL, NULL},
308 {"print_font_gtk2", "Monospace 9",
309 &SPECIFIC_PREFS.printfont, P_STRING, NULL, NULL, NULL},
310 {"small_font_gtk2", "Sans 9",
311 &SPECIFIC_PREFS.smallfont, P_STRING, NULL, NULL, NULL},
312 {"normal_font_gtk2", "Sans 9",
313 &SPECIFIC_PREFS.normalfont, P_STRING, NULL, NULL, NULL},
315 {"widget_font_gtk2", NULL,
316 &SPECIFIC_PREFS.widgetfont, P_STRING, NULL, NULL, NULL},
317 {"message_font_gtk2", "Monospace 8",
318 &SPECIFIC_PREFS.textfont, P_STRING, NULL, NULL, NULL},
319 {"print_font_gtk2", "Monospace 8",
320 &SPECIFIC_PREFS.printfont, P_STRING, NULL, NULL, NULL},
321 {"small_font_gtk2", "Sans 8",
322 &SPECIFIC_PREFS.smallfont, P_STRING, NULL, NULL, NULL},
323 {"normal_font_gtk2", "Sans 8",
324 &SPECIFIC_PREFS.normalfont, P_STRING, NULL, NULL, NULL},
327 {"custom_color1", "#ff9900", &prefs_common.custom_colorlabel[0].color, P_COLOR,
329 {"custom_colorlabel1", N_("Orange"), &prefs_common.custom_colorlabel[0].label, P_STRING,
331 {"custom_color2", "#ff0000", &prefs_common.custom_colorlabel[1].color, P_COLOR,
333 {"custom_colorlabel2", N_("Red"), &prefs_common.custom_colorlabel[1].label, P_STRING,
335 {"custom_color3", "#ff66ff", &prefs_common.custom_colorlabel[2].color, P_COLOR,
337 {"custom_colorlabel3", N_("Pink"), &prefs_common.custom_colorlabel[2].label, P_STRING,
339 {"custom_color4", "#00ccff", &prefs_common.custom_colorlabel[3].color, P_COLOR,
341 {"custom_colorlabel4", N_("Sky blue"), &prefs_common.custom_colorlabel[3].label, P_STRING,
343 {"custom_color5", "#0000ff", &prefs_common.custom_colorlabel[4].color, P_COLOR,
345 {"custom_colorlabel5", N_("Blue"), &prefs_common.custom_colorlabel[4].label, P_STRING,
347 {"custom_color6", "#009900", &prefs_common.custom_colorlabel[5].color, P_COLOR,
349 {"custom_colorlabel6", N_("Green"), &prefs_common.custom_colorlabel[5].label, P_STRING,
351 {"custom_color7", "#663333", &prefs_common.custom_colorlabel[6].color, P_COLOR,
353 {"custom_colorlabel7", N_("Brown"), &prefs_common.custom_colorlabel[6].label, P_STRING,
355 {"custom_color8", "#aaaaaa", &prefs_common.custom_colorlabel[7].color, P_COLOR,
357 {"custom_colorlabel8", N_("Grey"), &prefs_common.custom_colorlabel[7].label, P_STRING,
359 {"custom_color9", "#c07254", &prefs_common.custom_colorlabel[8].color, P_COLOR,
361 {"custom_colorlabel9", N_("Light brown"), &prefs_common.custom_colorlabel[8].label, P_STRING,
363 {"custom_color10", "#c00000", &prefs_common.custom_colorlabel[9].color, P_COLOR,
365 {"custom_colorlabel10", N_("Dark red"), &prefs_common.custom_colorlabel[9].label, P_STRING,
367 {"custom_color11", "#cc1074", &prefs_common.custom_colorlabel[10].color, P_COLOR,
369 {"custom_colorlabel11", N_("Dark pink"), &prefs_common.custom_colorlabel[10].label, P_STRING,
371 {"custom_color12", "#5094cd", &prefs_common.custom_colorlabel[11].color, P_COLOR,
373 {"custom_colorlabel12", N_("Steel blue"), &prefs_common.custom_colorlabel[11].label, P_STRING,
375 {"custom_color13", "#ffd500", &prefs_common.custom_colorlabel[12].color, P_COLOR,
377 {"custom_colorlabel13", N_("Gold"), &prefs_common.custom_colorlabel[12].label, P_STRING,
379 {"custom_color14", "#00d800", &prefs_common.custom_colorlabel[13].color, P_COLOR,
381 {"custom_colorlabel14", N_("Bright green"), &prefs_common.custom_colorlabel[13].label, P_STRING,
383 {"custom_color15", "#c060c0", &prefs_common.custom_colorlabel[14].color, P_COLOR,
385 {"custom_colorlabel15", N_("Magenta"), &prefs_common.custom_colorlabel[14].label, P_STRING,
389 {"display_image", "TRUE", &prefs_common.display_img, P_BOOL,
391 {"resize_image", "TRUE", &prefs_common.resize_img, P_BOOL,
393 {"inline_image", "TRUE", &prefs_common.inline_img, P_BOOL,
396 {"display_folder_unread_num", "0",
397 &prefs_common.display_folder_unread, P_INT,
399 {"newsgroup_abbrev_len", "16",
400 &prefs_common.ng_abbrev_len, P_INT,
403 {"translate_header", "FALSE", &prefs_common.trans_hdr, P_BOOL,
406 /* Display: Summary View */
407 {"use_address_book", "FALSE", &prefs_common.use_addr_book, P_BOOL,
409 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
411 {"date_format", N_("%y/%m/%d(%a) %H:%M"), &prefs_common.date_format,
412 P_STRING, NULL, NULL, NULL},
414 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
417 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
420 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
423 {"toolbar_style", "1", &prefs_common.toolbar_style, P_ENUM,
426 {"toolbar_detachable", "FALSE", &prefs_common.toolbar_detachable, P_BOOL,
428 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
431 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
434 {"show_searchbar", "FALSE", &prefs_common.show_searchbar, P_BOOL,
438 {"summary_col_show_mark", "TRUE",
439 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
440 {"summary_col_show_unread", "TRUE",
441 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
442 {"summary_col_show_subject", "TRUE",
443 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
444 {"summary_col_show_from", "TRUE",
445 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
446 {"summary_col_show_to", "FALSE",
447 &prefs_common.summary_col_visible[S_COL_TO], P_BOOL, NULL, NULL, NULL},
448 {"summary_col_show_date", "TRUE",
449 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
450 {"summary_col_show_mime", "TRUE",
451 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
452 {"summary_col_show_size", "TRUE",
453 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
454 {"summary_col_show_number", "FALSE",
455 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
456 {"summary_col_show_score", "FALSE",
457 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
458 {"summary_col_show_locked", "FALSE",
459 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
461 {"summary_col_pos_mark", "0",
462 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
463 {"summary_col_pos_unread", "1",
464 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
465 {"summary_col_pos_mime", "2",
466 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
467 {"summary_col_pos_subject", "3",
468 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
469 {"summary_col_pos_from", "4",
470 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
471 {"summary_col_pos_date", "5",
472 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
473 {"summary_col_pos_size", "6",
474 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
475 {"summary_col_pos_number", "7",
476 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
477 {"summary_col_pos_score", "8",
478 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
479 {"summary_col_pos_locked", "9",
480 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
481 {"summary_col_pos_to", "10",
482 &prefs_common.summary_col_pos[S_COL_TO], P_INT, NULL, NULL, NULL},
484 {"summary_col_size_mark", "10",
485 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
486 {"summary_col_size_unread", "13",
487 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
488 {"summary_col_size_mime", "10",
489 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
491 {"summary_col_size_subject", "200",
492 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
493 {"summary_col_size_from", "120",
494 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
495 {"summary_col_size_to", "120",
496 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
498 {"summary_col_size_subject", "300",
499 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
500 {"summary_col_size_from", "150",
501 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
502 {"summary_col_size_to", "150",
503 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
506 {"summary_col_size_date", "118",
507 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
508 {"summary_col_size_size", "45",
509 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
510 {"summary_col_size_number", "40",
511 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
512 {"summary_col_size_score", "40",
513 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
514 {"summary_col_size_locked", "13",
515 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
518 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
520 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
522 {"folderview_width", "270", &prefs_common.folderview_width, P_INT,
524 {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
526 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
529 {"folder_col_show_folder", "TRUE",
530 &prefs_common.folder_col_visible[F_COL_FOLDER], P_BOOL, NULL, NULL, NULL},
531 {"folder_col_show_new", "TRUE",
532 &prefs_common.folder_col_visible[F_COL_NEW], P_BOOL, NULL, NULL, NULL},
533 {"folder_col_show_unread", "TRUE",
534 &prefs_common.folder_col_visible[F_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
535 {"folder_col_show_total", "TRUE",
536 &prefs_common.folder_col_visible[F_COL_TOTAL], P_BOOL, NULL, NULL, NULL},
538 {"folder_col_pos_folder", "0",
539 &prefs_common.folder_col_pos[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
540 {"folder_col_pos_new", "1",
541 &prefs_common.folder_col_pos[F_COL_NEW], P_INT, NULL, NULL, NULL},
542 {"folder_col_pos_unread", "2",
543 &prefs_common.folder_col_pos[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
544 {"folder_col_pos_total", "3",
545 &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
548 {"folder_col_size_folder", "120",
549 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
550 {"folder_col_size_new", "32",
551 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
552 {"folder_col_size_unread", "32",
553 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
554 {"folder_col_size_total", "32",
555 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
557 {"folder_col_size_folder", "400",
558 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
559 {"folder_col_size_new", "32",
560 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
561 {"folder_col_size_unread", "32",
562 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
563 {"folder_col_size_total", "32",
564 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
566 {"summaryview_width", "500", &prefs_common.summaryview_width, P_INT,
568 {"summaryview_height", "244", &prefs_common.summaryview_height, P_INT,
571 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
573 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
575 {"messageview_width", "500", &prefs_common.msgview_width, P_INT,
577 {"messageview_height", "213", &prefs_common.msgview_height, P_INT,
579 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
582 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
584 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
586 {"mainview_width", "500", &prefs_common.mainview_width, P_INT,
588 {"mainview_height", "400", &prefs_common.mainview_height, P_INT,
590 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
592 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
595 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
597 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
599 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
601 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
603 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
605 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
607 {"compose_width", "600", &prefs_common.compose_width, P_INT,
609 {"compose_height", "560", &prefs_common.compose_height, P_INT,
612 {"mainwin_width", "700", &prefs_common.mainwin_width, P_INT,
614 {"mainwin_height", "470", &prefs_common.mainwin_height, P_INT,
616 {"messagewin_width", "700", &prefs_common.msgwin_width, P_INT,
618 {"messagewin_height", "470", &prefs_common.msgwin_height, P_INT,
620 {"sourcewin_width", "700", &prefs_common.sourcewin_width, P_INT,
622 {"sourcewin_height", "470", &prefs_common.sourcewin_height, P_INT,
624 {"compose_width", "700", &prefs_common.compose_width, P_INT,
626 {"compose_height", "470", &prefs_common.compose_height, P_INT,
629 {"compose_x", "0", &prefs_common.compose_x, P_INT,
631 {"compose_y", "0", &prefs_common.compose_y, P_INT,
634 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
637 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
639 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
641 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
643 {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
645 {"quote_level1_bgcolor", "13421772", &prefs_common.quote_level1_bgcol, P_COLOR,
647 {"quote_level2_bgcolor", "13948116", &prefs_common.quote_level2_bgcol, P_COLOR,
649 {"quote_level3_bgcolor", "14540253", &prefs_common.quote_level3_bgcol, P_COLOR,
651 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
653 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
655 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
657 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
658 P_BOOL, NULL, NULL, NULL},
660 {"display_header_pane", "FALSE", &prefs_common.display_header_pane,
661 P_BOOL, NULL, NULL, NULL},
662 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
664 {"display_xface", "TRUE", &prefs_common.display_xface,
665 P_BOOL, NULL, NULL, NULL},
666 {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
668 {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
670 {"line_space", "2", &prefs_common.line_space, P_INT,
672 {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
675 {"enable_smooth_scroll", "FALSE",
676 &prefs_common.enable_smooth_scroll, P_BOOL,
678 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
680 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
682 {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
685 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
688 {"use_different_print_font", "FALSE", &prefs_common.use_different_print_font, P_BOOL,
691 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
693 {"attach_save_directory", NULL,
694 &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
695 {"attach_load_directory", NULL,
696 &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
699 {"mime_textviewer", NULL,
700 &SPECIFIC_PREFS.mime_textviewer, P_STRING, NULL, NULL, NULL},
701 {"mime_open_command", "gedit '%s'",
702 &SPECIFIC_PREFS.mime_open_cmd, P_STRING, NULL, NULL, NULL},
706 {"layout_mode", "0", &prefs_common.layout_mode, P_INT,
709 {"layout_mode", "5", &prefs_common.layout_mode, P_INT,
712 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
713 NULL, NULL, NULL}, */
714 {"always_show_message_when_selected", "FALSE",
715 &prefs_common.always_show_msg,
716 P_BOOL, NULL, NULL, NULL},
717 {"select_on_entry", "2", &prefs_common.select_on_entry,
718 P_ENUM, NULL, NULL, NULL},
719 {"mark_as_read_on_new_window", "FALSE",
720 &prefs_common.mark_as_read_on_new_window,
721 P_BOOL, NULL, NULL, NULL},
722 {"mark_as_read_delay", "0",
723 &prefs_common.mark_as_read_delay, P_INT,
725 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
727 {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
730 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
731 &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
734 {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
737 {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
739 {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
743 {"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog,
744 P_BOOL, NULL, NULL, NULL},
745 {"addressbook_hpaned_pos", "-1", &prefs_common.addressbook_hpaned_pos,
746 P_INT, NULL, NULL, NULL},
747 {"addressbook_vpaned_pos", "-1", &prefs_common.addressbook_vpaned_pos,
748 P_INT, NULL, NULL, NULL},
751 {"uri_open_command", DEFAULT_BROWSER_CMD,
752 &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
753 {"print_command", "lpr %s",
754 &SPECIFIC_PREFS.print_cmd, P_STRING, NULL, NULL, NULL},
755 {"ext_editor_command", DEFAULT_EDITOR_CMD,
756 &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
757 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
758 P_BOOL, NULL, NULL, NULL},
759 {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
761 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
763 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
765 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
766 P_BOOL, NULL, NULL, NULL},
767 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
769 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
772 {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
775 {"summary_quicksearch_recurse", "0", &prefs_common.summary_quicksearch_recurse, P_INT,
779 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
780 P_INT, NULL, NULL, NULL},
781 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
783 {"important_score", "1", &prefs_common.important_score, P_INT,
786 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
788 {"log_length", "500", &prefs_common.loglength, P_INT,
791 {"log_msg_color", "#00af00", &prefs_common.log_msg_color, P_COLOR,
793 {"log_warn_color", "#af0000", &prefs_common.log_warn_color, P_COLOR,
795 {"log_error_color", "#af0000", &prefs_common.log_error_color, P_COLOR,
797 {"log_in_color", "#000000", &prefs_common.log_in_color, P_COLOR,
799 {"log_out_color", "#0000ef", &prefs_common.log_out_color, P_COLOR,
801 {"log_status_ok_color", "#00af00", &prefs_common.log_status_ok_color, P_COLOR,
803 {"log_status_nok_color", "#0000af", &prefs_common.log_status_nok_color, P_COLOR,
805 {"log_status_skip_color", "#aa00aa", &prefs_common.log_status_skip_color, P_COLOR,
808 {"enable_filtering_debug", "FALSE", &prefs_common.enable_filtering_debug, P_BOOL,
810 {"filtering_debug_level", "1", &prefs_common.filtering_debug_level, P_INT,
812 {"enable_filtering_debug_inc", "TRUE", &prefs_common.enable_filtering_debug_inc, P_BOOL,
814 {"enable_filtering_debug_manual", "TRUE", &prefs_common.enable_filtering_debug_manual, P_BOOL,
816 {"enable_filtering_debug_folder_proc", "FALSE", &prefs_common.enable_filtering_debug_folder_proc, P_BOOL,
818 {"enable_filtering_debug_pre_proc", "FALSE", &prefs_common.enable_filtering_debug_pre_proc, P_BOOL,
820 {"enable_filtering_debug_post_proc", "FALSE", &prefs_common.enable_filtering_debug_post_proc, P_BOOL,
822 {"filtering_debug_clip_log", "TRUE", &prefs_common.filtering_debug_cliplog, P_BOOL,
824 {"filtering_debug_log_length", "500", &prefs_common.filtering_debug_loglength, P_INT,
827 {"gtk_can_change_accels", "TRUE", &prefs_common.gtk_can_change_accels, P_BOOL,
830 {"color_new", "179", &prefs_common.color_new, P_COLOR,
833 /* Some windows' sizes */
834 {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
836 {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
839 {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
841 {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
844 {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
846 {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
849 {"templateswin_width", "480", &prefs_common.templateswin_width, P_INT,
851 {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
854 {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
856 {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
859 {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
861 {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
864 {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
866 {"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT,
869 {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
871 {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
874 {"pluginswin_width", "-1", &prefs_common.pluginswin_width, P_INT,
876 {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
879 {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
881 {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
884 {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
886 {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
889 {"zero_replacement_char", "0", &prefs_common.zero_replacement, P_STRING,
892 {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
894 {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
897 {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
899 {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
902 {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
904 {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
907 {"filtering_debugwin_width", "600", &prefs_common.filtering_debugwin_width, P_INT,
909 {"filtering_debugwin_height", "-1", &prefs_common.filtering_debugwin_height, P_INT,
912 {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
914 {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
917 {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
919 {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
922 {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
924 {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
928 {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
930 {"utf8_instead_of_locale_for_broken_mail", "0",
931 &prefs_common.broken_are_utf8, P_INT,
933 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
935 {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
937 {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
939 {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
941 {"enable_dotted_lines", "FALSE", &prefs_common.enable_dotted_lines, P_BOOL,
943 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
945 {"folderview_vscrollbar_policy", "0",
946 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
948 {"textview_cursor_visible", "FALSE",
949 &prefs_common.textview_cursor_visible, P_BOOL,
951 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
954 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
956 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
959 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
961 {"cache_min_keep_time", "0", &prefs_common.cache_min_keep_time, P_INT,
964 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
965 P_INT, NULL, NULL, NULL },
966 {"last_opened_folder", "", &prefs_common.last_opened_folder,
967 P_STRING, NULL, NULL, NULL },
968 {"goto_last_folder_on_startup", "FALSE", &prefs_common.goto_last_folder_on_startup,
969 P_BOOL, NULL, NULL, NULL },
970 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
972 {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
974 {"summary_quicksearch_autorun", "0", &prefs_common.summary_quicksearch_autorun, P_INT,
976 {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
978 {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
980 {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
982 {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
984 {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
986 {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
989 {"real_time_sync", "FALSE", &prefs_common.real_time_sync, P_BOOL,
992 {"real_time_sync", "TRUE", &prefs_common.real_time_sync, P_BOOL,
995 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
998 PrefsCommon *prefs_common_get(void)
1000 return &prefs_common;
1004 * Read history list from the specified history file
1006 static GList *prefs_common_read_history(const gchar *history)
1010 gchar buf[PREFSBUFSIZE];
1013 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1015 if ((fp = g_fopen(path, "rb")) == NULL) {
1016 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
1021 while (fgets(buf, sizeof(buf), fp) != NULL) {
1023 if (buf[0] == '\0') continue;
1024 tmp = add_history(tmp, buf);
1028 tmp = g_list_reverse(tmp);
1033 void prefs_common_read_config(void)
1038 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
1039 prefs_read_config(param, "Common", rcpath, NULL);
1041 prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
1046 tmp = g_strdup(gettext(prefs_common.quotefmt));
1047 g_free(prefs_common.quotefmt);
1048 prefs_common.quotefmt = tmp;
1050 tmp = g_strdup(gettext(prefs_common.fw_quotefmt));
1051 g_free(prefs_common.fw_quotefmt);
1052 prefs_common.fw_quotefmt = tmp;
1054 tmp = g_strdup(gettext(prefs_common.date_format));
1055 g_free(prefs_common.date_format);
1056 prefs_common.date_format = tmp;
1058 tmp = g_strdup(gettext(prefs_common.compose_body_format));
1059 g_free(prefs_common.compose_body_format);
1060 prefs_common.compose_body_format = tmp;
1062 prefs_common.mime_open_cmd_history =
1063 prefs_common_read_history(COMMAND_HISTORY);
1064 prefs_common.summary_quicksearch_history =
1065 prefs_common_read_history(QUICKSEARCH_HISTORY);
1066 prefs_common.summary_search_from_history =
1067 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
1068 prefs_common.summary_search_to_history =
1069 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
1070 prefs_common.summary_search_subject_history =
1071 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
1072 prefs_common.summary_search_body_history =
1073 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
1074 prefs_common.summary_search_adv_condition_history =
1075 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
1076 prefs_common.message_search_history =
1077 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
1079 colorlabel_update_colortable_from_prefs();
1085 g_warning("failed to write\n"); \
1090 * Save history list to the specified history file
1092 static void prefs_common_save_history(const gchar *history, GList *list)
1096 gchar *path, *tmp_path;
1098 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1100 tmp_path = g_strconcat(path, ".tmp", NULL);
1102 if ((fp = g_fopen(tmp_path, "wb")) == NULL) {
1103 FILE_OP_ERROR(tmp_path, "fopen");
1107 for (cur = list; cur != NULL; cur = cur->next) {
1108 TRY(fputs((gchar *)cur->data, fp) != EOF &&
1109 fputc('\n', fp) != EOF);
1112 if (fclose(fp) == EOF) {
1113 FILE_OP_ERROR(tmp_path, "fclose");
1121 if (g_rename(tmp_path, path) < 0) {
1122 FILE_OP_ERROR(path, "rename");
1135 void prefs_common_write_config(void)
1137 prefs_write_config(param, "Common", COMMON_RC);
1139 prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
1142 prefs_common_save_history(COMMAND_HISTORY,
1143 prefs_common.mime_open_cmd_history);
1144 prefs_common_save_history(QUICKSEARCH_HISTORY,
1145 prefs_common.summary_quicksearch_history);
1146 prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY,
1147 prefs_common.summary_search_from_history);
1148 prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY,
1149 prefs_common.summary_search_to_history);
1150 prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY,
1151 prefs_common.summary_search_subject_history);
1152 prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY,
1153 prefs_common.summary_search_body_history);
1154 prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY,
1155 prefs_common.summary_search_adv_condition_history);
1156 prefs_common_save_history(MESSAGE_SEARCH_HISTORY,
1157 prefs_common.message_search_history);
1160 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
1161 both 'in' and 'out' must be non-NULL.
1162 'out' must be a pointer to a buffer whose size is at least equal
1163 to strlen(txt)+1, this buffer will get cleared. out's contents
1164 will always get set to a valid string, even if it's "".*/
1165 void pref_get_unescaped_pref(gchar *out, const gchar *in)
1172 g_return_if_fail( in != NULL );
1173 g_return_if_fail( out != NULL );
1177 memset(out, 0, strlen(in)+1);
1178 while (*i != '\0') {
1179 if (*i == '\\' && *(i+1) == 'n') {
1182 } else if (*i == '\\' && *(i+1) == 't') {
1185 } else if (*i == '\\' && *(i+1) == '\\') {
1196 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1197 both 'in' and 'out' must be non-NULL.
1198 'out' must be a pointer to a buffer whose size is at least equal
1199 to 2*strlen(txt)+1. out's contents will always get set to a valid
1200 string, even if it's "". */
1201 void pref_get_escaped_pref(gchar *out, const gchar *in)
1208 g_return_if_fail( in != NULL );
1209 g_return_if_fail( out != NULL );
1213 while (*i != '\0') {
1217 } else if (*i == '\t') {
1220 } else if (*i == '\\') {
1231 /* set the contents of a textview widget from the internal \-escaped
1232 representation of a pref string. both txt and textview must be non-NULL. */
1233 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1235 GtkTextBuffer *buffer;
1238 g_return_if_fail( txt != NULL );
1239 g_return_if_fail( textview != NULL );
1241 buffer = gtk_text_view_get_buffer(textview);
1242 out = malloc(strlen(txt)+1);
1244 pref_get_unescaped_pref(out, txt);
1246 gtk_text_buffer_set_text(buffer, out?out:"", -1);
1250 /* set the contents of a gtkentry widget from the internal \-escaped
1251 representation of a pref string. both txt and entry must be non-NULL. */
1252 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1256 g_return_if_fail( txt != NULL );
1257 g_return_if_fail( entry != NULL );
1259 out = malloc(strlen(txt)+1);
1261 pref_get_unescaped_pref(out, txt);
1263 gtk_entry_set_text(entry, out?out:"");
1267 /* get the \-escaped internal representation of a pref from the contents of
1268 a textview widget. textview must be non-NULL. */
1269 gchar *pref_get_pref_from_textview(GtkTextView *textview)
1271 GtkTextBuffer *buffer;
1272 GtkTextIter start, end;
1275 g_return_val_if_fail( textview != NULL, "" );
1277 buffer = gtk_text_view_get_buffer(textview);
1278 gtk_text_buffer_get_start_iter(buffer, &start);
1279 gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1280 tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1281 out = malloc(2*strlen(tmp)+1);
1283 pref_get_escaped_pref(out, tmp);
1289 /* get the \-escaped internal representation of a pref from the contents of
1290 a gtkentry widget. entry must be non-NULL. */
1291 gchar *pref_get_pref_from_entry(GtkEntry *entry)
1295 g_return_val_if_fail( entry != NULL, "" );
1297 tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1298 out = malloc(2*strlen(tmp)+1);
1300 pref_get_escaped_pref(out, tmp);
1306 /* ugly hack to be able to get this pref from ssl_certificate.c */
1307 gboolean prefs_common_unsafe_ssl_certs(void)
1309 return prefs_common.unsafe_ssl_certs;
1313 return the translated name of a header, if the translate_header option is
1314 set, otherwise return the untranslated header name (header_name itself).
1315 this function is provided for convenience, it's an interface to
1316 prefs_common.trans_hdr.
1317 works with header names either with or without trailing colon, provided
1318 that gettext found such header name in the sources (they should all be
1319 found in src/gtk/headers.h anyway).
1321 const gchar *prefs_common_translated_header_name(const gchar *header_name)
1323 if (header_name == NULL || *header_name == '\0')
1326 return prefs_common.trans_hdr ? gettext(header_name) : header_name;