Functions/GenXdev.Queries.Webbrowser/Open-WolframAlphaQuery.ps1
################################################################################ <# .SYNOPSIS Opens a Wolfram Alpha query in a web browser. .DESCRIPTION Opens one or more Wolfram Alpha queries in a web browser. Supports configurable monitor selection and browser options through dynamic parameters. Provides comprehensive browser control including positioning, sizing, and automation capabilities for enhanced scientific computation workflows. .PARAMETER Queries The search queries to perform on Wolfram Alpha. Accepts multiple queries that will be processed sequentially. Each query is URL-encoded automatically for safe transmission to the Wolfram Alpha service. .PARAMETER Language The language of the returned search results. Affects the Accept-Language HTTP header sent to Wolfram Alpha for localized computational results. .PARAMETER Private Opens in incognito/private browsing mode to prevent storage of search history and cookies from the Wolfram Alpha session. .PARAMETER Force Force enable debugging port, stopping existing browsers if needed for development and automation scenarios. .PARAMETER Edge Opens in Microsoft Edge browser specifically. .PARAMETER Chrome Opens in Google Chrome browser specifically. .PARAMETER Chromium Opens in Microsoft Edge or Google Chrome, depending on what the default browser is. Prefers Chromium-based browsers for consistent behavior. .PARAMETER Firefox Opens in Firefox browser specifically. .PARAMETER All Opens in all registered modern browsers simultaneously for cross-browser testing or comparison of results. .PARAMETER Monitor The monitor to use for display. 0 = default monitor, -1 = discard window positioning, -2 = configured secondary monitor. Defaults to -1 for no positioning constraints. .PARAMETER FullScreen Opens in fullscreen mode for immersive computational exploration. .PARAMETER Width The initial width of the webbrowser window in pixels. .PARAMETER Height The initial height of the webbrowser window in pixels. .PARAMETER X The initial X position of the webbrowser window on screen. .PARAMETER Y The initial Y position of the webbrowser window on screen. .PARAMETER Left Place browser window on the left side of the screen. .PARAMETER Right Place browser window on the right side of the screen. .PARAMETER Top Place browser window on the top side of the screen. .PARAMETER Bottom Place browser window on the bottom side of the screen. .PARAMETER Centered Place browser window in the center of the screen. .PARAMETER ApplicationMode Hide the browser controls for a distraction-free computational environment. .PARAMETER NoBrowserExtensions Prevent loading of browser extensions for a clean computational session. .PARAMETER DisablePopupBlocker Disable the popup blocker to allow Wolfram Alpha interactive elements. .PARAMETER AcceptLang Set the browser accept-lang http header for localized computational results. .PARAMETER KeysToSend Keystrokes to send to the Browser window, see documentation for cmdlet GenXdev.Windows\Send-Key. .PARAMETER SendKeyEscape Escape control characters when sending keys to the browser window. .PARAMETER SendKeyHoldKeyboardFocus Prevent returning keyboard focus to PowerShell after sending keys. .PARAMETER SendKeyUseShiftEnter Send Shift+Enter instead of regular Enter for line breaks when sending keys. .PARAMETER SendKeyDelayMilliSeconds Delay between sending different key sequences in milliseconds. .PARAMETER FocusWindow Focus the browser window after opening. .PARAMETER SetForeground Set the browser window to foreground after opening. .PARAMETER Maximize Maximize the window after positioning. .PARAMETER RestoreFocus Restore PowerShell window focus after opening the browser. .PARAMETER NewWindow Don't re-use existing browser window, instead, create a new one. .PARAMETER PassThru Returns a [System.Diagnostics.Process] object of the browserprocess. .PARAMETER ReturnURL Don't open webbrowser, just return the url. .PARAMETER ReturnOnlyURL After opening webbrowser, return the url. .PARAMETER NoBorders Removes the borders of the browser window. .PARAMETER SideBySide Position browser window either fullscreen on different monitor than PowerShell, or side by side with PowerShell on the same monitor. .PARAMETER SessionOnly Use alternative settings stored in session for AI preferences. .PARAMETER ClearSession Clear alternative settings stored in session for AI preferences. .PARAMETER SkipSession Store settings only in persistent preferences without affecting session. .EXAMPLE Open-WolframAlphaQuery -Queries "mass of sun" -Monitor 0 Opens a Wolfram Alpha query for the mass of the sun on the default monitor. .EXAMPLE qalpha "speed of light", "planck constant" Opens multiple Wolfram Alpha queries using the alias for quick scientific computations. .EXAMPLE "derivative of x^2" | Open-WolframAlphaQuery -Language "English" -FullScreen Opens a calculus query in fullscreen mode with English language preference via pipeline input. #> ################################################################################ function Open-WolframAlphaQuery { [CmdletBinding()] [Alias('qalpha')] param( ######################################################################## [Alias('q', 'Name', 'Text', 'Query')] [Parameter( Position = 0, Mandatory = $true, ValueFromRemainingArguments = $false, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, HelpMessage = 'The query to execute.' )] [string[]] $Queries, ######################################################################## [ValidateSet( 'Afrikaans', 'Akan', 'Albanian', 'Amharic', 'Arabic', 'Armenian', 'Azerbaijani', 'Basque', 'Belarusian', 'Bemba', 'Bengali', 'Bihari', 'Bork, bork, bork!', 'Bosnian', 'Breton', 'Bulgarian', 'Cambodian', 'Catalan', 'Cherokee', 'Chichewa', 'Chinese (Simplified)', 'Chinese (Traditional)', 'Corsican', 'Croatian', 'Czech', 'Danish', 'Dutch', 'Elmer Fudd', 'English', 'Esperanto', 'Estonian', 'Ewe', 'Faroese', 'Filipino', 'Finnish', 'French', 'Frisian', 'Ga', 'Galician', 'Georgian', 'German', 'Greek', 'Guarani', 'Gujarati', 'Hacker', 'Haitian Creole', 'Hausa', 'Hawaiian', 'Hebrew', 'Hindi', 'Hungarian', 'Icelandic', 'Igbo', 'Indonesian', 'Interlingua', 'Irish', 'Italian', 'Japanese', 'Javanese', 'Kannada', 'Kazakh', 'Kinyarwanda', 'Kirundi', 'Klingon', 'Kongo', 'Korean', 'Krio (Sierra Leone)', 'Kurdish', 'Kurdish (Soranî)', 'Kyrgyz', 'Laothian', 'Latin', 'Latvian', 'Lingala', 'Lithuanian', 'Lozi', 'Luganda', 'Luo', 'Macedonian', 'Malagasy', 'Malay', 'Malayalam', 'Maltese', 'Maori', 'Marathi', 'Mauritian Creole', 'Moldavian', 'Mongolian', 'Montenegrin', 'Nepali', 'Nigerian Pidgin', 'Northern Sotho', 'Norwegian', 'Norwegian (Nynorsk)', 'Occitan', 'Oriya', 'Oromo', 'Pashto', 'Persian', 'Pirate', 'Polish', 'Portuguese (Brazil)', 'Portuguese (Portugal)', 'Punjabi', 'Quechua', 'Romanian', 'Romansh', 'Runyakitara', 'Russian', 'Scots Gaelic', 'Serbian', 'Serbo-Croatian', 'Sesotho', 'Setswana', 'Seychellois Creole', 'Shona', 'Sindhi', 'Sinhalese', 'Slovak', 'Slovenian', 'Somali', 'Spanish', 'Spanish (Latin American)', 'Sundanese', 'Swahili', 'Swedish', 'Tajik', 'Tamil', 'Tatar', 'Telugu', 'Thai', 'Tigrinya', 'Tonga', 'Tshiluba', 'Tumbuka', 'Turkish', 'Turkmen', 'Twi', 'Uighur', 'Ukrainian', 'Urdu', 'Uzbek', 'Vietnamese', 'Welsh', 'Wolof', 'Xhosa', 'Yiddish', 'Yoruba', 'Zulu')] [parameter( Position = 2, Mandatory = $false, HelpMessage = 'The language of the returned search results' )] [string] $Language, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'Opens in incognito/private browsing mode' )] [Alias('incognito', 'inprivate')] [switch] $Private, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = ('Force enable debugging port, stopping existing ' + 'browsers if needed') )] [switch] $Force, ######################################################################## [Alias('e')] [Parameter( Mandatory = $false, HelpMessage = 'Opens in Microsoft Edge' )] [switch] $Edge, ######################################################################## [Alias('ch')] [Parameter( Mandatory = $false, HelpMessage = 'Opens in Google Chrome' )] [switch] $Chrome, ######################################################################## [Alias('c')] [Parameter( Mandatory = $false, HelpMessage = ('Opens in Microsoft Edge or Google Chrome, ' + 'depending on what the default browser is') )] [switch] $Chromium, ######################################################################## [Alias('ff')] [Parameter( Mandatory = $false, HelpMessage = 'Opens in Firefox' )] [switch] $Firefox, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'Opens in all registered modern browsers' )] [switch] $All, ######################################################################## [Alias('m', 'mon')] [Parameter( Mandatory = $false, HelpMessage = ('The monitor to use, 0 = default, -1 is discard, ' + '-2 = Configured secondary monitor, defaults to -1, no ' + 'positioning') )] [int] $Monitor = -1, ######################################################################## [Alias('fs', 'f')] [Parameter( Mandatory = $false, HelpMessage = 'Opens in fullscreen mode' )] [switch] $FullScreen, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'The initial width of the webbrowser window' )] [int] $Width = -1, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'The initial height of the webbrowser window' )] [int] $Height = -1, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'The initial X position of the webbrowser window' )] [int] $X = -999999, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'The initial Y position of the webbrowser window' )] [int] $Y = -999999, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'Place browser window on the left side of the screen' )] [switch] $Left, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'Place browser window on the right side of the screen' )] [switch] $Right, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'Place browser window on the top side of the screen' )] [switch] $Top, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'Place browser window on the bottom side of the screen' )] [switch] $Bottom, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'Place browser window in the center of the screen' )] [switch] $Centered, ######################################################################## [Alias('a', 'app', 'appmode')] [Parameter( Mandatory = $false, HelpMessage = 'Hide the browser controls' )] [switch] $ApplicationMode, ######################################################################## [Alias('de', 'ne', 'NoExtensions')] [Parameter( Mandatory = $false, HelpMessage = 'Prevent loading of browser extensions' )] [switch] $NoBrowserExtensions, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'Disable the popup blocker' )] [Alias('allowpopups')] [switch] $DisablePopupBlocker, ######################################################################## [Alias('lang', 'locale')] [Parameter( Mandatory = $false, HelpMessage = 'Set the browser accept-lang http header' )] [string] $AcceptLang, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = ('Keystrokes to send to the Browser window, ' + 'see documentation for cmdlet GenXdev.Windows\Send-Key') )] [string[]] $KeysToSend, ######################################################################## ############################################################################### [Alias('Escape')] [Parameter( Mandatory = $false, HelpMessage = 'Escape control characters when sending keys.' )] [switch] $SendKeyEscape, ######################################################################## ############################################################################### [Alias('HoldKeyboardFocus')] [Parameter( Mandatory = $false, HelpMessage = 'Prevent returning keyboard focus to PowerShell after sending keys.' )] [switch] $SendKeyHoldKeyboardFocus, ######################################################################## ############################################################################### [Alias('UseShiftEnter')] [Parameter( Mandatory = $false, HelpMessage = 'Send Shift+Enter instead of regular Enter for line breaks when sending keys.' )] [switch] $SendKeyUseShiftEnter, ######################################################################## ############################################################################### [Alias('DelayMilliSeconds')] [Parameter( Mandatory = $false, HelpMessage = 'Delay between sending different key sequences in milliseconds.' )] [int] $SendKeyDelayMilliSeconds, ######################################################################## ############################################################################### [Alias('fw','focus')] [Parameter( Mandatory = $false, HelpMessage = 'Focus the browser window after opening' )] [switch] $FocusWindow, ######################################################################## ############################################################################### [Alias('fg')] [Parameter( Mandatory = $false, HelpMessage = 'Set the browser window to foreground after opening' )] [switch] $SetForeground, ######################################################################## ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Maximize the window after positioning' )] [switch] $Maximize, ######################################################################## ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Restore PowerShell window focus' )] [Alias('rf', 'bg')] [switch] $RestoreFocus, ######################################################################## ############################################################################### [Alias('nw', 'new')] [Parameter( Mandatory = $false, HelpMessage = ("Don't re-use existing browser window, instead, " + 'create a new one') )] [switch] $NewWindow, ######################################################################## ############################################################################### [Alias('pt')] [Parameter( Mandatory = $false, HelpMessage = 'Returns a [System.Diagnostics.Process] object of the browserprocess.' )] [switch] $PassThru, ######################################################################## ############################################################################### [Parameter( Mandatory = $false, HelpMessage = "Don't open webbrowser, just return the url" )] [switch] $ReturnURL, ######################################################################## ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'After opening webbrowser, return the url' )] [switch] $ReturnOnlyURL, ######################################################################## ############################################################################### [Alias('nb')] [Parameter( Mandatory = $false, HelpMessage = 'Removes the borders of the browser window.' )] [switch] $NoBorders, ######################################################################## ############################################################################### [Alias('sbs')] [Parameter( Mandatory = $false, HelpMessage = 'Position browser window either fullscreen on different monitor than PowerShell, or side by side with PowerShell on the same monitor.' )] [switch] $SideBySide, ######################################################################## ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Use alternative settings stored in session for AI preferences.' )] [switch] $SessionOnly, ######################################################################## ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Clear alternative settings stored in session for AI preferences.' )] [switch] $ClearSession, ######################################################################## ############################################################################### [Alias('FromPreferences')] [Parameter( Mandatory = $false, HelpMessage = 'Store settings only in persistent preferences without affecting session.' )] [switch] $SkipSession ) begin { # copy identical parameters from this function to open-webbrowser $invocationArguments = GenXdev.Helpers\Copy-IdenticalParamValues ` -BoundParameters $PSBoundParameters ` -FunctionName 'GenXdev.Webbrowser' ` -DefaultValues (Microsoft.PowerShell.Utility\Get-Variable ` -Scope Local ` -ErrorAction SilentlyContinue) # process language parameter if specified if (-not [string]::IsNullOrWhiteSpace($Language)) { # retrieve the language code from the language dictionary $code = (GenXdev.Helpers\Get-WebLanguageDictionary)[$Language] # set accept-lang header if not already specified if (-not $PSBoundParameters.ContainsKey('AcceptLang')) { $null = $invocationArguments.AcceptLang = $code } } } process { # process each search query foreach ($query in $Queries) { # output verbose information about the query being processed Microsoft.PowerShell.Utility\Write-Verbose "Processing query: $query" # construct the wolfram alpha search url with encoded query $invocationArguments.'Url' = ('https://www.wolframalpha.com/' + 'input/?i=' + [Uri]::EscapeUriString($query)) # handle return url only scenario if ($ReturnOnlyURL) { # output the url without opening browser Microsoft.PowerShell.Utility\Write-Output ( $invocationArguments.Url ) continue } # launch browser with the constructed url and parameters GenXdev.Webbrowser\Open-Webbrowser @invocationArguments # return url if requested if ($ReturnURL) { # output the url after opening browser Microsoft.PowerShell.Utility\Write-Output ( $invocationArguments.Url ) } } } end { } } ################################################################################ |