talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

prefs_common.c (43435B)


      1 /*
      2  * Claws Mail -- a GTK based, lightweight, and fast e-mail client
      3  * Copyright (C) 1999-2025 the Claws Mail team and Hiroyuki Yamamoto
      4  *
      5  * This program is free software; you can redistribute it and/or modify
      6  * it under the terms of the GNU General Public License as published by
      7  * the Free Software Foundation; either version 3 of the License, or
      8  * (at your option) any later version.
      9  *
     10  * This program is distributed in the hope that it will be useful,
     11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13  * GNU General Public License for more details.
     14  *
     15  * You should have received a copy of the GNU General Public License
     16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
     17  */
     18 
     19 #include "defs.h"
     20 
     21 #include <glib.h>
     22 #include <glib/gi18n.h>
     23 #include <gtk/gtk.h>
     24 #include <gdk/gdkkeysyms.h>
     25 #include <stdio.h>
     26 #include <stdlib.h>
     27 #include <string.h>
     28 #include <unistd.h>
     29 #include <sys/types.h>
     30 #include <sys/stat.h>
     31 #include <errno.h>
     32 
     33 #include "main.h"
     34 #include "prefs_gtk.h"
     35 #include "prefs_common.h"
     36 #include "prefs_display_header.h"
     37 #include "prefs_summary_column.h"
     38 #include "prefs_folder_column.h"
     39 #include "mainwindow.h"
     40 #include "summaryview.h"
     41 #include "folderview.h"
     42 #include "messageview.h"
     43 #include "manage_window.h"
     44 #include "inc.h"
     45 #include "menu.h"
     46 #include "codeconv.h"
     47 #include "utils.h"
     48 #include "gtkutils.h"
     49 #include "alertpanel.h"
     50 #include "folder.h"
     51 #include "socket.h"
     52 #include "filesel.h"
     53 #include "stock_pixmap.h"
     54 #include "prefswindow.h"
     55 #include "passwordstore.h"
     56 #include "file-utils.h"
     57 
     58 enum {
     59 	DATEFMT_FMT,
     60 	DATEFMT_TXT,
     61 	N_DATEFMT_COLUMNS
     62 };
     63 
     64 PrefsCommon prefs_common;
     65 
     66 GtkWidget *notebook;
     67 
     68 /*
     69    parameter name, default value, pointer to the prefs variable, data type,
     70    pointer to the widget pointer,
     71    pointer to the function for data setting,
     72    pointer to the function for widget setting
     73  */
     74 
     75 static PrefParam param[] = {
     76 	{"config_version", "0",
     77 	 &prefs_common.config_version, P_INT, NULL, NULL, NULL},
     78 
     79 	/* Receive */
     80 	{"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
     81 	 NULL, NULL, NULL},
     82 	{"ext_inc_path", "/usr/bin/mh/inc", &prefs_common.extinc_cmd, P_STRING,
     83 	 NULL, NULL, NULL},
     84 
     85 	{"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
     86 	 P_BOOL, NULL, NULL, NULL},
     87  	{"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
     88 	P_BOOL, NULL, NULL, NULL},
     89  	{"newmail_notify_cmd", "", &prefs_common.newmail_notify_cmd, P_STRING,
     90  	 NULL, NULL, NULL},
     91 	{"receivewin_width", "460", &prefs_common.receivewin_width, P_INT,
     92 	 NULL, NULL, NULL},
     93 	{"receivewin_height", "-1", &prefs_common.receivewin_height, P_INT,
     94 	 NULL, NULL, NULL},
     95 
     96 	/* Send */
     97 	{"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
     98 	 NULL, NULL, NULL},
     99 	{"confirm_send_queued_messages", "FALSE", &prefs_common.confirm_send_queued_messages,
    100 	 P_BOOL, NULL, NULL, NULL},
    101 	{"send_dialog_mode", "0", &prefs_common.send_dialog_invisible, P_BOOL,
    102 	 NULL, NULL, NULL},
    103 	{"sendwin_width", "460", &prefs_common.sendwin_width, P_INT,
    104 	 NULL, NULL, NULL},
    105 	{"sendwin_height", "-1", &prefs_common.sendwin_height, P_INT,
    106 	 NULL, NULL, NULL},
    107 
    108 	{"outgoing_charset", CS_UTF_8, &prefs_common.outgoing_charset, P_STRING,
    109 	 NULL, NULL, NULL},
    110 	{"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
    111 	 NULL, NULL, NULL},
    112 	{"outgoing_fallback_to_ascii", "TRUE", &prefs_common.outgoing_fallback_to_ascii, P_BOOL,
    113 	 NULL, NULL, NULL},
    114 	 {"rewrite_first_from", "TRUE", &prefs_common.rewrite_first_from,
    115 	  P_BOOL, NULL, NULL, NULL},
    116 	{"warn_empty_subj", "TRUE", &prefs_common.warn_empty_subj,
    117 	 P_BOOL, NULL, NULL, NULL},
    118 	{"warn_sending_many_recipients_num", "0", &prefs_common.warn_sending_many_recipients_num, P_INT,
    119 	 NULL, NULL, NULL},
    120 	{"hide_timezone", "FALSE", &prefs_common.hide_timezone,
    121 	 P_BOOL, NULL, NULL, NULL},
    122 	{"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
    123 	 P_BOOL, NULL, NULL, NULL},
    124 
    125 	/* Compose */
    126 	{"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
    127 	 NULL, NULL, NULL},
    128 	{"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
    129 	 P_BOOL, NULL, NULL, NULL},
    130 	{"redirect_keep_from", "FALSE",
    131 	 &prefs_common.redirect_keep_from, P_BOOL,
    132 	 NULL, NULL, NULL},
    133 	{"undo_level", "50", &prefs_common.undolevels, P_INT,
    134 	 NULL, NULL, NULL},
    135 	{"compose_with_format", "FALSE", &prefs_common.compose_with_format, P_BOOL,
    136 	 NULL, NULL, NULL},
    137 	{"compose_subject_format", "",
    138 	 &prefs_common.compose_subject_format, P_STRING, NULL, NULL, NULL},
    139 	{"compose_body_format", N_("Hello,\\n"),
    140 	 &prefs_common.compose_body_format, P_STRING, NULL, NULL, NULL},
    141 	{"type_any_header", "FALSE", &prefs_common.type_any_header, P_BOOL,
    142 	 NULL, NULL, NULL},
    143 	{"notify_pasted_attachments", "TRUE", &prefs_common.notify_pasted_attachments, P_BOOL,
    144 	 NULL, NULL, NULL},
    145 
    146 	{"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
    147 	 NULL, NULL, NULL},
    148 	{"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
    149 	 NULL, NULL, NULL},
    150 	{"primary_paste_unselects", "FALSE", &prefs_common.primary_paste_unselects, P_BOOL,
    151 	 NULL, NULL, NULL},
    152 	{"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
    153 	 NULL, NULL, NULL},
    154 	{"auto_indent", "TRUE", &prefs_common.auto_indent, P_BOOL,
    155 	 NULL, NULL, NULL},
    156         {"autosave", "TRUE", &prefs_common.autosave,
    157 	 P_BOOL, NULL, NULL, NULL},
    158         {"autosave_length", "50", &prefs_common.autosave_length, P_INT,
    159 	 NULL, NULL, NULL},
    160         {"warn_large_insert", "TRUE", &prefs_common.warn_large_insert,
    161 	 P_BOOL, NULL, NULL, NULL},
    162         {"warn_large_insert_size", "500", &prefs_common.warn_large_insert_size,
    163 	 P_INT, NULL, NULL, NULL},
    164 
    165 	{"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
    166 	 NULL, NULL, NULL},
    167 	{"compose_dnd_insert_or_attach", "0", &prefs_common.compose_dnd_mode, P_ENUM,
    168 	 NULL, NULL, NULL},
    169 
    170 	/* Account autoselection */
    171 	{"reply_account_autoselect", "TRUE",
    172 	 &prefs_common.reply_account_autosel, P_BOOL,
    173 	 NULL, NULL, NULL},
    174 	{"forward_account_autoselect", "TRUE",
    175 	 &prefs_common.forward_account_autosel, P_BOOL,
    176 	 NULL, NULL, NULL},
    177 	{"reedit_account_autoselect", "TRUE",
    178 	 &prefs_common.reedit_account_autosel, P_BOOL,
    179 	 NULL, NULL, NULL},
    180 
    181 	{"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
    182 	 NULL, NULL, NULL},
    183 
    184 	{"reply_quote_format", N_("On %d\\n%f wrote:\\n\\n%q\\n%X"),
    185 	 &prefs_common.quotefmt, P_STRING, NULL, NULL, NULL},
    186 
    187 	{"forward_quote_format",
    188 	 N_("\\n\\nBegin forwarded message:\\n\\n"
    189  	 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
    190  	 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M"),
    191 	 &prefs_common.fw_quotefmt, P_STRING,
    192 	 NULL, NULL, NULL},
    193 	{"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
    194 	 NULL, NULL, NULL},
    195 
    196 	{"display_folder_unread_num", "0",
    197 	 &prefs_common.display_folder_unread, P_INT,
    198 	 NULL, NULL, NULL},
    199 
    200 	/* Display: Summary View */
    201 	{"default_sort_key", "3", &prefs_common.default_sort_key, P_ENUM,
    202 	 NULL, NULL, NULL},
    203 	{"default_sort_type", "1", &prefs_common.default_sort_type, P_ENUM,
    204 	 NULL, NULL, NULL},
    205 	{"use_address_book", "FALSE", &prefs_common.use_addr_book, P_BOOL,
    206 	 NULL, NULL, NULL},
    207 	{"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
    208 	 NULL, NULL, NULL},
    209 	{"date_format", N_("%x(%a) %H:%M"), &prefs_common.date_format,
    210 	 P_STRING, NULL, NULL, NULL},
    211 	{"msgview_date_format", "FALSE", &prefs_common.msgview_date_format, P_BOOL,
    212 	 NULL, NULL, NULL},
    213 
    214 	{"next_on_delete", "FALSE", &prefs_common.next_on_delete, P_BOOL,
    215 	 NULL, NULL, NULL},
    216 
    217 	 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
    218 	 NULL, NULL, NULL},
    219 	 {"bold_marked", "FALSE", &prefs_common.bold_marked, P_BOOL,
    220 	 NULL, NULL, NULL},
    221 
    222 	{"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
    223 	 NULL, NULL, NULL},
    224 	{"show_col_headers", "TRUE", &prefs_common.show_col_headers, P_BOOL,
    225 	 NULL, NULL, NULL},
    226 	{"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
    227 	 NULL, NULL, NULL},
    228 	{"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
    229 	 NULL, NULL, NULL},
    230 
    231 	{"summary_col_show_mark", "TRUE",
    232 	 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
    233 	{"summary_col_show_unread", "TRUE",
    234 	 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
    235 	{"summary_col_show_subject", "TRUE",
    236 	 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
    237 	{"summary_col_show_from", "TRUE",
    238 	 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
    239 	{"summary_col_show_to", "FALSE",
    240 	 &prefs_common.summary_col_visible[S_COL_TO], P_BOOL, NULL, NULL, NULL},
    241 	{"summary_col_show_date", "TRUE",
    242 	 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
    243 	{"summary_col_show_mime", "TRUE",
    244 	 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
    245 	{"summary_col_show_size", "TRUE",
    246 	 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
    247 	{"summary_col_show_number", "FALSE",
    248 	 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
    249 	{"summary_col_show_score", "FALSE",
    250 	 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
    251 	{"summary_col_show_locked", "FALSE",
    252 	 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
    253 	{"summary_col_show_tags", "FALSE",
    254 	 &prefs_common.summary_col_visible[S_COL_TAGS], P_BOOL, NULL, NULL, NULL},
    255 
    256 	{"summary_col_lock", "FALSE", &prefs_common.summary_col_lock, P_BOOL,
    257 	 NULL, NULL, NULL},
    258 
    259 	 {"summary_col_pos_mark", "0",
    260 	  &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
    261 	{"summary_col_pos_unread", "1",
    262 	  &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
    263 	{"summary_col_pos_mime", "2",
    264 	  &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
    265 	{"summary_col_pos_subject", "3",
    266 	  &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
    267 	{"summary_col_pos_from", "4",
    268 	  &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
    269 	{"summary_col_pos_date", "5",
    270 	  &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
    271 	{"summary_col_pos_size", "6",
    272 	  &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
    273 	{"summary_col_pos_number", "7",
    274 	  &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
    275 	{"summary_col_pos_score", "8",
    276 	 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
    277 	{"summary_col_pos_locked", "9",
    278 	 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
    279 	{"summary_col_pos_to", "10",
    280 	  &prefs_common.summary_col_pos[S_COL_TO], P_INT, NULL, NULL, NULL},
    281 	{"summary_col_pos_tags", "11",
    282 	  &prefs_common.summary_col_pos[S_COL_TAGS], P_INT, NULL, NULL, NULL},
    283 
    284 	{"summary_col_size_mark", "10",
    285 	 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
    286 	{"summary_col_size_unread", "13",
    287 	 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
    288 	{"summary_col_size_mime", "10",
    289 	 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
    290 	{"summary_col_size_subject", "200",
    291 	 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
    292 	{"summary_col_size_from", "120",
    293 	 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
    294 	{"summary_col_size_to", "120",
    295 	 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
    296 	{"summary_col_size_date", "118",
    297 	 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
    298 	{"summary_col_size_size", "45",
    299 	 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
    300 	{"summary_col_size_number", "40",
    301 	 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
    302 	{"summary_col_size_score", "40",
    303 	 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
    304 	{"summary_col_size_locked", "13",
    305 	 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
    306 	{"summary_col_size_tags", "150",
    307 	 &prefs_common.summary_col_size[S_COL_TAGS], P_INT, NULL, NULL, NULL},
    308 
    309 	/* Widget size */
    310 	{"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
    311 	 NULL, NULL, NULL},
    312 	{"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
    313 	 NULL, NULL, NULL},
    314 	{"folderview_width", "270", &prefs_common.folderview_width, P_INT,
    315 	 NULL, NULL, NULL},
    316 	{"folderview_height", "450", &prefs_common.folderview_height, P_INT,
    317 	 NULL, NULL, NULL},
    318 	{"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
    319 	 NULL, NULL, NULL},
    320 
    321 	{"folder_col_show_folder", "TRUE",
    322 	 &prefs_common.folder_col_visible[F_COL_FOLDER], P_BOOL, NULL, NULL, NULL},
    323 	{"folder_col_show_new", "TRUE",
    324 	 &prefs_common.folder_col_visible[F_COL_NEW], P_BOOL, NULL, NULL, NULL},
    325 	{"folder_col_show_unread", "TRUE",
    326 	 &prefs_common.folder_col_visible[F_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
    327 	{"folder_col_show_total", "TRUE",
    328 	 &prefs_common.folder_col_visible[F_COL_TOTAL], P_BOOL, NULL, NULL, NULL},
    329 
    330 	{"folder_col_pos_folder", "0",
    331 	 &prefs_common.folder_col_pos[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
    332 	{"folder_col_pos_new", "1",
    333 	 &prefs_common.folder_col_pos[F_COL_NEW], P_INT, NULL, NULL, NULL},
    334 	{"folder_col_pos_unread", "2",
    335 	 &prefs_common.folder_col_pos[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
    336 	{"folder_col_pos_total", "3",
    337 	 &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
    338 
    339 	{"folder_col_size_folder", "120",
    340 	 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
    341 	{"folder_col_size_new", "32",
    342 	 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
    343 	{"folder_col_size_unread", "32",
    344 	 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
    345 	{"folder_col_size_total", "32",
    346 	 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
    347 
    348 	{"folder_default_thread", "TRUE", &prefs_common.folder_default_thread, P_BOOL,
    349 	 NULL, NULL, NULL},
    350 	{"folder_default_thread_collapsed", "FALSE", &prefs_common.folder_default_thread_collapsed, P_BOOL,
    351 	 NULL, NULL, NULL},
    352 	{"folder_default_hide_read_threads", "FALSE", &prefs_common.folder_default_hide_read_threads, P_BOOL,
    353 	 NULL, NULL, NULL},
    354 	{"folder_default_hide_read_msgs", "FALSE", &prefs_common.folder_default_hide_read_msgs, P_BOOL,
    355 	 NULL, NULL, NULL},
    356 	{"folder_default_hide_del_msgs", "FALSE", &prefs_common.folder_default_hide_del_msgs, P_BOOL,
    357 	 NULL, NULL, NULL},
    358 
    359 	{"summaryview_width", "500", &prefs_common.summaryview_width, P_INT,
    360 	 NULL, NULL, NULL},
    361 	{"summaryview_height", "244", &prefs_common.summaryview_height, P_INT,
    362 	 NULL, NULL, NULL},
    363 
    364 	{"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
    365 	 NULL, NULL, NULL},
    366 	{"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
    367 	 NULL, NULL, NULL},
    368 	{"messageview_width", "500", &prefs_common.msgview_width, P_INT,
    369 	 NULL, NULL, NULL},
    370 	{"messageview_height", "213", &prefs_common.msgview_height, P_INT,
    371 	 NULL, NULL, NULL},
    372 	{"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
    373 	 NULL, NULL, NULL},
    374 
    375 	{"mainview_x", "64", &prefs_common.mainview_x, P_INT,
    376 	 NULL, NULL, NULL},
    377 	{"mainview_y", "64", &prefs_common.mainview_y, P_INT,
    378 	 NULL, NULL, NULL},
    379 	{"mainview_width", "500", &prefs_common.mainview_width, P_INT,
    380 	 NULL, NULL, NULL},
    381 	{"mainview_height", "400", &prefs_common.mainview_height, P_INT,
    382 	 NULL, NULL, NULL},
    383 	{"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
    384 	 NULL, NULL, NULL},
    385 	{"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
    386 	 NULL, NULL, NULL},
    387 	{"mainwin_maximised", "FALSE", &prefs_common.mainwin_maximised, P_BOOL,
    388 	 NULL, NULL, NULL},
    389 	{"mainwin_fullscreen", "FALSE", &prefs_common.mainwin_fullscreen, P_BOOL,
    390 	 NULL, NULL, NULL},
    391 	{"mainwin_menubar", "TRUE", &prefs_common.mainwin_menubar, P_BOOL,
    392 	 NULL, NULL, NULL},
    393 	{"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
    394 	 NULL, NULL, NULL},
    395 	{"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
    396 	 NULL, NULL, NULL},
    397 	{"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
    398 	 NULL, NULL, NULL},
    399 	{"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
    400 	 NULL, NULL, NULL},
    401 	{"mimeview_tree_height", "60", &prefs_common.mimeview_tree_height, P_INT,
    402 	 NULL, NULL, NULL},
    403 	{"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
    404 	 NULL, NULL, NULL},
    405 	{"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
    406 	 NULL, NULL, NULL},
    407 	{"compose_width", "600", &prefs_common.compose_width, P_INT,
    408 	 NULL, NULL, NULL},
    409 	{"compose_height", "560", &prefs_common.compose_height, P_INT,
    410 	 NULL, NULL, NULL},
    411 	{"compose_notebook_height", "180", &prefs_common.compose_notebook_height, P_INT,
    412 	 NULL, NULL, NULL},
    413 	{"compose_x", "0", &prefs_common.compose_x, P_INT,
    414 	 NULL, NULL, NULL},
    415 	{"compose_y", "0", &prefs_common.compose_y, P_INT,
    416 	 NULL, NULL, NULL},
    417 	/* Message */
    418 	{"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
    419 	 NULL, NULL, NULL},
    420 
    421 	{"quote_level1_color", "#0000b3", &prefs_common.color[COL_QUOTE_LEVEL1],
    422 	 P_COLOR, NULL, NULL, NULL},
    423 	{"quote_level2_color", "#b35a00", &prefs_common.color[COL_QUOTE_LEVEL2],
    424 	 P_COLOR, NULL, NULL, NULL},
    425 	{"quote_level3_color", "#5ab300", &prefs_common.color[COL_QUOTE_LEVEL3],
    426 	 P_COLOR, NULL, NULL, NULL},
    427 	{"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
    428 	 NULL, NULL, NULL},
    429 	{"quote_level1_bgcolor", "#cccccc", &prefs_common.color[COL_QUOTE_LEVEL1_BG],
    430 	 P_COLOR, NULL, NULL, NULL},
    431 	{"quote_level2_bgcolor", "#d4d4d4", &prefs_common.color[COL_QUOTE_LEVEL2_BG],
    432 	 P_COLOR, NULL, NULL, NULL},
    433 	{"quote_level3_bgcolor", "#dddddd", &prefs_common.color[COL_QUOTE_LEVEL3_BG],
    434 	 P_COLOR, NULL, NULL, NULL},
    435 	{"uri_color", "#007f00", &prefs_common.color[COL_URI],
    436 	 P_COLOR, NULL, NULL, NULL},
    437 	{"emphasis_color", "#0000cf", &prefs_common.color[COL_EMPHASIS],
    438 	 P_COLOR, NULL, NULL, NULL},
    439 	{"target_folder_color", "#da1cca", &prefs_common.color[COL_TGT_FOLDER],
    440 	 P_COLOR, NULL, NULL, NULL},
    441 	{"signature_color", "#797979", &prefs_common.color[COL_SIGNATURE],
    442 	 P_COLOR, NULL, NULL, NULL},
    443 	{"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
    444 	 P_BOOL, NULL, NULL, NULL},
    445 
    446 	{"default_header_color", "#000000", &prefs_common.color[COL_DEFAULT_HEADER],
    447 	 P_COLOR, NULL, NULL, NULL},
    448 	{"default_header_bgcolor", "#f5f6be", &prefs_common.color[COL_DEFAULT_HEADER_BG],
    449 	 P_COLOR, NULL, NULL, NULL},
    450 	{"tags_color", "#000000", &prefs_common.color[COL_TAGS],
    451 	 P_COLOR, NULL, NULL, NULL},
    452 	{"tags_bgcolor", "#f5f6be", &prefs_common.color[COL_TAGS_BG],
    453 	 P_COLOR, NULL, NULL, NULL},
    454 	{"qs_active_color", "#000000", &prefs_common.color[COL_QS_ACTIVE],
    455 	 P_COLOR, NULL, NULL, NULL},
    456 	{"qs_active_bgcolor", "#f5f6be", &prefs_common.color[COL_QS_ACTIVE_BG],
    457 	 P_COLOR, NULL, NULL, NULL},
    458 	{"qs_error_color", "#000000", &prefs_common.color[COL_QS_ERROR],
    459 	 P_COLOR, NULL, NULL, NULL},
    460 	{"qs_error_bgcolor", "#ff7070", &prefs_common.color[COL_QS_ERROR_BG],
    461 	 P_COLOR, NULL, NULL, NULL},
    462 
    463 	{"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
    464 	 NULL, NULL, NULL},
    465 	{"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
    466 	 NULL, NULL, NULL},
    467 	{"line_space", "2", &prefs_common.line_space, P_INT,
    468 	 NULL, NULL, NULL},
    469 	{"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
    470 	 NULL, NULL, NULL},
    471 
    472 	{"hide_quoted", "TRUE",
    473 	 &prefs_common.hide_quoted, P_BOOL,
    474 	 NULL, NULL, NULL},
    475 	{"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
    476 	 NULL, NULL, NULL},
    477 	{"show_all_headers", "FALSE", &prefs_common.show_all_headers, P_BOOL,
    478 	 NULL, NULL, NULL},
    479 
    480 	{"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
    481 	 NULL, NULL, NULL},
    482 
    483 	{"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
    484 	 NULL, NULL, NULL},
    485 	{"attach_save_directory", NULL,
    486 	 &prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL},
    487 	{"attach_load_directory", NULL,
    488 	 &prefs_common.attach_load_dir, P_STRING, NULL, NULL, NULL},
    489 
    490 	/* MIME viewer */
    491 	{"mime_textviewer",   NULL,
    492 	 &prefs_common.mime_textviewer,   P_STRING, NULL, NULL, NULL},
    493 	{"mime_open_command", "xdg-open '%s'",
    494 	 &prefs_common.mime_open_cmd,     P_STRING, NULL, NULL, NULL},
    495 	{"show_inline_attachments", "TRUE",
    496 	 &prefs_common.show_inline_attachments, P_BOOL, NULL, NULL, NULL},
    497 
    498 	/* Interface */
    499 	{"layout_mode", "0", &prefs_common.layout_mode, P_INT,
    500 	 NULL, NULL, NULL},
    501 	/* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
    502 	 NULL, NULL, NULL}, */
    503 	{"open_selected_message_on_folder_open", "FALSE",
    504 	 &prefs_common.open_selected_on_folder_open,
    505 	 P_BOOL, NULL, NULL, NULL},
    506 	{"open_selected_message_on_search_results", "FALSE",
    507 	 &prefs_common.open_selected_on_search_results,
    508 	 P_BOOL, NULL, NULL, NULL},
    509 	{"open_selected_message_on_prevnext", "FALSE",
    510 	 &prefs_common.open_selected_on_prevnext,
    511 	 P_BOOL, NULL, NULL, NULL},
    512 	{"open_selected_message_on_deletemove", "FALSE",
    513 	 &prefs_common.open_selected_on_deletemove,
    514 	 P_BOOL, NULL, NULL, NULL},
    515 	{"open_selected_message_on_directional", "FALSE",
    516 	 &prefs_common.open_selected_on_directional,
    517 	 P_BOOL, NULL, NULL, NULL},
    518 	{"always_show_message_when_selected", "FALSE",
    519 	 &prefs_common.always_show_msg,
    520 	 P_BOOL, NULL, NULL, NULL},
    521 	{"select_on_entry", "3", &prefs_common.select_on_entry,
    522 	 P_ENUM, NULL, NULL, NULL},
    523 	{"show_tooltips", "TRUE", &prefs_common.show_tooltips,
    524 	 P_BOOL, NULL, NULL, NULL},
    525 
    526 	/* do it SUMMARY_OPEN_ACTIONS-1 times */
    527 	{"summary_select_prio1", "0", &prefs_common.summary_select_prio[0], P_ENUM,
    528 	 NULL, NULL, NULL},
    529 	{"summary_select_prio2", "0", &prefs_common.summary_select_prio[1], P_ENUM,
    530 	 NULL, NULL, NULL},
    531 	{"summary_select_prio3", "0", &prefs_common.summary_select_prio[2], P_ENUM,
    532 	 NULL, NULL, NULL},
    533 	{"summary_select_prio4", "0", &prefs_common.summary_select_prio[3], P_ENUM,
    534 	 NULL, NULL, NULL},
    535 	{"summary_select_prio5", "0", &prefs_common.summary_select_prio[4], P_ENUM,
    536 	 NULL, NULL, NULL},
    537 	{"summary_select_prio6", "0", &prefs_common.summary_select_prio[5], P_ENUM,
    538 	 NULL, NULL, NULL},
    539 	{"summary_select_prio7", "0", &prefs_common.summary_select_prio[6], P_ENUM,
    540 	 NULL, NULL, NULL},
    541 	{"summary_select_prio8", "0", &prefs_common.summary_select_prio[7], P_ENUM,
    542 	 NULL, NULL, NULL},
    543 	{"summary_select_prio9", "0", &prefs_common.summary_select_prio[8], P_ENUM,
    544 	 NULL, NULL, NULL},
    545 	{"summary_select_prio10", "0", &prefs_common.summary_select_prio[9], P_ENUM,
    546 	 NULL, NULL, NULL},
    547 
    548 	{"mark_as_read_on_new_window", "FALSE",
    549 	 &prefs_common.mark_as_read_on_new_window,
    550 	 P_BOOL, NULL, NULL, NULL},
    551 	{"mark_as_read_delay", "0",
    552 	 &prefs_common.mark_as_read_delay, P_INT,
    553 	 NULL, NULL, NULL},
    554 	{"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
    555 	 NULL, NULL, NULL},
    556 	{"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
    557 	 NULL, NULL, NULL},
    558 	{"summary_from_show", "0", &prefs_common.summary_from_show, P_ENUM,
    559 	 NULL, NULL, NULL},
    560 
    561 	{"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
    562 	 &prefs_common.pixmap_theme_path, P_STRING,
    563 	 NULL, NULL, NULL},
    564 
    565 	{"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
    566 	 NULL, NULL, NULL},
    567 
    568 	/* Addressbook */
    569 	{"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog,
    570 	 P_BOOL, NULL, NULL, NULL},
    571 	{"addressbook_hpaned_pos", "-1", &prefs_common.addressbook_hpaned_pos,
    572 	 P_INT, NULL, NULL, NULL},
    573 	{"addressbook_vpaned_pos", "-1", &prefs_common.addressbook_vpaned_pos,
    574 	 P_INT, NULL, NULL, NULL},
    575 
    576 	/* Other */
    577 	{"uri_open_command", "firefox '%s'",
    578 	 &prefs_common.uri_cmd, P_STRING, NULL, NULL, NULL},
    579 	{"ext_editor_command", DEFAULT_EDITOR_CMD,
    580 	 &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
    581 	{"cmds_use_system_default", "TRUE",
    582 	 &prefs_common.cmds_use_system_default, P_BOOL, NULL, NULL, NULL},
    583 	{"session_passwords", "FALSE", &prefs_common.session_passwords,
    584 	 P_BOOL, NULL, NULL, NULL},
    585 	{"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
    586 	 NULL, NULL, NULL},
    587 	{"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
    588 	 P_BOOL, NULL, NULL, NULL},
    589 	{"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
    590 	 NULL, NULL, NULL},
    591 	{"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
    592 	 NULL, NULL, NULL},
    593 
    594 	{"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
    595 	 NULL, NULL, NULL},
    596 
    597 	{"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
    598 	 P_INT, NULL, NULL, NULL},
    599 
    600 	{"hide_score", "-9999", &prefs_common.kill_score, P_INT,
    601 	 NULL, NULL, NULL},
    602 	{"important_score", "1", &prefs_common.important_score, P_INT,
    603 	 NULL, NULL, NULL},
    604 
    605     	{"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
    606 	 NULL, NULL, NULL},
    607 	{"log_length", "500", &prefs_common.loglength, P_INT,
    608 	 NULL, NULL, NULL},
    609 	{"log_msg_color", "#00af00", &prefs_common.color[COL_LOG_MSG],
    610 	 P_COLOR, NULL, NULL, NULL},
    611 	{"log_warn_color", "#af0000", &prefs_common.color[COL_LOG_WARN],
    612 	 P_COLOR, NULL, NULL, NULL},
    613 	{"log_error_color", "#af0000", &prefs_common.color[COL_LOG_ERROR],
    614 	 P_COLOR, NULL, NULL, NULL},
    615 	{"log_in_color", "#000000", &prefs_common.color[COL_LOG_IN],
    616 	 P_COLOR, NULL, NULL, NULL},
    617 	{"log_out_color", "#0000ef", &prefs_common.color[COL_LOG_OUT],
    618 	 P_COLOR, NULL, NULL, NULL},
    619 
    620 	{"gtk_enable_accels", "TRUE", &prefs_common.gtk_enable_accels, P_BOOL,
    621 	 NULL, NULL, NULL},
    622 
    623 	{"color_new", "#0000b3", &prefs_common.color[COL_NEW],
    624 	 P_COLOR, NULL, NULL, NULL},
    625 
    626 	/* Some windows' sizes */
    627 	{"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
    628 	 NULL, NULL, NULL},
    629 	{"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
    630 	 NULL, NULL, NULL},
    631 
    632 	{"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
    633 	 NULL, NULL, NULL},
    634 	{"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
    635 	 NULL, NULL, NULL},
    636 
    637 	{"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
    638 	 NULL, NULL, NULL},
    639 	{"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
    640 	 NULL, NULL, NULL},
    641 
    642 	{"templateswin_width", "480", &prefs_common.templateswin_width, P_INT,
    643 	 NULL, NULL, NULL},
    644 	{"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
    645 	 NULL, NULL, NULL},
    646 
    647 	{"actionsiodialog_width", "582", &prefs_common.actionsiodialog_width, P_INT,
    648 	 NULL, NULL, NULL},
    649 	{"actionsiodialog_height", "310", &prefs_common.actionsiodialog_height, P_INT,
    650 	 NULL, NULL, NULL},
    651 
    652 	{"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
    653 	 NULL, NULL, NULL},
    654 	{"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
    655 	 NULL, NULL, NULL},
    656 
    657 	{"tagswin_width", "586", &prefs_common.tagswin_width, P_INT,
    658 	 NULL, NULL, NULL},
    659 	{"tagswin_height", "-1", &prefs_common.tagswin_height, P_INT,
    660 	 NULL, NULL, NULL},
    661 
    662 	{"sslmanwin_width", "486", &prefs_common.sslmanwin_width, P_INT,
    663 	 NULL, NULL, NULL},
    664 	{"sslmanwin_height", "-1", &prefs_common.sslmanwin_height, P_INT,
    665 	 NULL, NULL, NULL},
    666 
    667 	{"uriopenerwin_width", "-1", &prefs_common.uriopenerwin_width, P_INT,
    668 	 NULL, NULL, NULL},
    669 	{"uriopenerwin_height", "-1", &prefs_common.uriopenerwin_height, P_INT,
    670 	 NULL, NULL, NULL},
    671 
    672 	{"foldersortwin_width", "400", &prefs_common.foldersortwin_width, P_INT,
    673 	 NULL, NULL, NULL},
    674 	{"foldersortwin_height", "300", &prefs_common.foldersortwin_height, P_INT,
    675 	 NULL, NULL, NULL},
    676 
    677 	{"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
    678 	 NULL, NULL, NULL},
    679 	{"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
    680 	 NULL, NULL, NULL},
    681 
    682 	{"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
    683 	 NULL, NULL, NULL},
    684 	{"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT,
    685 	 NULL, NULL, NULL},
    686 
    687 	{"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
    688 	 NULL, NULL, NULL},
    689 	{"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
    690 	 NULL, NULL, NULL},
    691 
    692 	{"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
    693 	 NULL, NULL, NULL},
    694 	{"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
    695 	 NULL, NULL, NULL},
    696 
    697 	{"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
    698 	 NULL, NULL, NULL},
    699 	{"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
    700 	 NULL, NULL, NULL},
    701 
    702 	{"zero_replacement_char", "0", &prefs_common.zero_replacement, P_STRING,
    703 	 NULL, NULL, NULL},
    704 
    705 	{"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
    706 	 NULL, NULL, NULL},
    707 	{"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
    708 	 NULL, NULL, NULL},
    709 
    710 	{"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
    711 	 NULL, NULL, NULL},
    712 	{"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
    713 	 NULL, NULL, NULL},
    714 
    715 	{"logwin_width", "520", &prefs_common.logwin_width, P_INT,
    716 	 NULL, NULL, NULL},
    717 	{"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
    718 	 NULL, NULL, NULL},
    719 
    720 	{"filtering_debugwin_width", "600", &prefs_common.filtering_debugwin_width, P_INT,
    721 	 NULL, NULL, NULL},
    722 	{"filtering_debugwin_height", "-1", &prefs_common.filtering_debugwin_height, P_INT,
    723 	 NULL, NULL, NULL},
    724 
    725 	{"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
    726 	 NULL, NULL, NULL},
    727 	{"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
    728 	 NULL, NULL, NULL},
    729 
    730 	{"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
    731 	 NULL, NULL, NULL},
    732 	{"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
    733 	 NULL, NULL, NULL},
    734 
    735 	{"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
    736 	 NULL, NULL, NULL},
    737 	{"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
    738 	 NULL, NULL, NULL},
    739 
    740 	{"addrgather_width", "450", &prefs_common.addrgather_width, P_INT,
    741 	 NULL, NULL, NULL},
    742 	{"addrgather_height", "-1", &prefs_common.addrgather_height, P_INT,
    743 	 NULL, NULL, NULL},
    744 
    745 	{"news_subscribe_width", "450", &prefs_common.news_subscribe_width, P_INT,
    746 	 NULL, NULL, NULL},
    747 	{"news_subscribe_height", "400", &prefs_common.news_subscribe_height, P_INT,
    748 	 NULL, NULL, NULL},
    749 
    750 	/* Hidden */
    751 	{"imap_scan_tree_recurs_limit", "64", &prefs_common.imap_scan_tree_recurs_limit, P_INT,
    752 	 NULL, NULL, NULL},
    753 	{"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
    754 	 NULL, NULL, NULL},
    755 	{"show_save_all_success", "1", &prefs_common.show_save_all_success, P_INT,
    756 	 NULL, NULL, NULL},
    757 	{"show_save_all_failure", "1", &prefs_common.show_save_all_failure, P_INT,
    758 	 NULL, NULL, NULL},
    759 	{"utf8_instead_of_locale_for_broken_mail", "0",
    760 	 &prefs_common.broken_are_utf8, P_INT,
    761 	 NULL, NULL, NULL},
    762 	{"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
    763 	 NULL, NULL, NULL},
    764 	{"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
    765 	 NULL, NULL, NULL},
    766 	{"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
    767 	 NULL, NULL, NULL},
    768 	{"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
    769 	 NULL, NULL, NULL},
    770 
    771 	{"enable_hscrollbar", "FALSE", &prefs_common.enable_hscrollbar, P_BOOL,
    772 	 NULL, NULL, NULL},
    773 
    774 	{"folderview_vscrollbar_policy", "0",
    775 	 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
    776 	 NULL, NULL, NULL},
    777 	{"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
    778 	 NULL, NULL, NULL},
    779 
    780 	{"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
    781 	 NULL, NULL, NULL},
    782 	{"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
    783 	 NULL, NULL, NULL},
    784 
    785 	{"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
    786 	P_INT, NULL, NULL, NULL },
    787 	{"startup_folder", "", &prefs_common.startup_folder,
    788 	P_STRING, NULL, NULL, NULL },
    789 	{"goto_folder_on_startup", "FALSE", &prefs_common.goto_folder_on_startup,
    790 	P_BOOL, NULL, NULL, NULL },
    791 	{"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
    792 	 NULL, NULL, NULL},
    793 	{"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
    794 	 NULL, NULL, NULL},
    795 	{"summary_quicksearch_autorun", "0", &prefs_common.summary_quicksearch_autorun, P_INT,
    796 	 NULL, NULL, NULL},
    797 	{"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
    798 	 NULL, NULL, NULL},
    799 	{"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
    800 	 NULL, NULL, NULL},
    801 	{"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
    802 	 NULL, NULL, NULL},
    803 	{"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
    804 	 NULL, NULL, NULL},
    805 	{"save_parts_readwrite", "FALSE", &prefs_common.save_parts_readwrite, P_BOOL,
    806 	 NULL, NULL, NULL},
    807 	{"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
    808 	 NULL, NULL, NULL},
    809 	{"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
    810 	 NULL, NULL, NULL},
    811 	{"real_time_sync", "FALSE", &prefs_common.real_time_sync, P_BOOL,
    812 	 NULL, NULL, NULL},
    813 
    814 	{"print_paper_type", NULL, &prefs_common.print_paper_type, P_STRING,
    815 	 NULL, NULL, NULL},
    816 	{"print_paper_orientation", "0", &prefs_common.print_paper_orientation, P_INT,
    817 	 NULL, NULL, NULL},
    818 	{"print_margin_top", "-1", &prefs_common.print_margin_top, P_INT,
    819 	 NULL, NULL, NULL},
    820 	{"print_margin_bottom", "-1", &prefs_common.print_margin_bottom, P_INT,
    821 	 NULL, NULL, NULL},
    822 	{"print_margin_left", "-1", &prefs_common.print_margin_left, P_INT,
    823 	 NULL, NULL, NULL},
    824 	{"print_margin_right", "-1", &prefs_common.print_margin_right, P_INT,
    825 	 NULL, NULL, NULL},
    826 	{"print_use_color", "0", &prefs_common.print_use_color, P_INT,
    827 	 NULL, NULL, NULL},
    828 	{"print_use_collate", "0", &prefs_common.print_use_collate, P_INT,
    829 	 NULL, NULL, NULL},
    830 	{"print_use_reverse", "0", &prefs_common.print_use_reverse, P_INT,
    831 	 NULL, NULL, NULL},
    832 	{"print_use_duplex", "0", &prefs_common.print_use_duplex, P_INT,
    833 	 NULL, NULL, NULL},
    834 	{"print_imgs", "1", &prefs_common.print_imgs, P_INT,
    835 	 NULL, NULL, NULL},
    836 	{"print_previewwin_width", "600", &prefs_common.print_previewwin_width, P_INT,
    837 	 NULL, NULL, NULL},
    838 	{"print_previewwin_height", "-1", &prefs_common.print_previewwin_height, P_INT,
    839 	 NULL, NULL, NULL},
    840 
    841 	{"two_line_vertical", "TRUE", &prefs_common.two_line_vert,
    842 	P_BOOL, NULL, NULL, NULL },
    843 
    844 	{"inherit_folder_properties", "FALSE", &prefs_common.inherit_folder_props, P_BOOL,
    845 	 NULL, NULL, NULL},
    846 
    847 	{"nav_history_length", "50", &prefs_common.nav_history_length, P_INT,
    848 	 NULL, NULL, NULL},
    849 
    850 	{"diff_added_color", "#008b8b", &prefs_common.color[COL_DIFF_ADDED],
    851 	 P_COLOR, NULL, NULL, NULL},
    852 	{"diff_deleted_color", "#6a5acd", &prefs_common.color[COL_DIFF_DELETED],
    853 	 P_COLOR, NULL, NULL, NULL},
    854 	{"diff_hunk_color", "#a52a2a", &prefs_common.color[COL_DIFF_HUNK],
    855 	 P_COLOR, NULL, NULL, NULL},
    856 
    857 	{"folder_search_wildcard", "TRUE", &prefs_common.folder_search_wildcard, P_BOOL,
    858 	 NULL, NULL, NULL},
    859 	{"address_search_wildcard", "TRUE", &prefs_common.address_search_wildcard, P_BOOL,
    860 	 NULL, NULL, NULL},
    861 	{"master_passphrase", "", &prefs_common.primary_passphrase, P_STRING, NULL, NULL, NULL },
    862 	{"master_passphrase_salt", "", &prefs_common.primary_passphrase_salt, P_STRING, NULL, NULL, NULL },
    863 	{"master_passphrase_pbkdf2_rounds", "50000", &prefs_common.primary_passphrase_pbkdf2_rounds, P_INT, NULL, NULL, NULL},
    864 
    865 	{"qs_press_timeout", "500", &prefs_common.qs_press_timeout, P_INT,
    866 	 NULL, NULL, NULL},
    867 
    868 	{"mainwin_toolbar_always_enable_actions", "FALSE", &prefs_common.mainwin_toolbar_always_enable_actions, P_BOOL,
    869 	 NULL, NULL, NULL},
    870 
    871 	{NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
    872 };
    873 
    874 /*
    875  * Read history list from the specified history file in the specified directory (subdir of rc_dir)
    876  * Fallback to default_list if history file is not found
    877  */
    878 GList *prefs_common_read_history_from_dir_with_defaults(const gchar *dirname, const gchar *history,
    879 															  GList *default_list)
    880 {
    881 	FILE *fp;
    882 	gchar *path;
    883 	gchar buf[PREFSBUFSIZE];
    884 	GList *tmp = NULL;
    885 
    886 	if (dirname) {
    887 		path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, dirname,
    888 				   G_DIR_SEPARATOR_S, history,
    889 				   NULL);
    890 	} else {
    891 	path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
    892 			   NULL);
    893 	}
    894 	if ((fp = g_fopen(path, "rb")) == NULL) {
    895 		if (ENOENT != errno) FILE_OP_ERROR(path, "g_fopen");
    896 		g_free(path);
    897 		/* returns default list if set, otherwise NULL */
    898 		return default_list;
    899 	}
    900 	g_free(path);
    901 	while (fgets(buf, sizeof(buf), fp) != NULL) {
    902 		g_strstrip(buf);
    903 		if (buf[0] == '\0') continue;
    904 		tmp = add_history(tmp, buf);
    905 	}
    906 	fclose(fp);
    907 
    908 	tmp = g_list_reverse(tmp);
    909 
    910 	return tmp;
    911 }
    912 
    913 /*
    914  * Read history list from the specified history file in the specified directory (subdir of rc_dir)
    915  */
    916 static GList *prefs_common_read_history_from_dir(const gchar *dirname, const gchar *history)
    917 {
    918 	return prefs_common_read_history_from_dir_with_defaults(dirname, history, NULL);
    919 }
    920 
    921 /*
    922  * Read history list from the specified history file
    923  */
    924 static GList *prefs_common_read_history(const gchar *history)
    925 {
    926 	return prefs_common_read_history_from_dir(NULL, history);
    927 }
    928 
    929 void prefs_common_read_config(void)
    930 {
    931 	gchar *rcpath;
    932 	gchar *tmp;
    933 
    934 	rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
    935 	prefs_read_config(param, "Common", rcpath, NULL);
    936 
    937 	g_free(rcpath);
    938 
    939 	tmp = g_strdup(prefs_common.date_format);
    940 	g_free(prefs_common.date_format);
    941 	prefs_common.date_format = tmp;
    942 
    943 	prefs_common.mime_open_cmd_history =
    944 		prefs_common_read_history(COMMAND_HISTORY);
    945 	prefs_common.message_search_history =
    946 		prefs_common_read_history("messagesearch_history");
    947 	prefs_common.compose_save_to_history =
    948 		prefs_common_read_history(COMPOSE_SAVE_TO_HISTORY);
    949 }
    950 
    951 #define TRY(func) \
    952 if (!(func)) \
    953 { \
    954 	g_warning("failed to write"); \
    955 	goto out;			\
    956 } \
    957 
    958 /*
    959  * Save history list to the specified history file in the specified directory (subdir of rc_dir)
    960  */
    961 static void prefs_common_save_history_to_dir(const gchar *dirname, const gchar *history, GList *list)
    962 {
    963 	GList *cur;
    964 	FILE *fp;
    965 	gchar *path, *tmp_path;
    966 
    967 	if (dirname) {
    968 		path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, dirname,
    969 				   G_DIR_SEPARATOR_S, history,
    970 				   NULL);
    971 	} else {
    972 	path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
    973 			   NULL);
    974 	}
    975 	tmp_path = g_strconcat(path, ".tmp", NULL);
    976 
    977 	if ((fp = g_fopen(tmp_path, "wb")) == NULL) {
    978 		FILE_OP_ERROR(tmp_path, "g_fopen");
    979 		goto out;
    980 	}
    981 
    982 	for (cur = list; cur != NULL; cur = cur->next) {
    983 		TRY(fputs((gchar *)cur->data, fp) != EOF &&
    984 		    fputc('\n', fp) != EOF);
    985 	}
    986 
    987 	if (fclose(fp) == EOF) {
    988 		FILE_OP_ERROR(tmp_path, "fclose");
    989 		fp = NULL;
    990 		goto out;
    991 	}
    992 	fp = NULL;
    993 	if (g_rename(tmp_path, path) < 0) {
    994 		FILE_OP_ERROR(path, "rename");
    995 		goto out;
    996 	}
    997 
    998 out:
    999 	if (fp)
   1000 		fclose(fp);
   1001 	g_free(tmp_path);
   1002 	g_free(path);
   1003 }
   1004 
   1005 /*
   1006  * Save history list to the specified history file
   1007  */
   1008 static void prefs_common_save_history(const gchar *history, GList *list)
   1009 {
   1010 	prefs_common_save_history_to_dir(NULL, history, list);
   1011 }
   1012 
   1013 #undef TRY
   1014 
   1015 void prefs_common_write_config(void)
   1016 {
   1017 	prefs_write_config(param, "Common", COMMON_RC);
   1018 	prefs_common_save_history(COMPOSE_SAVE_TO_HISTORY, prefs_common.compose_save_to_history);
   1019 }
   1020 
   1021 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
   1022    both 'in' and 'out' must be non-NULL.
   1023    'out' must be a pointer to a buffer whose size is at least equal
   1024    to strlen(txt)+1, this buffer will get cleared. out's contents
   1025    will always get set to a valid string, even if it's "".*/
   1026 void pref_get_unescaped_pref(gchar *out, const gchar *in)
   1027 {
   1028 	const gchar *i;
   1029 	gchar *o;
   1030 
   1031 	*out = '\0';
   1032 
   1033 	cm_return_if_fail( in != NULL );
   1034 	cm_return_if_fail( out != NULL );
   1035 
   1036 	i = in;
   1037 	o = out;
   1038 	memset(out, 0, strlen(in)+1);
   1039 	while (*i != '\0') {
   1040 		if (*i == '\\' && *(i+1) == 'n') {
   1041 			*o++ = '\n';
   1042 			i++;
   1043 		} else if (*i == '\\' && *(i+1) == 't') {
   1044 			*o++ = '\t';
   1045 			i++;
   1046 		} else if (*i == '\\' && *(i+1) == '\\') {
   1047 			*o++ = '\\';
   1048 			i++;
   1049 		} else {
   1050 			*o++ = *i;
   1051 		}
   1052 		i++;
   1053 	}
   1054 	*o='\0';
   1055 }
   1056 
   1057 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
   1058    both 'in' and 'out' must be non-NULL.
   1059    'out' must be a pointer to a buffer whose size is at least equal
   1060    to 2*strlen(txt)+1. out's contents will always get set to a valid
   1061    string, even if it's "". */
   1062 void pref_get_escaped_pref(gchar *out, const gchar *in)
   1063 {
   1064 	const gchar *i;
   1065 	gchar *o;
   1066 
   1067 	*out = '\0';
   1068 
   1069 	cm_return_if_fail( in != NULL );
   1070 	cm_return_if_fail( out != NULL );
   1071 
   1072 	i = in;
   1073 	o = out;
   1074 	while (*i != '\0') {
   1075 		if (*i == '\n') {
   1076 			*o++ = '\\';
   1077 			*o++ = 'n';
   1078 		} else if (*i == '\t') {
   1079 			*o++ = '\\';
   1080 			*o++ = 't';
   1081 		} else if (*i == '\\') {
   1082 			*o++ = '\\';
   1083 			*o++ = '\\';
   1084 		} else {
   1085 			*o++ = *i;
   1086 		}
   1087 		i++;
   1088 	}
   1089 	*o = '\0';
   1090 }
   1091 
   1092 /* set the contents of a textview widget from the internal \-escaped
   1093   representation of a pref string. both txt and textview must be non-NULL. */
   1094 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
   1095 {
   1096 	GtkTextBuffer *buffer;
   1097 	gchar *out = NULL;
   1098 
   1099 	cm_return_if_fail( textview != NULL );
   1100 
   1101 	buffer = gtk_text_view_get_buffer(textview);
   1102 
   1103 	if (!txt) {
   1104 		gtk_text_buffer_set_text(buffer, "", -1);
   1105 	} else {
   1106 		out = g_malloc(strlen(txt)+1);
   1107 
   1108 		pref_get_unescaped_pref(out, txt);
   1109 
   1110 		gtk_text_buffer_set_text(buffer, out, -1);
   1111 		g_free(out);
   1112 	}
   1113 }
   1114 
   1115 /* set the contents of a gtkentry widget from the internal \-escaped
   1116   representation of a pref string. both txt and entry must be non-NULL. */
   1117 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
   1118 {
   1119 	gchar *out = NULL;
   1120 
   1121 	cm_return_if_fail( entry != NULL );
   1122 	if (!txt) {
   1123 		gtk_entry_set_text(entry, "");
   1124 	} else {
   1125 		out = g_malloc(strlen(txt)+1);
   1126 
   1127 		pref_get_unescaped_pref(out, txt);
   1128 
   1129 		gtk_entry_set_text(entry, out);
   1130 		g_free(out);
   1131 	}
   1132 }
   1133 
   1134 /* get the \-escaped internal representation of a pref from the contents of
   1135    a textview widget. textview must be non-NULL. */
   1136 gchar *pref_get_pref_from_textview(GtkTextView *textview)
   1137 {
   1138 	GtkTextBuffer *buffer;
   1139 	GtkTextIter start, end;
   1140 	gchar *out, *tmp;
   1141 
   1142 	cm_return_val_if_fail( textview != NULL, "" );
   1143 
   1144 	buffer = gtk_text_view_get_buffer(textview);
   1145 	gtk_text_buffer_get_start_iter(buffer, &start);
   1146 	gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
   1147 	tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
   1148 	out = malloc(2*strlen(tmp)+1);
   1149 	if (out)
   1150 		pref_get_escaped_pref(out, tmp);
   1151 	g_free(tmp);
   1152 
   1153 	return out?out:"";
   1154 }
   1155 
   1156 /* get the \-escaped internal representation of a pref from the contents of
   1157    a gtkentry widget. entry must be non-NULL. */
   1158 gchar *pref_get_pref_from_entry(GtkEntry *entry)
   1159 {
   1160 	gchar *out, *tmp;
   1161 
   1162 	cm_return_val_if_fail( entry != NULL, "" );
   1163 
   1164 	tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
   1165 	out = malloc(2*strlen(tmp)+1);
   1166 
   1167 	if (out)
   1168 		pref_get_escaped_pref(out, tmp);
   1169 	g_free(tmp);
   1170 
   1171 	return out?out:"";
   1172 }
   1173 
   1174 /* ugly hack to be able to get this pref from ssl_certificate.c */
   1175 gboolean prefs_common_unsafe_ssl_certs(void)
   1176 {
   1177 	return prefs_common.unsafe_ssl_certs;
   1178 }
   1179 
   1180 const gchar *prefs_common_get_uri_cmd(void)
   1181 {
   1182 	gchar *tmp = NULL;
   1183 
   1184 	if (!prefs_common.cmds_use_system_default)
   1185 		return prefs_common.uri_cmd;
   1186 
   1187 	tmp = g_find_program_in_path("xdg-open");
   1188 	if (!tmp)
   1189 		return prefs_common.uri_cmd;
   1190 
   1191 	g_free(tmp);
   1192 	return "xdg-open %s";
   1193 }
   1194 
   1195 const gchar *prefs_common_get_ext_editor_cmd(void)
   1196 {
   1197 	return prefs_common.ext_editor_cmd;
   1198 #if 0 /* we should do that, but it detaches the editor and breaks
   1199 	 compose.c's external composition. */
   1200 	gchar *tmp = NULL;
   1201 
   1202 	if (!prefs_common.cmds_use_system_default)
   1203 		return prefs_common.ext_editor_cmd;
   1204 
   1205 	tmp = g_find_program_in_path("xdg-open");
   1206 	if (!tmp)
   1207 		return prefs_common.ext_editor_cmd;
   1208 
   1209 	g_free(tmp);
   1210 	return "xdg-open %s";
   1211 #endif /* 0 */
   1212 }
   1213 
   1214 PrefsCommon *prefs_common_get_prefs(void)
   1215 {
   1216 	return &prefs_common;
   1217 }