There ISEs Output pane doesn't always satisfy my needs, because it truncates and wraps output but you can put your Output into the current or new Editor panes and that works fine. Today I focus on using the current editor pane.
My goal is to insert the output exactly at the starting of the line below the selection if there is one or at the end of the editor.
First I found it difficult to get the start and end of a selection, but than I found a clever work around. I can even determine, if a selection was done from left to right or from right to left.
But don't use this possibility. It would be really confusing.
Here is my test code, with which I designed (honestly redesigned) the logic to evaluate the output location in SQLPSX (next release).
Have fun studying it. Just put the code below it into an ISE editor, select some text (or nothing) and press F5.
Bernd
function Get-InfoAboutCurentFilesEditor { $editor = $psIse.CurrentFile.Editor $LineCount = $editor.LineCount $CaretLine = $editor.CaretLine $caretColumn = $editor.CaretColumn $CaretLineLength = $editor.GetLineLength($CaretLine) $CaretAtLineEnd = $caretColumn -eq $CaretLineLength + 1 $CaretInLastLine = $CaretLine -eq $LineCount $SelectedText = $editor.SelectedText $hasSelection = $SelectedText -ne '' if ($hasSelection) { # delete selected text $editor.InsertText('') $StartLine = $editor.CaretLine $StartColumn = $editor.CaretColumn # reinsert the text $editor.InsertText($SelectedText) $EndLine = $editor.CaretLine $EndColumn = $editor.CaretColumn # restore the selection $editor.select($StartLine, $StartColumn, $EndLine, $EndColumn) $reverse = $CaretLine -eq $StartLine -and $caretColumn -eq $StartColumn } else { $StartLine = $EndLine = $LineCount $StartColumn = $EndColumn = $editor.GetLineLength($EndLine) + 1 $reverse = $False } if ( $EndLine -lt $LineCount) { $outputLine = $EndLine + 1 $outputColumn = 1 $NeedsNewLine = $False } else { $outputLine = $EndLine $outputColumn = $EndColumn if ($EndColumn -ne 1) { $NeedsNewLine = $True $outputColumn = $editor.GetLineLength($EndLine) + 1 } else { $NeedsNewLine = $False } } @" DisplayName: $($psIse.CurrentFile.DisplayName) LineCount: $LineCount CaretLine: $CaretLine CaretColumn: $caretColumn CaretLineLength: $CaretLineLength CaretAtLineEnd: $CaretAtLineEnd CaretInLastLine: $CaretInLastLine hasSelection: $hasSelection reverse: $reverse outputLine: $outputLine outputColumn: $outputColumn NeedsNewLine: $NeedsNewLine "@ } Get-InfoAboutCurentFilesEditor
Keine Kommentare:
Kommentar veröffentlichen