eclipseeclipse-pluginintegrationstackexchange-api

Integrate Stack Overflow into IDEs?


Okay, this is just a crazy idea I have. Stack Overflow looks very structured and integrable into development applications. So would it be possible, even useful, to have a Stack Overflow plugin for, say, Eclipse?

Which features of Stack Overflow would you like to have directly integrated into your IDE so you can use it "natively" without changing to a browser?

EDIT: I'm thinking about ways of deeper integration than just using the web page inside the IDE. Like when you use a certain Java class and have a problem, answers from SO might flare up. There would probably be cases where something like this is annoying, but others may be very helpful.


Solution

  • Following up on Josh's answer. This VS Macro will search StackOverflow for highlighted text in the Visual Studio IDE. Just highlight and press Alt+F1.

    Public Sub SearchStackOverflowForSelectedText()
        Dim s As String = ActiveWindowSelection().Trim()
        If s.Length > 0 Then
            DTE.ItemOperations.Navigate("http://www.stackoverflow.com/search?q=" & _
                Web.HttpUtility.UrlEncode(s))
        End If
    End Sub
    
    Private Function ActiveWindowSelection() As String
        If DTE.ActiveWindow.ObjectKind = EnvDTE.Constants.vsWindowKindOutput Then
            Return OutputWindowSelection()
        End If
        If DTE.ActiveWindow.ObjectKind = "{57312C73-6202-49E9-B1E1-40EA1A6DC1F6}" Then
            Return HTMLEditorSelection()
        End If
        Return SelectionText(DTE.ActiveWindow.Selection)
    End Function
    
    Private Function HTMLEditorSelection() As String
        Dim hw As HTMLWindow = ActiveDocument.ActiveWindow.Object
        Dim tw As TextWindow = hw.CurrentTabObject
        Return SelectionText(tw.Selection)
    End Function
    
    Private Function OutputWindowSelection() As String
        Dim w As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
        Dim ow As OutputWindow = w.Object
        Dim owp As OutputWindowPane = ow.OutputWindowPanes.Item(ow.ActivePane.Name)
        Return SelectionText(owp.TextDocument.Selection)
    End Function
    
    Private Function SelectionText(ByVal sel As EnvDTE.TextSelection) As String
        If sel Is Nothing Then
            Return ""
        End If
        If sel.Text.Length = 0 Then
            SelectWord(sel)
        End If
        If sel.Text.Length <= 2 Then
            Return ""
        End If
        Return sel.Text
    End Function
    
    Private Sub SelectWord(ByVal sel As EnvDTE.TextSelection)
        Dim leftPos As Integer
        Dim line As Integer
        Dim pt As EnvDTE.EditPoint = sel.ActivePoint.CreateEditPoint()
    
        sel.WordLeft(True, 1)
        line = sel.TextRanges.Item(1).StartPoint.Line
        leftPos = sel.TextRanges.Item(1).StartPoint.LineCharOffset
        pt.MoveToLineAndOffset(line, leftPos)
        sel.MoveToPoint(pt)
        sel.WordRight(True, 1)
    End Sub
    

    To install:

    1. go to Tools - Macros - IDE
    2. create a new Module with a name of your choice under "MyMacros". Or use an existing module.
    3. paste the above code into the module
    4. add a reference to the System.Web namespace (for HttpUtility) to the module
    5. close the macro IDE window
    6. go to Tools - Options - Environment - Keyboard
    7. type "google" in the Show Commands Containing textbox. The SearchGoogleForSelectedText macro should show up
    8. click in the Press Shortcut Keys textbox, then press Alt+F1
    9. click the Assign button
    10. click OK

    This is all taken from Jeff Atwood's Google Search VS Macro post, just modified to search StackOverflow instead.