On Fri, Nov 3, 2023 at 5:07 AM Eli Zaretskii wrote: > > From: Allen Li > > Date: Fri, 3 Nov 2023 03:43:35 -0700 > > Cc: 66903@debbugs.gnu.org > > > > Currently, `cd ~//bin` will cause the shell (Bash or similar) to change > to ~/bin, and Emacs/shell-mode > > will change `default-directory` to `/bin`. > > > > This bug is saying that Emacs/shell-mode should change > `default-directory` to `~/bin` by default, > > I think it should change default-directory to the directory to which > the shell switches, not necessarily ~/bin. > That sounds different from what you're implying in your other emails. Using sentences here is confusing. The current behavior is: Case 1 input: ~//bin shell: ~/bin default-directory: /bin I'm suggesting Case 2 input: ~//bin shell: ~/bin default-directory: ~/bin When you say "I think it should change default-directory to the directory to which the shell switches, not necessarily ~/bin.", that implies to me Case 2 But your other emails suggest that you want: Case 3 input: ~//bin (Emacs rewrites to /bin before sending to shell) shell: /bin default-directory: /bin Assuming that you want Case 3, I think that is horrible for multiple reasons. Firstly, a user would expect their shell to behave as in Case 2; Case 3 is a surprising and semantically different rewrite of user input. Furthermore, we would either have to rewrite all paths not just paths to `cd`, which would be infeasible and error-prone, or surprise the user again that Emacs is rewriting paths to `cd` specifically, but not, say, `rm` or `mv` or many other commands (e.g., `mv ~//bin ~//lib`). Furthermore, the only shell input rewriting that Emacs currently does is for history substitutions, and the syntax for this is identical to common shells; therefore, users can expect that Emacs does not do any surprising semantic rewrites of their shell input. Case 3 would be violating this expectation. For completeness, there is also Case 4 input: ~//bin shell: /bin (normal shell behavior) default-directory: /bin However, I am aware of zero shells in common use that behave like Case 4. Even if we consider it, it should not be the default. Also for completeness, there is a nuclear solution option, which is to replace all of the cd, pushd, popd logic that shell-mode currently implements and always run M-x dirs after every cd, pushd, popd command. This naturally results in the behavior of Case 2, but also supports Case 4 for hypothetical shells that have said behavior.