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