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 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
968 {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
970 {"summary_quicksearch_autorun", "0", &prefs_common.summary_quicksearch_autorun, P_INT,
972 {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
974 {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
976 {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
978 {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
980 {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
982 {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
985 {"real_time_sync", "FALSE", &prefs_common.real_time_sync, P_BOOL,
988 {"real_time_sync", "TRUE", &prefs_common.real_time_sync, P_BOOL,
991 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
994 PrefsCommon *prefs_common_get(void)
996 return &prefs_common;
1000 * Read history list from the specified history file
1002 static GList *prefs_common_read_history(const gchar *history)
1006 gchar buf[PREFSBUFSIZE];
1009 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1011 if ((fp = g_fopen(path, "rb")) == NULL) {
1012 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
1017 while (fgets(buf, sizeof(buf), fp) != NULL) {
1019 if (buf[0] == '\0') continue;
1020 tmp = add_history(tmp, buf);
1024 tmp = g_list_reverse(tmp);
1029 void prefs_common_read_config(void)
1034 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
1035 prefs_read_config(param, "Common", rcpath, NULL);
1037 prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
1042 tmp = g_strdup(gettext(prefs_common.quotefmt));
1043 g_free(prefs_common.quotefmt);
1044 prefs_common.quotefmt = tmp;
1046 tmp = g_strdup(gettext(prefs_common.fw_quotefmt));
1047 g_free(prefs_common.fw_quotefmt);
1048 prefs_common.fw_quotefmt = tmp;
1050 tmp = g_strdup(gettext(prefs_common.date_format));
1051 g_free(prefs_common.date_format);
1052 prefs_common.date_format = tmp;
1054 tmp = g_strdup(gettext(prefs_common.compose_body_format));
1055 g_free(prefs_common.compose_body_format);
1056 prefs_common.compose_body_format = tmp;
1058 prefs_common.mime_open_cmd_history =
1059 prefs_common_read_history(COMMAND_HISTORY);
1060 prefs_common.summary_quicksearch_history =
1061 prefs_common_read_history(QUICKSEARCH_HISTORY);
1062 prefs_common.summary_search_from_history =
1063 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
1064 prefs_common.summary_search_to_history =
1065 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
1066 prefs_common.summary_search_subject_history =
1067 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
1068 prefs_common.summary_search_body_history =
1069 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
1070 prefs_common.summary_search_adv_condition_history =
1071 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
1072 prefs_common.message_search_history =
1073 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
1075 colorlabel_update_colortable_from_prefs();
1081 g_warning("failed to write\n"); \
1086 * Save history list to the specified history file
1088 static void prefs_common_save_history(const gchar *history, GList *list)
1092 gchar *path, *tmp_path;
1094 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1096 tmp_path = g_strconcat(path, ".tmp", NULL);
1098 if ((fp = g_fopen(tmp_path, "wb")) == NULL) {
1099 FILE_OP_ERROR(tmp_path, "fopen");
1103 for (cur = list; cur != NULL; cur = cur->next) {
1104 TRY(fputs((gchar *)cur->data, fp) != EOF &&
1105 fputc('\n', fp) != EOF);
1108 if (fclose(fp) == EOF) {
1109 FILE_OP_ERROR(tmp_path, "fclose");
1117 if (g_rename(tmp_path, path) < 0) {
1118 FILE_OP_ERROR(path, "rename");
1131 void prefs_common_write_config(void)
1133 prefs_write_config(param, "Common", COMMON_RC);
1135 prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
1138 prefs_common_save_history(COMMAND_HISTORY,
1139 prefs_common.mime_open_cmd_history);
1140 prefs_common_save_history(QUICKSEARCH_HISTORY,
1141 prefs_common.summary_quicksearch_history);
1142 prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY,
1143 prefs_common.summary_search_from_history);
1144 prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY,
1145 prefs_common.summary_search_to_history);
1146 prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY,
1147 prefs_common.summary_search_subject_history);
1148 prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY,
1149 prefs_common.summary_search_body_history);
1150 prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY,
1151 prefs_common.summary_search_adv_condition_history);
1152 prefs_common_save_history(MESSAGE_SEARCH_HISTORY,
1153 prefs_common.message_search_history);
1156 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
1157 both 'in' and 'out' must be non-NULL.
1158 'out' must be a pointer to a buffer whose size is at least equal
1159 to strlen(txt)+1, this buffer will get cleared. out's contents
1160 will always get set to a valid string, even if it's "".*/
1161 void pref_get_unescaped_pref(gchar *out, const gchar *in)
1168 g_return_if_fail( in != NULL );
1169 g_return_if_fail( out != NULL );
1173 memset(out, 0, strlen(in)+1);
1174 while (*i != '\0') {
1175 if (*i == '\\' && *(i+1) == 'n') {
1178 } else if (*i == '\\' && *(i+1) == 't') {
1181 } else if (*i == '\\' && *(i+1) == '\\') {
1192 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1193 both 'in' and 'out' must be non-NULL.
1194 'out' must be a pointer to a buffer whose size is at least equal
1195 to 2*strlen(txt)+1. out's contents will always get set to a valid
1196 string, even if it's "". */
1197 void pref_get_escaped_pref(gchar *out, const gchar *in)
1204 g_return_if_fail( in != NULL );
1205 g_return_if_fail( out != NULL );
1209 while (*i != '\0') {
1213 } else if (*i == '\t') {
1216 } else if (*i == '\\') {
1227 /* set the contents of a textview widget from the internal \-escaped
1228 representation of a pref string. both txt and textview must be non-NULL. */
1229 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1231 GtkTextBuffer *buffer;
1234 g_return_if_fail( txt != NULL );
1235 g_return_if_fail( textview != NULL );
1237 buffer = gtk_text_view_get_buffer(textview);
1238 out = malloc(strlen(txt)+1);
1240 pref_get_unescaped_pref(out, txt);
1242 gtk_text_buffer_set_text(buffer, out?out:"", -1);
1246 /* set the contents of a gtkentry widget from the internal \-escaped
1247 representation of a pref string. both txt and entry must be non-NULL. */
1248 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1252 g_return_if_fail( txt != NULL );
1253 g_return_if_fail( entry != NULL );
1255 out = malloc(strlen(txt)+1);
1257 pref_get_unescaped_pref(out, txt);
1259 gtk_entry_set_text(entry, out?out:"");
1263 /* get the \-escaped internal representation of a pref from the contents of
1264 a textview widget. textview must be non-NULL. */
1265 gchar *pref_get_pref_from_textview(GtkTextView *textview)
1267 GtkTextBuffer *buffer;
1268 GtkTextIter start, end;
1271 g_return_val_if_fail( textview != NULL, "" );
1273 buffer = gtk_text_view_get_buffer(textview);
1274 gtk_text_buffer_get_start_iter(buffer, &start);
1275 gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1276 tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1277 out = malloc(2*strlen(tmp)+1);
1279 pref_get_escaped_pref(out, tmp);
1285 /* get the \-escaped internal representation of a pref from the contents of
1286 a gtkentry widget. entry must be non-NULL. */
1287 gchar *pref_get_pref_from_entry(GtkEntry *entry)
1291 g_return_val_if_fail( entry != NULL, "" );
1293 tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1294 out = malloc(2*strlen(tmp)+1);
1296 pref_get_escaped_pref(out, tmp);
1302 /* ugly hack to be able to get this pref from ssl_certificate.c */
1303 gboolean prefs_common_unsafe_ssl_certs(void)
1305 return prefs_common.unsafe_ssl_certs;
1309 return the translated name of a header, if the translate_header option is
1310 set, otherwise return the untranslated header name (header_name itself).
1311 this function is provided for convenience, it's an interface to
1312 prefs_common.trans_hdr.
1313 works with header names either with or without trailing colon, provided
1314 that gettext found such header name in the sources (they should all be
1315 found in src/gtk/headers.h anyway).
1317 const gchar *prefs_common_translated_header_name(const gchar *header_name)
1319 if (header_name == NULL || *header_name == '\0')
1322 return prefs_common.trans_hdr ? gettext(header_name) : header_name;