]> git.llucax.com Git - software/mutt-debian.git/blob - debian/patches/features/sensible_browser_position
744353a89f8f529f20ede902e4b6acffaddec7e4
[software/mutt-debian.git] / debian / patches / features / sensible_browser_position
1 # vi: ft=diff
2 This is the sensible browser position patch by Haakon Riiser.
3
4   * Found in: <20050309162127.GA5656@s>
5     http://lists.df7cb.de/mutt/message/20050309.162127.a244a894.en.html
6
7 == END PATCH
8 Index: mutt/menu.c
9 ===================================================================
10 --- mutt.orig/menu.c    2009-06-25 12:35:36.000000000 +0200
11 +++ mutt/menu.c 2009-06-25 12:36:19.000000000 +0200
12 @@ -853,8 +853,17 @@
13  
14  int mutt_menuLoop (MUTTMENU *menu)
15  {
16 +  static int last_position = -1;
17    int i = OP_NULL;
18  
19 +  if ( menu->max && menu->is_mailbox_list ) {
20 +    if ( last_position > (menu->max-1) ) {
21 +      last_position = -1;
22 +    } else if (last_position >= 0) {
23 +      menu->current = last_position;
24 +    }
25 +  }
26 +
27    FOREVER
28    {
29      if (option (OPTMENUCALLER))
30 @@ -1082,6 +1091,8 @@
31         break;
32  
33        default:
34 +        if (menu->is_mailbox_list)
35 +          last_position = menu->current;
36         return (i);
37      }
38    }
39 Index: mutt/browser.c
40 ===================================================================
41 --- mutt.orig/browser.c 2009-06-25 12:35:37.000000000 +0200
42 +++ mutt/browser.c      2009-06-25 12:36:19.000000000 +0200
43 @@ -55,6 +55,7 @@
44    int num;
45  } FOLDER;
46  
47 +static char OldLastDir[_POSIX_PATH_MAX] = "";
48  static char LastDir[_POSIX_PATH_MAX] = "";
49  static char LastDirBackup[_POSIX_PATH_MAX] = "";
50  
51 @@ -519,9 +520,13 @@
52    menu->tagged = 0;
53    
54    if (buffy)
55 +  {
56 +    menu->is_mailbox_list = 1;
57      snprintf (title, titlelen, _("Mailboxes [%d]"), mutt_buffy_check (0));
58 +  }
59    else
60    {
61 +    menu->is_mailbox_list = 0;
62      strfcpy (path, LastDir, sizeof (path));
63      mutt_pretty_mailbox (path, sizeof (path));
64  #ifdef USE_IMAP
65 @@ -530,8 +535,22 @@
66               path, NONULL (Mask.pattern));
67    else
68  #endif
69 -    snprintf (title, titlelen, _("Directory [%s], File mask: %s"),
70 -             path, NONULL(Mask.pattern));
71 +     {
72 +       char *p = strrchr (OldLastDir, '/');
73 +       if (p && p - OldLastDir == mutt_strlen (LastDir) &&
74 +          mutt_strncmp (LastDir, OldLastDir, p - OldLastDir) == 0)
75 +       {
76 +        /* If we get here, it means that LastDir is the parent directory of
77 +         * OldLastDir.  I.e., we're returning from a subdirectory, and we want
78 +         * to position the cursor on the directory we're returning from. */
79 +        int i;
80 +        for (i = 0; i < state->entrymax; i++)
81 +          if (mutt_strcmp (state->entry[i].name, p + 1) == 0)
82 +            menu->current = i;
83 +       }
84 +       snprintf (title, titlelen, _("Directory [%s], File mask: %s"),
85 +                path, NONULL(Mask.pattern));
86 +     }
87    }
88    menu->redraw = REDRAW_FULL;
89  }
90 @@ -714,7 +733,6 @@
91  #endif
92             )
93           {
94 -           char OldLastDir[_POSIX_PATH_MAX];
95  
96             /* save the old directory */
97             strfcpy (OldLastDir, LastDir, sizeof (OldLastDir));
98 Index: mutt/mutt_menu.h
99 ===================================================================
100 --- mutt.orig/mutt_menu.h       2009-06-25 12:35:44.000000000 +0200
101 +++ mutt/mutt_menu.h    2009-06-25 12:36:19.000000000 +0200
102 @@ -49,6 +49,7 @@
103    int offset;  /* which screen row to start the index */
104    int pagelen; /* number of entries per screen */
105    int tagprefix;
106 +  int is_mailbox_list;
107  
108    /* Setting dialog != NULL overrides normal menu behaviour. 
109     * In dialog mode menubar is hidden and prompt keys are checked before