natecraddock / workspaces.nvim

a simple plugin to manage workspace directories in neovim
MIT License
309 stars 15 forks source link

:WorkspaceOpen affects all splits, this behavior is not desired. #13

Closed winkee01 closed 1 year ago

winkee01 commented 1 year ago

When I have multiple splits, and I do :WorkspacesOpen [name] in one of the splits, it changes cwd for all the splits, which is not desired, because semantically it should only do :lcd instead of :cd.

Another bug is: if I cancel in telescope's popup window, cwd still changes, which is also not desired.

natecraddock commented 1 year ago

Hi! As you noticed, the default is opening a workspace changes the current directory for entire nvim process.

There is a config setting global_cd that you can set to false which should resolve this. Could you try that and let me know if it works?

I will look at the canceling telescope bug though

winkee01 commented 1 year ago

I tried with global_cd = false but it still changes globally, here is a screen shot.

https://user-images.githubusercontent.com/49930785/197454721-9ec669fb-988d-4bf8-9dd7-4c1ad20cfa35.mp4

natecraddock commented 1 year ago

From what I can see, you are using shortcuts mapped in telescope to open a split right? Here is what I think is happening

So a solution would involve opening a split in a new directory before the telescope file picker is run. At the moment I don't have any ideas, but I will keep thinking

winkee01 commented 1 year ago

From what I can see, you are using shortcuts mapped in telescope to open a split right? Here is what I think is happening

  • You start in the eslinter workspace
  • Running WorkspaceOpen to open the nvimtest workspace changes the current window to that new directory
  • then a hook opens telescope file picker
  • the file opened in a new split takes the directory from the first window

So a solution would involve opening a split in a new directory before the telescope file picker is run. At the moment I don't have any ideas, but I will keep thinking

I use <c-v> to open in a split vertically when I select an item in telescope popup window. I think it's a default mapping, <c-x> to open horizontally, <c-v> to open vertically.

There are two projects involved and two splits involved, in the first window, I open a file from project1 (~/dev/web/eslinter/test1.js), then I use :WorkspaceOpen to open another file from project2 (~/dev/nvimtest/xxx.js) in a new split. The correct result should be, in split1, :pwd should print project1's root dir (which is ~/dev/web/eslinter), and in split2, :pwd should print project2's root dir (which is ~/dev/nvimtest). Unfortunately, they both print ~/dev/nvimtest, which is not desired.

natecraddock commented 1 year ago

What you just described is exactly what I was trying to say 😂 I guess I wasn't very clear, sorry about that.

The issue remains though. This plugin changes the directory (with :lcd) before the telescope file picker opens, which means the :lcd takes place before the split. That's why both windows have the same directory.

I thought a little about this. There are two solutions I can think of

  1. Open a split and then run :WorkspaceOpen from that new window
  2. Make a new custom command (maybe :WorkspaceOpenVsp) that first makes a vertical split and then runs the workspace changing code.

Hopefully that all makes sense, do you have any more questions?

winkee01 commented 1 year ago

my bad. How about perform the CWD change as a post hook of the telescope instead of runing before it. by that way, you can avoid those bugs?

natecraddock commented 1 year ago

No worries! The problem with that idea is that the telescope prompt wouldn't open in the new directory, it would still show the files from the first workspace.

natecraddock commented 1 year ago

Another bug is: if I cancel in telescope's popup window, cwd still changes, which is also not desired

This bug is due to the same root cause. The cwd occurs before the telescope find_files opens, so I can't undo that in this case.

I am going to close this issue, but please feel free to comment if you feel like there is more that needs to be discussed!