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 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/>.
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,
429 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
431 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
434 {"show_statusbar", "FALSE", &prefs_common.show_statusbar, P_BOOL,
436 {"show_searchbar", "FALSE", &prefs_common.show_searchbar, P_BOOL,
440 {"summary_col_show_mark", "TRUE",
441 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
442 {"summary_col_show_unread", "TRUE",
443 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
444 {"summary_col_show_subject", "TRUE",
445 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
446 {"summary_col_show_from", "TRUE",
447 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
448 {"summary_col_show_to", "FALSE",
449 &prefs_common.summary_col_visible[S_COL_TO], P_BOOL, NULL, NULL, NULL},
450 {"summary_col_show_date", "TRUE",
451 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
452 {"summary_col_show_mime", "TRUE",
453 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
454 {"summary_col_show_size", "TRUE",
455 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
456 {"summary_col_show_number", "FALSE",
457 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
458 {"summary_col_show_score", "FALSE",
459 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
460 {"summary_col_show_locked", "FALSE",
461 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
462 {"summary_col_show_tags", "FALSE",
463 &prefs_common.summary_col_visible[S_COL_TAGS], P_BOOL, NULL, NULL, NULL},
465 {"summary_col_pos_mark", "0",
466 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
467 {"summary_col_pos_unread", "1",
468 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
469 {"summary_col_pos_mime", "2",
470 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
471 {"summary_col_pos_subject", "3",
472 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
473 {"summary_col_pos_from", "4",
474 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
475 {"summary_col_pos_date", "5",
476 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
477 {"summary_col_pos_size", "6",
478 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
479 {"summary_col_pos_number", "7",
480 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
481 {"summary_col_pos_score", "8",
482 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
483 {"summary_col_pos_locked", "9",
484 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
485 {"summary_col_pos_to", "10",
486 &prefs_common.summary_col_pos[S_COL_TO], P_INT, NULL, NULL, NULL},
487 {"summary_col_pos_tags", "11",
488 &prefs_common.summary_col_pos[S_COL_TAGS], P_INT, NULL, NULL, NULL},
490 {"summary_col_size_mark", "10",
491 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
492 {"summary_col_size_unread", "13",
493 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
494 {"summary_col_size_mime", "10",
495 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
497 {"summary_col_size_subject", "200",
498 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
499 {"summary_col_size_from", "120",
500 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
501 {"summary_col_size_to", "120",
502 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
504 {"summary_col_size_subject", "300",
505 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
506 {"summary_col_size_from", "150",
507 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
508 {"summary_col_size_to", "150",
509 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
512 {"summary_col_size_date", "118",
513 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
514 {"summary_col_size_size", "45",
515 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
516 {"summary_col_size_number", "40",
517 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
518 {"summary_col_size_score", "40",
519 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
520 {"summary_col_size_locked", "13",
521 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
522 {"summary_col_size_tags", "150",
523 &prefs_common.summary_col_size[S_COL_TAGS], P_INT, NULL, NULL, NULL},
526 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
528 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
530 {"folderview_width", "270", &prefs_common.folderview_width, P_INT,
532 {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
534 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
537 {"folder_col_show_folder", "TRUE",
538 &prefs_common.folder_col_visible[F_COL_FOLDER], P_BOOL, NULL, NULL, NULL},
539 {"folder_col_show_new", "TRUE",
540 &prefs_common.folder_col_visible[F_COL_NEW], P_BOOL, NULL, NULL, NULL},
541 {"folder_col_show_unread", "TRUE",
542 &prefs_common.folder_col_visible[F_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
543 {"folder_col_show_total", "TRUE",
544 &prefs_common.folder_col_visible[F_COL_TOTAL], P_BOOL, NULL, NULL, NULL},
546 {"folder_col_pos_folder", "0",
547 &prefs_common.folder_col_pos[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
548 {"folder_col_pos_new", "1",
549 &prefs_common.folder_col_pos[F_COL_NEW], P_INT, NULL, NULL, NULL},
550 {"folder_col_pos_unread", "2",
551 &prefs_common.folder_col_pos[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
552 {"folder_col_pos_total", "3",
553 &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
556 {"folder_col_size_folder", "120",
557 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
558 {"folder_col_size_new", "32",
559 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
560 {"folder_col_size_unread", "32",
561 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
562 {"folder_col_size_total", "32",
563 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
565 {"folder_col_size_folder", "400",
566 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
567 {"folder_col_size_new", "32",
568 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
569 {"folder_col_size_unread", "32",
570 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
571 {"folder_col_size_total", "32",
572 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
574 {"summaryview_width", "500", &prefs_common.summaryview_width, P_INT,
576 {"summaryview_height", "244", &prefs_common.summaryview_height, P_INT,
579 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
581 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
583 {"messageview_width", "500", &prefs_common.msgview_width, P_INT,
585 {"messageview_height", "213", &prefs_common.msgview_height, P_INT,
587 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
590 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
592 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
594 {"mainview_width", "500", &prefs_common.mainview_width, P_INT,
596 {"mainview_height", "400", &prefs_common.mainview_height, P_INT,
598 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
600 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
603 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
605 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
607 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
609 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
611 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
613 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
615 {"compose_width", "600", &prefs_common.compose_width, P_INT,
617 {"compose_height", "560", &prefs_common.compose_height, P_INT,
620 {"mainwin_width", "700", &prefs_common.mainwin_width, P_INT,
622 {"mainwin_height", "470", &prefs_common.mainwin_height, P_INT,
624 {"messagewin_width", "700", &prefs_common.msgwin_width, P_INT,
626 {"messagewin_height", "470", &prefs_common.msgwin_height, P_INT,
628 {"sourcewin_width", "700", &prefs_common.sourcewin_width, P_INT,
630 {"sourcewin_height", "470", &prefs_common.sourcewin_height, P_INT,
632 {"compose_width", "700", &prefs_common.compose_width, P_INT,
634 {"compose_height", "470", &prefs_common.compose_height, P_INT,
637 {"compose_x", "0", &prefs_common.compose_x, P_INT,
639 {"compose_y", "0", &prefs_common.compose_y, P_INT,
642 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
645 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
647 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
649 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
651 {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
653 {"quote_level1_bgcolor", "13421772", &prefs_common.quote_level1_bgcol, P_COLOR,
655 {"quote_level2_bgcolor", "13948116", &prefs_common.quote_level2_bgcol, P_COLOR,
657 {"quote_level3_bgcolor", "14540253", &prefs_common.quote_level3_bgcol, P_COLOR,
659 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
661 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
663 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
665 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
666 P_BOOL, NULL, NULL, NULL},
668 {"display_header_pane", "FALSE", &prefs_common.display_header_pane,
669 P_BOOL, NULL, NULL, NULL},
670 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
672 {"display_xface", "TRUE", &prefs_common.display_xface,
673 P_BOOL, NULL, NULL, NULL},
674 {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
676 {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
678 {"line_space", "2", &prefs_common.line_space, P_INT,
680 {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
683 {"enable_smooth_scroll", "FALSE",
684 &prefs_common.enable_smooth_scroll, P_BOOL,
686 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
688 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
690 {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
693 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
696 {"use_different_print_font", "FALSE", &prefs_common.use_different_print_font, P_BOOL,
699 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
701 {"attach_save_directory", NULL,
702 &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
703 {"attach_load_directory", NULL,
704 &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
707 {"mime_textviewer", NULL,
708 &SPECIFIC_PREFS.mime_textviewer, P_STRING, NULL, NULL, NULL},
709 {"mime_open_command", "gedit '%s'",
710 &SPECIFIC_PREFS.mime_open_cmd, P_STRING, NULL, NULL, NULL},
714 {"layout_mode", "0", &prefs_common.layout_mode, P_INT,
717 {"layout_mode", "5", &prefs_common.layout_mode, P_INT,
720 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
721 NULL, NULL, NULL}, */
722 {"always_show_message_when_selected", "FALSE",
723 &prefs_common.always_show_msg,
724 P_BOOL, NULL, NULL, NULL},
725 {"select_on_entry", "3", &prefs_common.select_on_entry,
726 P_ENUM, NULL, NULL, NULL},
728 {"summary_select_prio1", "0", &prefs_common.summary_select_prio[0], P_ENUM,
730 {"summary_select_prio2", "0", &prefs_common.summary_select_prio[1], P_ENUM,
732 {"summary_select_prio3", "0", &prefs_common.summary_select_prio[2], P_ENUM,
734 {"summary_select_prio4", "0", &prefs_common.summary_select_prio[3], P_ENUM,
736 {"summary_select_prio5", "0", &prefs_common.summary_select_prio[4], P_ENUM,
738 {"summary_select_prio6", "0", &prefs_common.summary_select_prio[5], P_ENUM,
741 {"mark_as_read_on_new_window", "FALSE",
742 &prefs_common.mark_as_read_on_new_window,
743 P_BOOL, NULL, NULL, NULL},
744 {"mark_as_read_delay", "0",
745 &prefs_common.mark_as_read_delay, P_INT,
747 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
749 {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
752 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
753 &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
756 {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
759 {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
761 {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
765 {"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog,
766 P_BOOL, NULL, NULL, NULL},
767 {"addressbook_hpaned_pos", "-1", &prefs_common.addressbook_hpaned_pos,
768 P_INT, NULL, NULL, NULL},
769 {"addressbook_vpaned_pos", "-1", &prefs_common.addressbook_vpaned_pos,
770 P_INT, NULL, NULL, NULL},
773 {"uri_open_command", DEFAULT_BROWSER_CMD,
774 &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
775 {"print_command", "lpr %s",
776 &SPECIFIC_PREFS.print_cmd, P_STRING, NULL, NULL, NULL},
777 {"ext_editor_command", DEFAULT_EDITOR_CMD,
778 &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
779 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
780 P_BOOL, NULL, NULL, NULL},
781 {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
783 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
785 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
787 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
788 P_BOOL, NULL, NULL, NULL},
789 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
791 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
794 {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
797 {"summary_quicksearch_recurse", "0", &prefs_common.summary_quicksearch_recurse, P_INT,
801 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
802 P_INT, NULL, NULL, NULL},
803 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
805 {"important_score", "1", &prefs_common.important_score, P_INT,
808 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
810 {"log_length", "500", &prefs_common.loglength, P_INT,
813 {"log_msg_color", "#00af00", &prefs_common.log_msg_color, P_COLOR,
815 {"log_warn_color", "#af0000", &prefs_common.log_warn_color, P_COLOR,
817 {"log_error_color", "#af0000", &prefs_common.log_error_color, P_COLOR,
819 {"log_in_color", "#000000", &prefs_common.log_in_color, P_COLOR,
821 {"log_out_color", "#0000ef", &prefs_common.log_out_color, P_COLOR,
823 {"log_status_ok_color", "#00af00", &prefs_common.log_status_ok_color, P_COLOR,
825 {"log_status_nok_color", "#0000af", &prefs_common.log_status_nok_color, P_COLOR,
827 {"log_status_skip_color", "#aa00aa", &prefs_common.log_status_skip_color, P_COLOR,
830 {"enable_filtering_debug", "FALSE", &prefs_common.enable_filtering_debug, P_BOOL,
832 {"filtering_debug_level", "1", &prefs_common.filtering_debug_level, P_INT,
834 {"enable_filtering_debug_inc", "TRUE", &prefs_common.enable_filtering_debug_inc, P_BOOL,
836 {"enable_filtering_debug_manual", "TRUE", &prefs_common.enable_filtering_debug_manual, P_BOOL,
838 {"enable_filtering_debug_folder_proc", "FALSE", &prefs_common.enable_filtering_debug_folder_proc, P_BOOL,
840 {"enable_filtering_debug_pre_proc", "FALSE", &prefs_common.enable_filtering_debug_pre_proc, P_BOOL,
842 {"enable_filtering_debug_post_proc", "FALSE", &prefs_common.enable_filtering_debug_post_proc, P_BOOL,
844 {"filtering_debug_clip_log", "TRUE", &prefs_common.filtering_debug_cliplog, P_BOOL,
846 {"filtering_debug_log_length", "500", &prefs_common.filtering_debug_loglength, P_INT,
849 {"gtk_can_change_accels", "TRUE", &prefs_common.gtk_can_change_accels, P_BOOL,
852 {"color_new", "179", &prefs_common.color_new, P_COLOR,
855 /* Some windows' sizes */
856 {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
858 {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
861 {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
863 {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
866 {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
868 {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
871 {"templateswin_width", "480", &prefs_common.templateswin_width, P_INT,
873 {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
876 {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
878 {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
881 {"tagswin_width", "486", &prefs_common.tagswin_width, P_INT,
883 {"tagswin_height", "-1", &prefs_common.tagswin_height, P_INT,
886 {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
888 {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
891 {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
893 {"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT,
896 {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
898 {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
901 {"pluginswin_width", "-1", &prefs_common.pluginswin_width, P_INT,
903 {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
906 {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
908 {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
911 {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
913 {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
916 {"zero_replacement_char", "0", &prefs_common.zero_replacement, P_STRING,
919 {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
921 {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
924 {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
926 {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
929 {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
931 {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
934 {"filtering_debugwin_width", "600", &prefs_common.filtering_debugwin_width, P_INT,
936 {"filtering_debugwin_height", "-1", &prefs_common.filtering_debugwin_height, P_INT,
939 {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
941 {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
944 {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
946 {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
949 {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
951 {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
955 {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
957 {"utf8_instead_of_locale_for_broken_mail", "0",
958 &prefs_common.broken_are_utf8, P_INT,
960 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
962 {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
964 {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
966 {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
968 {"enable_dotted_lines", "FALSE", &prefs_common.enable_dotted_lines, P_BOOL,
970 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
972 {"folderview_vscrollbar_policy", "0",
973 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
975 {"textview_cursor_visible", "FALSE",
976 &prefs_common.textview_cursor_visible, P_BOOL,
978 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
981 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
983 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
986 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
988 {"cache_min_keep_time", "0", &prefs_common.cache_min_keep_time, P_INT,
991 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
992 P_INT, NULL, NULL, NULL },
993 {"last_opened_folder", "", &prefs_common.last_opened_folder,
994 P_STRING, NULL, NULL, NULL },
995 {"goto_last_folder_on_startup", "FALSE", &prefs_common.goto_last_folder_on_startup,
996 P_BOOL, NULL, NULL, NULL },
997 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
999 {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
1001 {"summary_quicksearch_autorun", "0", &prefs_common.summary_quicksearch_autorun, P_INT,
1003 {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
1005 {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
1007 {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
1009 {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
1011 {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
1013 {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
1016 {"real_time_sync", "FALSE", &prefs_common.real_time_sync, P_BOOL,
1019 {"real_time_sync", "TRUE", &prefs_common.real_time_sync, P_BOOL,
1022 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
1025 PrefsCommon *prefs_common_get(void)
1027 return &prefs_common;
1031 * Read history list from the specified history file
1033 static GList *prefs_common_read_history(const gchar *history)
1037 gchar buf[PREFSBUFSIZE];
1040 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1042 if ((fp = g_fopen(path, "rb")) == NULL) {
1043 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
1048 while (fgets(buf, sizeof(buf), fp) != NULL) {
1050 if (buf[0] == '\0') continue;
1051 tmp = add_history(tmp, buf);
1055 tmp = g_list_reverse(tmp);
1060 void prefs_common_read_config(void)
1065 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
1066 prefs_read_config(param, "Common", rcpath, NULL);
1068 prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
1073 tmp = g_strdup(gettext(prefs_common.quotefmt));
1074 g_free(prefs_common.quotefmt);
1075 prefs_common.quotefmt = tmp;
1077 tmp = g_strdup(gettext(prefs_common.fw_quotefmt));
1078 g_free(prefs_common.fw_quotefmt);
1079 prefs_common.fw_quotefmt = tmp;
1081 tmp = g_strdup(gettext(prefs_common.date_format));
1082 g_free(prefs_common.date_format);
1083 prefs_common.date_format = tmp;
1085 tmp = g_strdup(gettext(prefs_common.compose_body_format));
1086 g_free(prefs_common.compose_body_format);
1087 prefs_common.compose_body_format = tmp;
1089 prefs_common.mime_open_cmd_history =
1090 prefs_common_read_history(COMMAND_HISTORY);
1091 prefs_common.summary_quicksearch_history =
1092 prefs_common_read_history(QUICKSEARCH_HISTORY);
1093 prefs_common.summary_search_from_history =
1094 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
1095 prefs_common.summary_search_to_history =
1096 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
1097 prefs_common.summary_search_subject_history =
1098 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
1099 prefs_common.summary_search_body_history =
1100 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
1101 prefs_common.summary_search_adv_condition_history =
1102 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
1103 prefs_common.message_search_history =
1104 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
1106 colorlabel_update_colortable_from_prefs();
1112 g_warning("failed to write\n"); \
1117 * Save history list to the specified history file
1119 static void prefs_common_save_history(const gchar *history, GList *list)
1123 gchar *path, *tmp_path;
1125 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1127 tmp_path = g_strconcat(path, ".tmp", NULL);
1129 if ((fp = g_fopen(tmp_path, "wb")) == NULL) {
1130 FILE_OP_ERROR(tmp_path, "fopen");
1134 for (cur = list; cur != NULL; cur = cur->next) {
1135 TRY(fputs((gchar *)cur->data, fp) != EOF &&
1136 fputc('\n', fp) != EOF);
1139 if (fclose(fp) == EOF) {
1140 FILE_OP_ERROR(tmp_path, "fclose");
1148 if (g_rename(tmp_path, path) < 0) {
1149 FILE_OP_ERROR(path, "rename");
1162 void prefs_common_write_config(void)
1164 prefs_write_config(param, "Common", COMMON_RC);
1166 prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
1169 prefs_common_save_history(COMMAND_HISTORY,
1170 prefs_common.mime_open_cmd_history);
1171 prefs_common_save_history(QUICKSEARCH_HISTORY,
1172 prefs_common.summary_quicksearch_history);
1173 prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY,
1174 prefs_common.summary_search_from_history);
1175 prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY,
1176 prefs_common.summary_search_to_history);
1177 prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY,
1178 prefs_common.summary_search_subject_history);
1179 prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY,
1180 prefs_common.summary_search_body_history);
1181 prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY,
1182 prefs_common.summary_search_adv_condition_history);
1183 prefs_common_save_history(MESSAGE_SEARCH_HISTORY,
1184 prefs_common.message_search_history);
1187 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
1188 both 'in' and 'out' must be non-NULL.
1189 'out' must be a pointer to a buffer whose size is at least equal
1190 to strlen(txt)+1, this buffer will get cleared. out's contents
1191 will always get set to a valid string, even if it's "".*/
1192 void pref_get_unescaped_pref(gchar *out, const gchar *in)
1199 g_return_if_fail( in != NULL );
1200 g_return_if_fail( out != NULL );
1204 memset(out, 0, strlen(in)+1);
1205 while (*i != '\0') {
1206 if (*i == '\\' && *(i+1) == 'n') {
1209 } else if (*i == '\\' && *(i+1) == 't') {
1212 } else if (*i == '\\' && *(i+1) == '\\') {
1223 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1224 both 'in' and 'out' must be non-NULL.
1225 'out' must be a pointer to a buffer whose size is at least equal
1226 to 2*strlen(txt)+1. out's contents will always get set to a valid
1227 string, even if it's "". */
1228 void pref_get_escaped_pref(gchar *out, const gchar *in)
1235 g_return_if_fail( in != NULL );
1236 g_return_if_fail( out != NULL );
1240 while (*i != '\0') {
1244 } else if (*i == '\t') {
1247 } else if (*i == '\\') {
1258 /* set the contents of a textview widget from the internal \-escaped
1259 representation of a pref string. both txt and textview must be non-NULL. */
1260 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1262 GtkTextBuffer *buffer;
1265 g_return_if_fail( textview != NULL );
1267 buffer = gtk_text_view_get_buffer(textview);
1270 gtk_text_buffer_set_text(buffer, "", -1);
1272 out = malloc(strlen(txt)+1);
1274 pref_get_unescaped_pref(out, txt);
1276 gtk_text_buffer_set_text(buffer, out?out:"", -1);
1281 /* set the contents of a gtkentry widget from the internal \-escaped
1282 representation of a pref string. both txt and entry must be non-NULL. */
1283 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1287 g_return_if_fail( entry != NULL );
1289 gtk_entry_set_text(entry, "");
1291 out = malloc(strlen(txt)+1);
1293 pref_get_unescaped_pref(out, txt);
1295 gtk_entry_set_text(entry, out?out:"");
1300 /* get the \-escaped internal representation of a pref from the contents of
1301 a textview widget. textview must be non-NULL. */
1302 gchar *pref_get_pref_from_textview(GtkTextView *textview)
1304 GtkTextBuffer *buffer;
1305 GtkTextIter start, end;
1308 g_return_val_if_fail( textview != NULL, "" );
1310 buffer = gtk_text_view_get_buffer(textview);
1311 gtk_text_buffer_get_start_iter(buffer, &start);
1312 gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1313 tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1314 out = malloc(2*strlen(tmp)+1);
1316 pref_get_escaped_pref(out, tmp);
1322 /* get the \-escaped internal representation of a pref from the contents of
1323 a gtkentry widget. entry must be non-NULL. */
1324 gchar *pref_get_pref_from_entry(GtkEntry *entry)
1328 g_return_val_if_fail( entry != NULL, "" );
1330 tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1331 out = malloc(2*strlen(tmp)+1);
1333 pref_get_escaped_pref(out, tmp);
1339 /* ugly hack to be able to get this pref from ssl_certificate.c */
1340 gboolean prefs_common_unsafe_ssl_certs(void)
1342 return prefs_common.unsafe_ssl_certs;
1346 return the translated name of a header, if the translate_header option is
1347 set, otherwise return the untranslated header name (header_name itself).
1348 this function is provided for convenience, it's an interface to
1349 prefs_common.trans_hdr.
1350 works with header names either with or without trailing colon, provided
1351 that gettext found such header name in the sources (they should all be
1352 found in src/gtk/headers.h anyway).
1354 const gchar *prefs_common_translated_header_name(const gchar *header_name)
1356 if (header_name == NULL || *header_name == '\0')
1359 return prefs_common.trans_hdr ? gettext(header_name) : header_name;