Last active
December 3, 2015 12:51
-
-
Save pierre3/3d4d7663b1f07dad7a2d to your computer and use it in GitHub Desktop.
TabExpansion++ Argument Completer for Search-Google
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# TabExpansion++ を使用する場合 | |
function GoogleSuggestCompletion { | |
# この属性でターゲットとなるコマンドとパラメータを指定する | |
[ArgumentCompleter( | |
Parameter = 'SearchWords', | |
Command = 'Search-Google', | |
Description='TabExpansion++ Argument Completer for Search-Google')] | |
# 入力パラメータこの通りにする。$wordToComplete に入力中の値が入ってくる。 | |
param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter) | |
# GoogleサジェストのリクエストURL | |
$url = "https://www.google.com/complete/search?output=toolbar&q=$wordToComplete" | |
$res = Invoke-WebRequest -Uri $url | |
# ストリームを先頭に戻し、Shift-jis エンコーディングで読み直す | |
$res.RawContentStream.Position = 0 | |
$reader = New-Object System.IO.StreamReader $res.RawContentStream,[System.Text.Encoding]::Default | |
try{ | |
# 結果はXMLで返ってくる | |
$xml = New-Object System.Xml.XmlDocument | |
$xml.Load($reader) | |
# <suggestion data="結果ワード" /> suggestion タグのdata 属性から結果を取得 | |
$xml.GetElementsByTagName("suggestion") | % {$_.Attributes["data"].Value } | % { | |
# スペースで区切られた複数単語の場合は引用符で囲む | |
if($_.Contains(" ")){ $word = '"' + $_ + '"' }else{ $word = $_ } | |
# 結果は System.Management.Automation.CompletionResult のオブジェクトとして返す | |
New-CompletionResult $word $_ $_ | |
} | |
} | |
finally | |
{ | |
$reader.Dispose(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# PS v5.0 から コマンドレットで登録できる。 | |
# パラメータでターゲットとなるコマンドとパラメータ名を指定する。メインの処理は ScriptBlock で渡す。 | |
Register-ArgumentCompleter -CommandName Search-Google -ParameterName SearchWords -ScriptBlock { | |
# 入力パラメータこの通りにする。$wordToComplete に入力中の値が入ってくる。 | |
param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter) | |
# GoogleサジェストのリクエストURL | |
$url = "https://www.google.com/complete/search?output=toolbar&q=$wordToComplete" | |
$res = Invoke-WebRequest -Uri $url | |
# ストリームを先頭に戻し、Shift-jis エンコーディングで読み直す | |
$res.RawContentStream.Position = 0 | |
$reader = New-Object System.IO.StreamReader $res.RawContentStream,[System.Text.Encoding]::Default | |
try{ | |
# 結果はXMLで返ってくる | |
$xml = New-Object System.Xml.XmlDocument | |
$xml.Load($reader) | |
# <suggestion data="結果ワード" /> suggestion タグのdata 属性から結果を取得 | |
$xml.GetElementsByTagName("suggestion") | % {$_.Attributes["data"].Value } | % { | |
if($_.Contains(" ")){ $word = '"' + $_ + '"' }else{ $word = $_ } | |
# 標準ではNew-CompletionResult コマンドレットが無いので、オブジェクトを直接生成 | |
[System.Management.Automation.CompletionResult]::new($word, $_, | |
[System.Management.Automation.CompletionResultType]::ParameterValue, $_ ); | |
} | |
} | |
finally | |
{ | |
$reader.Dispose(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment