How to get the target of a shortcut? - matlab

How can I resolve a shortcut to its ultimate target on Windows programmatically?
I specify "ultimate" above to include the general case
shortcut → shortcut_1 →… → shortcut_n → target, in which there may be one or more "intervening" shortcut(s) in reference chain between shortcut and target.Also, I specify "programmatically" to rule out solutions that require interactive use of some feature of the MATLAB GUI.
(On Unix systems, one way to resolve shortcuts is to use something like system(['readlink ' shortcut]), or even better, if available, system(['readlink -f ' shortcut]). But I have not been able to find anything like this on Windows.)

If you open the shortcut file and read the first line you should see it.
>>fID=fopen(shortcutpath);
>>C=fgetl(fID);
C =
*some weird string* *filepath* *some other weird string*
Then with regexp you can find it easily.

Assuming your goal is just to open the shortcut to its destination, it seems to be as easy as on unix. Simply use this code to open a shortcut named sc in your current directory:
!sc.lnk % Equivalent to system('sc.lnk')
If the file is not in your current directory you need to add the path of course. If the shortcut refers to a shortcut it automatically ends up on the final result.

You could do it using COM.
Example:
server = actxserver('WScript.Shell');
path = server.CreateShortcut('D:\temp.lnk').TargetPath;
server.delete;
As Windows doesn't allow a shortcut to a shortcut, you get the "ultimate" target. :)

Related

Visual Studio Code Ctrl + comma does not work [duplicate]

