本文整理汇总了C#中ITextView.FlushKillSring方法的典型用法代码示例。如果您正苦于以下问题:C# ITextView.FlushKillSring方法的具体用法?C# ITextView.FlushKillSring怎么用?C# ITextView.FlushKillSring使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ITextView
的用法示例。
在下文中一共展示了ITextView.FlushKillSring方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Execute
/// <summary>
/// Executes the emacs command
/// </summary>
/// <param name="view"></param>
/// <param name="metadata"></param>
public void Execute(ITextView view, IEmacsCommandMetadata metadata, bool evaluateUniversalArgument = true)
{
using (BufferMonitor bufferMonitor = BufferMonitor.Create(view.TextBuffer))
{
try
{
EmacsCommand command = CreateCommand(metadata);
EmacsCommand inverseCommand = null;
IEmacsCommandMetadata inverseCommandMetadata = null;
var context = new EmacsCommandContext(
this, this.TextStructureNavigatorSelectorService,
this.EditorOperationsFactoryService.GetEditorOperations(view),
view, CommandRouterProvider.GetCommandRouter(view));
if (command != null)
{
var history = this.TextUndoHistoryRegistry.GetHistory(context.TextBuffer);
using (var transaction = CreateTransaction(metadata, history))
{
var repeatCount = 1;
bool shouldExecuteInverse = false;
if (evaluateUniversalArgument)
{
// Check if we should execute the inverse logic of the command by checking if the universal argument is lower than 0
shouldExecuteInverse = GetUniversalArgumentOrDefault() < 0;
if (shouldExecuteInverse)
{
// Search the inverse command using the metadata
inverseCommandMetadata = GetCommandMetadata(metadata.InverseCommand);
inverseCommand = CreateCommand(inverseCommandMetadata);
}
// If the command specifies that can be repeated use the universal argument as the counter, otherwise execute the command only once.
if (metadata.CanBeRepeated)
repeatCount = Math.Abs(GetUniversalArgumentOrDefault(1));
}
for (; repeatCount > 0; repeatCount--)
{
if (shouldExecuteInverse)
{
// Execute the inverse logic
if (inverseCommand != null)
inverseCommand.Execute(context);
else
command.ExecuteInverse(context);
}
else
{
// Execute the normal logic
command.Execute(context);
}
}
// TODO: Check command error and rollback the transaction
if (transaction != null)
{
transaction.Complete();
}
// If the command executed was a kill command, then we want to append the text that was cut
// to any currently text cut for the view.
// If the command is not a kill command and we have had some cut commands executed previously
// that accumulated deleted text, then we want to put the data on the clipboard and reset
// the accumulated text.
if (metadata.IsKillCommand)
{
view.AppendKillString(bufferMonitor.BufferChanges);
}
else
{
view.FlushKillSring(this.ClipboardRing);
}
this.LastExecutedCommand = shouldExecuteInverse ? inverseCommandMetadata : metadata;
}
}
}
catch (NoOperationException)
{
// Do nothing
}
}
}