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