I am used to Resharper where I can search for files, not the content, but the filename, which makes it quick to open new files.
Is this feature implemented in Visual Studio Code and is there a shortcut for it?
Using Go to File... which is under the Go menu or using keyboard shortcut:
On Windows Ctrl+p or Ctrl+e
On macOS Cmd ⌘+p
On Linux Ctrl+p or Ctrl+e
Then type the file name.
Also be sure to checkout that you can set your own keybindings and that there are cheatsheets available for Windows, macOS and Linux.
Since the 1.70.0 release in July 2022, you can find and filter in tree views such as the Find Explorer. You can press Ctrl+F inside trees to pop up the Find control.
Before the 1.70.0 release
when you click anywhere in the explorer tree, and start typing something on the keyboard, the search keyword appears in the top right corner of the screen : ("module.ts")
And when you hover over the keyword with the mouse cursor, you can click on "Enable Filter on Type" to filter tree with your search !
On OSX, for me it's cmd ⌘ + p. cmd ⌘ + e just searches within the currently opened file.
Method1
Go->Go to File OR cntrl+p
Search your file
Method2
view->command palette OR cntrl+shift+p
type "Go to file"
Search your file
Win: CTRL+P or CTRL+E
Mac: CMD+P or CMD+E
Don't want to remember another shortcut?
Open the Command Palette:
Menu: View -> Command Palette
Windows Shortcut: Ctrl+Shift+P
and hit backspace to delete ">" character and then begin typing to search for files via filename. :)
Other answers don't mention this command is named workbench.action.quickOpen.
You can use this to search the Keyboard Shortcuts menu located in Preferences.
On MacOS the default keybinding is cmd ⌘ + P.
(Coming from Sublime Text, I always change this to cmd ⌘ + T)
Also works in ubuntu with Ctrl+E
You can also press F1 to open the Command Palette and then remove the > via Backspace. Now you can search for files, too.
consider you have thousand of files in vs code and you want to search for a file with particular name then
Right click VS code editor.
Select Command Palete
In the text box type the file name
The problem with Ctrl+P (or Cmd+P) is that it searches your workspace while ignoring files and folders set in the .gitignore file. To change this behavior, add "search.useIgnoreFiles": false in your settings.json file under .vscode directory.
NOTE that search.exclude and files.exclude settings will override this. So, in your settings.json file, you should comment them out or set these two settings to false as well if you want to search all the files and directories in your VS Code project. An example for settings.json where search.exclude and files.exclude are commented out for searching all the files:
{
"search.exclude": {
//"**/Lib": true,
//"**/Scripts": true
},
"files.exclude": {
//"**/Lib": true,
//"**/Scripts": true
},
"search.useIgnoreFiles": false
}
Look here for more info.
I'm using VSCode 1.12.1
OSX press : Cmd + p
If you just want to search a single file name
Just Ctrl+P, then type and choose your one
If you want to open all files whose name contains a particular string
Open search panel
Put any common words inside those files
in 'files to include', put the search string with *, e.g. *Signaller*
For filtering in the tree on keyboard typing. The feature is deprecated. No more work.
No more of this old red inflexible box:
The replacement is way better and more interesting:
Actually not really. It could have been. The new way only filters on expanded folders only. And that's a shame. Check the last session for where the development is at. And for the options we are left with.
https://code.visualstudio.com/updates/v1_70#_tree-find-control
CMD + F (mac) or CTRL + F (else) [while focused]
No settings are needed. It just works. And more elegantly (except for the problem of only filtering searching through the visible expanded directories).
And for the default mode. highlight or filter. You can change that with:
"workbench.list.defaultFindMode": "highlight"
"workbench.list.defaultFindMode": "filter"
Only the open folders and visible elements Problem and what are we at?
It's great to know about this feature. But then you'll soon encounter the limitation it has at the moment.
Filtering only through open directories. It can help great. But then we want to filter through all. And when the project is big. That becomes totally unusable.
Issues: 1, 2, 3
We can see it's added to the backlog here:
https://github.com/microsoft/vscode/issues/116286
duplicates: 1
You may think:
Expand all
Ok what about expanding all. Then using this.
===> That would work great => But => There is no such a feature of expanding all now.
Issues: 1, 2, duplicates: 1
Some configuration
At the moment no configuration does help!
"workbench.list.keyboardNavigation": "filter"
doesn't and many others. I tried them all. For the moment!
Extension that do that probably using web view
None exists. And to be implemented one needs to figure out the indexation used by vscode. Or implement its own indexation and then fuzzy search through using indexes. Otherwise something more simple that works for no big directories. Can be built fast. [I don't have time to do it myself. Especially that this would be resolved sometime in the future and we still can work with CTRL|CMD + P]
So that to clear for you the thoughts that you may get. And save you time.
Resume
So shortly we may see the feature of filtering all in a future version of vscode as it was added to the backlog. Right now we will be waiting. And maybe long enough.
Expand all seems not to be coming at any time or any time soon.
So what now. Left with nothing? Here a WORKAROUND
The now is => use CTRL|CMD + F on visible things. or on folders. By manually expanding them.
Or use CTRL|CMD + P without closing it. By following the next rules:
To open multiple files in the same editor. Navigate up and down and for each file use Right Arrow.
When they open they will be opened beside each other. You can use CMD|CTRL + ALT + LEFT | RIGHT to navigate between tabs left and right. Faster and better with the keyboard. The last open is the one you'll be at when you close the pallet.
To open a file in a new split editor use ALT + RIGHT ARROW.
Ref: 1
For windows.
if Ctrl+p doesn't always work
use Ctrl+shift+n instead.
To search for specifil file types in visual studio code.
Type ctrl+p and then search for something like *.py.
Simple and easy
If using vscodevim extension, ctrl + p won't work so I saw another answer using:
ctrl + shift + p
which opens the command palette. Hit backspace to remove the '>' and then start typing your filename.
Check your settings for 'Use Ignore Files' and 'Use Global Ignore Files'.
If these are checked, VSCode won't search any folders listed in .gitignore or .ignore
With VSCode 1.75 (Jan 2023), you will have a new file filter option: a 'Fuzzy Match' toggle.
That comes from issue 116286: Tree: Support continuous find
In a list of files I can filter them by start typing the name of the file. It is a super useful feature when you have hundreds+ files.
My issue is that the filter is trying to find the letters in the whole file name.
Here is an example search for word "file":
this-is-**file**-i-looked-for.jpeg (I expect this to be returned)
**f**or-th**i**s-**l**.jp**e**g (This should not be returned, it is only a random match)
Would it be possible to add there extra settings to only returns full strings matches? Or is there some setting already buried somewhere?
Solution: adding a 'Fuzzy Match' toggle button to the tree find widget.
New options:
defaultFindMatchTypeSettingKey.fuzzy: Use fuzzy matching when searching.
defaultFindMatchTypeSettingKey.contiguous': Use contiguous matching when searching.
I ended up installing the extension File Name Search. It displays in the side navigation bar all files that match a name part, so I can open them one by one to check them or process them.
Ctrl + p: we have to repeat the search for each file
Ctrl + f in the
explorer: it does not search, it just filters files in epanded
folders
Here is a demo of a search in explorer followed by a search in the Filename search extension:

VS Code alternative to webstorm's "find usages"

In WebStorm there's a really nice feature that you can right-click a file and choose "Find usages...", what would output all the files and all the line numbers in the project where that file is referenced (e.g. where path to it is specified as a string in JS require).
I really love that feature, since it's very useful for refactoring - before I delete or edit smth I might want to find usages first to get clear understanding of what other things would be affected.
Is there a way I could do the same thing with VS Code?
Are there alternatives to Webstorm's "Safe delete" (when deleting a file it looks for usages first and shows a warning if there're some) and rename - so if I rename e.g. foo.js to bar.js all references to it in the project (e.g. paths within require) would be automatically updated?
Unfortunately there are no built in ways to do this in VS Code and I don't know of any extensions to do this, either.
Actually you can open the helper console ( Cmd + Shift + P in mac and the shortcut is Shift + F12) and go to find all usages

