Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create a web browser link that opens a file in Intellij. Possible?

Example, qbittorent can be made to open links that are of torrent files.

Email clients mailto:

Is it possible to create links in a browser that will open the given file in Intellij? (Not full path, but entire package possibly ).

Idea is that this will be created for bitbucket.

like image 718
mjs Avatar asked May 09 '19 14:05

mjs


People also ask

How do I link to a file in IntelliJ?

From the main menu, select File | Project Structure Ctrl+Alt+Shift+S and click Modules. Select the necessary module and open the Sources tab. to the right of the necessary folder (folder path). Specify the path relative to the output folder root, and click OK.

Does IntelliJ have a browser?

Default Browser This browser will be referred to as Default in the context menu when you choose View | Open in Browser from the main menu or Open in Browser from the context menuu of a file.


2 Answers

There is an open feature request to add idea:// protocol handler.

At the moment it works on macOS only out of the box. For other platforms you can try the third-party solution or other workarounds from the ticket comments.

There is also a built-in web server providing the REST API to open files.

It will work with the relative paths only when the IDE is already running and the project is open: http://localhost:63342/api/file/relative/to/module/root/path/to/file.kt.

With the JetBrains Toolbox App installed one will be able to use jetbrains:// protocol for navigation, it's work in progress and should be available in 2019.2.

See JBProtocolNavigateCommand.kt for the reference:

// handles URLs of the following types:

// jetbrains://idea/navigate/reference?project=IDEA
// [&reference[X]=com.intellij.navigation.JBProtocolNavigateCommand[.perform][#perform]]+
// [&path[X]=com/intellij/openapi/project/impl/JBProtocolNavigateCommand.kt[:23[:1]]]+
// [&selection[X]=25:5-26:6]+

Sample URL:

jetbrains://idea/navigate/reference?project=IDEA&fqn=com.intellij.openapi.application.JetBrainsProtocolHandler#getParameters

Toolbox URL matches regexp:

"${JetBrainsProtocolHandler.PROTOCOL}([\\w\\-]+)/navigate/reference\\?project=(?<project>[\\w]+)(&fqn[\\d]*=(?<fqn>[\\w.\\-#]+))*(&path[\\d]*=(?<path>[\\w-_/\\\\.]+)(:(?<location1>[\\d]+))?(:(?<location2>[\\d]+))?)*(&selection[\\d]*=(?<line1>[\\d]+):(?<column1>[\\d]+)-(?<line2>[\\d]+):(?<column2>[\\d]+))*"

There will be also UI for copying TBX protocol URLs directly from the editor similar to the Copy Reference action in the context menu. The same will work for IDE settings navigation.

like image 60
CrazyCoder Avatar answered Sep 21 '22 15:09

CrazyCoder


As an update to @CrazyCoder's answer

This works* on Mac currently. (unable to test on anything else personally)

* There are some issues:

  • There is no context menu option for generating this link from clicking on a line of code
  • The keybinding (see below) generates the incorrect path, and it needs to be modified manually by either changing the sources root temporarily, or typing the missing path parts by hand.

There is a keybinding you can use to generate the url, under Preferences > Keymap > Copy Path/Reference > Toolbox URL. Note that the cursor location when using the keybinding matters. From what I can tell, if the cursor is at the beginning or end of a line, it generates a url with &path=..., else it generates with &fqn=.... The fqn option will often link to the wrong area of the code, especially when interfaces, libraries, auto-wiring, or anything not a direct vanilla class/object/function is attempted to link to.

I have filed an issue with more details on the broken path generated by the keybinding: https://youtrack.jetbrains.com/issue/IDEA-290640

like image 28
DJ Peach Avatar answered Sep 18 '22 15:09

DJ Peach