Files
PowerShell-PSReadLine/TestPSReadLine/Program.cs
T
Jason Shirk 3e23733fd5 Support 2 key chords
Support for 2 key chords has been added.

There is a small breaking change in Set-PSReadlineKeyHandler
because the -CtrlX switch is no longer needed.  It could have
been left in, but it's better to just remove it - not very
many people use this module yet.

The signature of key handlers was also changed to better support
features that have not yet been implemented.  The signature change
shouldn't affect any existing key handlers because default arguments
should cover those cases.
2013-09-11 17:55:30 -07:00

128 lines
4.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Management.Automation.Runspaces;
using PSConsoleUtilities;
namespace TestPSReadLine
{
class Program
{
static void Box(List<string> list)
{
int internalBoxWidth = Math.Min(Console.BufferWidth - 2, list.Max(e => e.Length));
int boxWidth = internalBoxWidth + 2;
int internalBoxHeight = list.Count;
int boxHeight = internalBoxHeight + 2;
var buffer = new CHAR_INFO[boxWidth * boxHeight];
buffer[0].UnicodeChar = '+';
buffer[boxWidth - 1].UnicodeChar = '+';
for (int i = 1; i < boxWidth - 1; i++)
{
buffer[i].UnicodeChar = '-';
}
for (int i = 0; i < list.Count; i++)
{
int rowStart = (i + 1) * boxWidth;
buffer[rowStart++].UnicodeChar = '|';
buffer[rowStart + internalBoxWidth].UnicodeChar = '|';
string s = list[i];
int j;
for (j = 0; j < s.Length; j++)
{
buffer[rowStart + j].UnicodeChar = s[j];
}
for (; j < internalBoxWidth; j++)
{
buffer[rowStart + j].UnicodeChar = ' ';
}
}
int lastRowStart = (boxHeight - 1) * boxWidth;
buffer[lastRowStart].UnicodeChar = '+';
for (int i = 1; i < boxWidth - 1; i++)
{
buffer[i + lastRowStart].UnicodeChar = '-';
}
buffer[lastRowStart + boxWidth - 1].UnicodeChar = '+';
for (int i = 0; i < buffer.Length; i++)
{
buffer[i].Attributes = (ushort)ConsoleColor.Blue |
((ushort)(ConsoleColor.DarkGreen) << 4);
if (i % 2 != 0)
{
buffer[i].Attributes |= 0xfff0;
}
}
var handle = NativeMethods.GetStdHandle((uint) StandardHandleId.Output);
var bufferSize = new COORD {X = (short)boxWidth, Y = (short)boxHeight};
var bufferCoord = new COORD {X = 0, Y = 0};
var writeRegion = new SMALL_RECT {
Top = 1,
Left = 1,
Bottom = (short)(1 + boxHeight),
Right = (short)(1 + boxWidth)};
Console.WriteLine("some random stuff");
Console.WriteLine("and more some random stuff");
Console.WriteLine("lorem ipsum blah blah");
Console.ReadKey();
var saveBuffer = new CHAR_INFO[buffer.Length];
NativeMethods.ReadConsoleOutput(handle, saveBuffer,
bufferSize, bufferCoord, ref writeRegion);
unsafe
{
fixed (CHAR_INFO* p = &buffer[0])
fixed (CHAR_INFO* sp = &saveBuffer[0])
{
NativeMethods.WriteConsoleOutput(handle, buffer,
bufferSize, bufferCoord, ref writeRegion);
Console.ReadKey();
NativeMethods.WriteConsoleOutput(handle, saveBuffer,
bufferSize, bufferCoord, ref writeRegion);
}
}
Console.ReadKey();
}
static void Main()
{
//Box(new List<string> {"abc", " def", "this is something coo"});
var iss = InitialSessionState.CreateDefault2();
var rs = RunspaceFactory.CreateRunspace(iss);
rs.Open();
Runspace.DefaultRunspace = rs;
PSConsoleReadLine.SetOptions(new SetPSReadlineOption
{
EditMode = EditMode.Emacs,
HistorySearchCursorMovesToEnd = true,
// ExtraPromptLineCount = 1
});
PSConsoleReadLine.SetKeyHandler(new[] {"UpArrow"}, PSConsoleReadLine.HistorySearchBackward, "", "");
PSConsoleReadLine.SetKeyHandler(new[] {"DownArrow"}, PSConsoleReadLine.HistorySearchForward, "", "");
while (true)
{
//Console.Write("C:\\Windows\nPS> ");
Console.Write("PS> ");
var line = PSConsoleReadLine.ReadLine();
Console.WriteLine(line);
line = line.Trim();
if (line.Equals("exit"))
break;
if (line.Equals("cmd"))
PSConsoleReadLine.SetOptions(new SetPSReadlineOption {EditMode = EditMode.Windows});
if (line.Equals("emacs"))
PSConsoleReadLine.SetOptions(new SetPSReadlineOption {EditMode = EditMode.Emacs});
if (line.Equals("nodupes"))
PSConsoleReadLine.SetOptions(new SetPSReadlineOption {HistoryNoDuplicates = true});
}
}
}
}