Notepad++ Macro to open specific file

How can I create a macro in Notepad++ to open a specific file (for example C:\Users\ega\all.txt) ?
Instead of a Macro I used 'Run' and browsed the file and added a shortcut.
the question has sense: perhaps one would need firstly to open a specific file, then to operate with it and save operations in a single macro

How do I search for files in Visual Studio Code?

I am used to Resharper where I can search for files, not the content, but the filename, which makes it quick to open new files.
Is this feature implemented in Visual Studio Code and is there a shortcut for it?
Using Go to File... which is under the Go menu or using keyboard shortcut:
On Windows Ctrl+p or Ctrl+e
On macOS Cmd ⌘+p
On Linux Ctrl+p or Ctrl+e
Then type the file name.
Also be sure to checkout that you can set your own keybindings and that there are cheatsheets available for Windows, macOS and Linux.
Since the 1.70.0 release in July 2022, you can find and filter in tree views such as the Find Explorer. You can press Ctrl+F inside trees to pop up the Find control.
Before the 1.70.0 release
when you click anywhere in the explorer tree, and start typing something on the keyboard, the search keyword appears in the top right corner of the screen : ("module.ts")
And when you hover over the keyword with the mouse cursor, you can click on "Enable Filter on Type" to filter tree with your search !
On OSX, for me it's cmd ⌘ + p. cmd ⌘ + e just searches within the currently opened file.
Method1
Go->Go to File OR cntrl+p
Search your file
Method2
view->command palette OR cntrl+shift+p
type "Go to file"
Search your file
Win: CTRL+P or CTRL+E
Mac: CMD+P or CMD+E
Don't want to remember another shortcut?
Open the Command Palette:
Menu: View -> Command Palette
Windows Shortcut: Ctrl+Shift+P
and hit backspace to delete ">" character and then begin typing to search for files via filename. :)
Other answers don't mention this command is named workbench.action.quickOpen.
You can use this to search the Keyboard Shortcuts menu located in Preferences.
On MacOS the default keybinding is cmd ⌘ + P.
(Coming from Sublime Text, I always change this to cmd ⌘ + T)
Also works in ubuntu with Ctrl+E
You can also press F1 to open the Command Palette and then remove the > via Backspace. Now you can search for files, too.
consider you have thousand of files in vs code and you want to search for a file with particular name then
Right click VS code editor.
Select Command Palete
In the text box type the file name
The problem with Ctrl+P (or Cmd+P) is that it searches your workspace while ignoring files and folders set in the .gitignore file. To change this behavior, add "search.useIgnoreFiles": false in your settings.json file under .vscode directory.
NOTE that search.exclude and files.exclude settings will override this. So, in your settings.json file, you should comment them out or set these two settings to false as well if you want to search all the files and directories in your VS Code project. An example for settings.json where search.exclude and files.exclude are commented out for searching all the files:
{
"search.exclude": {
//"**/Lib": true,
//"**/Scripts": true
},
"files.exclude": {
//"**/Lib": true,
//"**/Scripts": true
},
"search.useIgnoreFiles": false
}
Look here for more info.
I'm using VSCode 1.12.1
OSX press : Cmd + p
If you just want to search a single file name
Just Ctrl+P, then type and choose your one
If you want to open all files whose name contains a particular string
Open search panel
Put any common words inside those files
in 'files to include', put the search string with *, e.g. *Signaller*
For filtering in the tree on keyboard typing. The feature is deprecated. No more work.
No more of this old red inflexible box:
The replacement is way better and more interesting:
Actually not really. It could have been. The new way only filters on expanded folders only. And that's a shame. Check the last session for where the development is at. And for the options we are left with.
https://code.visualstudio.com/updates/v1_70#_tree-find-control
CMD + F (mac) or CTRL + F (else) [while focused]
No settings are needed. It just works. And more elegantly (except for the problem of only filtering searching through the visible expanded directories).
And for the default mode. highlight or filter. You can change that with:
"workbench.list.defaultFindMode": "highlight"
"workbench.list.defaultFindMode": "filter"
Only the open folders and visible elements Problem and what are we at?
It's great to know about this feature. But then you'll soon encounter the limitation it has at the moment.
Filtering only through open directories. It can help great. But then we want to filter through all. And when the project is big. That becomes totally unusable.
Issues: 1, 2, 3
We can see it's added to the backlog here:
https://github.com/microsoft/vscode/issues/116286
duplicates: 1
You may think:
Expand all
Ok what about expanding all. Then using this.
===> That would work great => But => There is no such a feature of expanding all now.
Issues: 1, 2, duplicates: 1
Some configuration
At the moment no configuration does help!
"workbench.list.keyboardNavigation": "filter"
doesn't and many others. I tried them all. For the moment!
Extension that do that probably using web view
None exists. And to be implemented one needs to figure out the indexation used by vscode. Or implement its own indexation and then fuzzy search through using indexes. Otherwise something more simple that works for no big directories. Can be built fast. [I don't have time to do it myself. Especially that this would be resolved sometime in the future and we still can work with CTRL|CMD + P]
So that to clear for you the thoughts that you may get. And save you time.
Resume
So shortly we may see the feature of filtering all in a future version of vscode as it was added to the backlog. Right now we will be waiting. And maybe long enough.
Expand all seems not to be coming at any time or any time soon.
So what now. Left with nothing? Here a WORKAROUND
The now is => use CTRL|CMD + F on visible things. or on folders. By manually expanding them.
Or use CTRL|CMD + P without closing it. By following the next rules:
To open multiple files in the same editor. Navigate up and down and for each file use Right Arrow.
When they open they will be opened beside each other. You can use CMD|CTRL + ALT + LEFT | RIGHT to navigate between tabs left and right. Faster and better with the keyboard. The last open is the one you'll be at when you close the pallet.
To open a file in a new split editor use ALT + RIGHT ARROW.
Ref: 1
For windows.
if Ctrl+p doesn't always work
use Ctrl+shift+n instead.
To search for specifil file types in visual studio code.
Type ctrl+p and then search for something like *.py.
Simple and easy
If using vscodevim extension, ctrl + p won't work so I saw another answer using:
ctrl + shift + p
which opens the command palette. Hit backspace to remove the '>' and then start typing your filename.
Check your settings for 'Use Ignore Files' and 'Use Global Ignore Files'.
If these are checked, VSCode won't search any folders listed in .gitignore or .ignore
With VSCode 1.75 (Jan 2023), you will have a new file filter option: a 'Fuzzy Match' toggle.
That comes from issue 116286: Tree: Support continuous find
In a list of files I can filter them by start typing the name of the file. It is a super useful feature when you have hundreds+ files.
My issue is that the filter is trying to find the letters in the whole file name.
Here is an example search for word "file":
this-is-**file**-i-looked-for.jpeg (I expect this to be returned)
**f**or-th**i**s-**l**.jp**e**g (This should not be returned, it is only a random match)
Would it be possible to add there extra settings to only returns full strings matches? Or is there some setting already buried somewhere?
Solution: adding a 'Fuzzy Match' toggle button to the tree find widget.
New options:
defaultFindMatchTypeSettingKey.fuzzy: Use fuzzy matching when searching.
defaultFindMatchTypeSettingKey.contiguous': Use contiguous matching when searching.
I ended up installing the extension File Name Search. It displays in the side navigation bar all files that match a name part, so I can open them one by one to check them or process them.
Ctrl + p: we have to repeat the search for each file
Ctrl + f in the
explorer: it does not search, it just filters files in epanded
folders
Here is a demo of a search in explorer followed by a search in the Filename search extension:

Using vim as default editor for matlab

I want to use gvim as the standard editor for Matlab. It used to work on Linux but now I am forced to use windows and I can't seem to figure out how to set the editor such that files are opened in gvim in a new tab.
In the preferences there is a field which allows to pass a command that points to the prefered text editor. That works, but things fail when I try to give additional options, in my case that would be "--remote-tab-silent" to tell gvim to open the file in a running instance in a new tab. More specifically, the following line in the matlab preferences works:
C:\pathtovim\gvim.exe
while this one fails
C:\pathtovim\gvim.exe --remote-tab-silent
A command line opens with the following error message (my own translation from German):
The command ""C:\pathtovim\gvim.exe --remote-tab-silent"" is either spelled incorrectly or could not be found.
My guess is that it has something to do with the additional quotes, I have no idea why the command is issued with quotes, even though in the field I put it without. The follwing commands work when typed into the command line directly:
"C:\pathtovim\gvim.exe"
C:\pathtovim\gvim.exe --remote-tab-silent file.m
and this one fails:
"C:\pathtovim\gvim.exe --remote-tab-silent file.m"
I'd really appreciate any help! Thanks!
I can't find a good way to hack around it through the MATLAB settings; it looks like MATLAB is stupidly expecting the text editor to take only file names as arguments.
I think your best option, is to create a .bat script that simply passes any arguments it receives on to Vim, inserting the --remote-tab-silent.
I.e. create a .bat file with these contents:
"C:\pathtovim\gvim.exe" --remote-tab-silent %*
Then set up your MATLAB preferences to invoke the .bat file rather than Vim.