PowerTab в Far…

GetBufferContents

То чего я и боялся😦 В PowerShellFar не реализованы методы для работы с raw консолью, — рисовать менюшку не получится… Просто использовать PowerTab для получения строк для завершения, без intellisense — потерять половину его прелести😦

комментариев 19 to “PowerTab в Far…”

  1. mow Says:

    To keep at least the functionality added by PowerTab you can disable the consolebased listing for the time

    $PowerTabConfig.DefaultHandler ‘default’

    let nice but usable

    Greetings /\/\o\/\/

  2. xaegr Says:

    Yes, i know. I even can change it to Far menu, but menu handler is main thing that i want from PowerTab in Far…😦

  3. Roman Kuzmin Says:

    Поигрался с PowerTab, неплохо, но в Фар интегрировать не буду. Причин несколько: *) да, в PSF не реализованы методы работы с RawUI и это пока не планируется (в Фаре «рисовать» что-то надо только фаровскими средствами, для этого есть и меню, и диалоги и много еще чего); *) PSF TabComplesion, которая Bench\TabExpansion-.ps1, часто возвращает более полный набор возможных подстановок, причем из разных групп вместе (например вместе и коммандлеты, и функции, и скрипты из системного пути, что логично, по-моему), а не только варианты из одной группы, как в PT.

    А вот инкрементал фильтрация в списке — это правильная идея, и это я собираюсь через несколько дней реализовать.

    To /\/\o\/\/ — PowerTab is a great tool, indeed, keep moving!

  4. xaegr Says:

    >в Фаре “рисовать” что-то надо только фаровскими средствами
    Отлично, к повертабу подключаются разные менюшки, хоть графическая выпадающая менюшка (PSPlus — http://www.powershell.com/plus/), хоть фаровская Out-FarList🙂 Желательно её сделать аналогичную по параметрам Out-ConsoleList повертабовской для возможности их перекрещивать🙂

    >А вот инкрементал фильтрация в списке — это правильная идея, и это я собираюсь через несколько дней реализовать.
    Имеется ввиду уточнение запроса по мере набора текста? Это было бы здорово, а функцию для получения самих данных для получения вариантов можно использовать любую по желанию.

    Жду Out-FarList с нетерпением🙂

  5. Roman Kuzmin Says:

    > Жду Out-FarList с нетерпением
    > Желательно её сделать аналогичную по параметрам Out-ConsoleList
    Типа этого: Function global:Out-FarList { param($LastWord=») … , куда на вход список объектов для выбора подается, а на выходе выбранный? Сделаем.

  6. xaegr Says:

    Превосходно, спасибо!🙂

  7. Roman Kuzmin Says:

    На самом деле, то, что предложил MOW:
    $PowerTabConfig.DefaultHandler = ‘Default’
    — это самый простой и уже работающий вариант (только со старым меню). Так что зачем еще Out-FarList — я пока не вижу (но, если действительно уж надо, возможность создать такую функцию предоставлю).

  8. xaegr Says:

    М… он конечно работающий, но это только половина от PowerTab. Я под Out-FarList подразумевал функцию аналогичную MOW’овской, но написанную под фар. То есть с уточнением запроса набором текста, а не хоткеями.

  9. Roman Kuzmin Says:

    Дак так оно и будет без всякого Out-FarList. Когда $PowerTabConfig.DefaultHandler = ‘Default’, это задействует TabExpansion по умолчанию, которое PowerShell полностью контролирует — вот тут-то я и подставлю вызов «продвинутого» списка с добором и фильтрацией вместо теперешнего меню с хоткеями.

  10. xaegr Says:

    Если я правильно понимаю то надо сделать $PowerTabConfig.DefaultHandler = ‘Out-FarList’ — этот параметр как раз и делался для возможности использовать иные функции выбора🙂 А default оставить для действительно дефолтного варианта.

  11. mow Says:

    Xaegr, Roman

    It is hard to follow the discussion using google translate, and I only used FAR till my trail expired to look at Roman’s work, so do not know exactly how the Farlist works.

    but the addition of another handler is very simple.

    In the TabExpansionLib.ps1 the helperfunction Invoke-TabItemSelector is defined where you can add other handlers, I still need to add a list to configuration, but you can basicly call any function or cmdlet to handle the output, PowerTab will provide the array with results and the $lastword value to it.

    you can find a complete description of this here.

    http://thepowershellguy.com/blogs/posh/archive/2007/04/18/powershell-tabextension-part-6-customizing-powertab-0-9.aspx

    @ Roman : also to you, Keep up the good work !

    Greetings /\/\o\/\/

  12. xaegr Says:

    @ MoW:
    This is exactly what Roman is doing now — tabitemselector for use in far (the one that i named FarList🙂 but this is up to Roman to choose the name). ATM PowerShellFar uses classic Far menu, which not satisfies me because it assign letter shortcut to every item in menu, and it is impossible to type text in it to narrow the list. https://xaegr.wordpress.com/files/2007/10/currentfarmenu.png Yellow letters is automatically generated shortcuts. This is causes inpredictable results when i try to use it🙂

  13. Roman Kuzmin Says:

    MoW, Xaegr,

    Do not worry, work is in progress and PowerTab will work in FAR in a few days as requested. Actually it works already if $PowerTabConfig.DefaultHandler = ‘Default’. There is a request though from Xaegr to improve behaviour of the menu. It is relatively easy, I even guess my task is easier than it was for you, FAR UI API has some power.

    I still think that there will be no need in custom handler and changes of Invoke-TabItemSelector (that would be kind of a hack in fact).

  14. Roman Kuzmin Says:

    New UI control (list menu) is implemented in Far.NET 3.3.30 and used for TabExpansion in PowerShellFar 1.1.30.

    Features:
    *) Incremental filter on typing (including wildcard * and ?)
    *) Some settings exposed as $Psf.Settings.Intelli*
    (need more features/settings? — ask)

    ———-

    ## How to load and use PowerTab TabExpansion in PowerShellFar:
    & «…\Init-TabExpansion.ps1» -ConfigurationLocation …
    $PowerTabConfig.DefaultHandler = ‘Default’

    ## How to get back TabExpansion from TabExpansion-.ps1:
    function global:TabExpansion ($line, $lastWord) { TabExpansion- $line $lastWord }

    (I think it should be OK to switch them back and forth by these commands)

    ———-

    If needed, advanced way to load PowerTab:

    & «…\Init-TabExpansion.ps1» -ConfigurationLocation …
    function global:Out-ConsoleList
    {
    param ($lastWord)
    $m = $Far.CreateListMenu()
    $Psf.Settings.Intelli($m)
    $m.X = [console]::CursorLeft
    $m.Y = [console]::CursorTop
    $m.IncrementalFilter = $lastWord
    $m.Incremental = ‘Prefix’
    $input | .{process{
    [void]$m.Items.Add($_)
    }}
    switch($m.Items.Count) {
    0 { return }
    1 { return $m.Items[0].Text }
    }
    if ($m.Show()) {
    $m.Items[$m.Selected].Text
    }
    }

  15. Roman Kuzmin Says:

    I am sure that TabExpansion-.ps1 misses a lot of PowerTab power.
    But something perhaps looks better, just a few facts (not criticism in any way):

    PowerTab and console menu:
    a) get[Tab] — only file paths
    b) get-[Tab] — only cmdlets
    c) get-*c[Tab] — only cmdlets and the menu does not allow to continue typing
    d) Needs a database. Dynamically loaded assemblies are not supported, database should be updated
    e) [datetime]::Now.h[Tab] — gets full member list
    f) dir[Tab] — nothing
    g) are script parameter names expanded?
    h) [*sql*build[Tab] — nothing

    TabExpansion-.ps1 and FAR list menu:
    a) get[Tab] — functions, cmdlets, scripts in the system path, files in the current location
    b) get-[Tab] — the same as above
    c) get-*c[Tab] — the same and no problems to continue typing further when the menu is shown. Also you can use * and ? during typing (makes job faster if a list is really long and prefixes are mostly similar and too long to type).
    d) Does not need a database and still works pretty fast. Dynamically loaded assemblies are supported (but, yes, only currently loaded and data cache may need update).
    e) [datetime]::Now.h[Tab] — [datetime]::Now.Hour
    f) dir[Tab] — Get-ChildItem
    g) script (or even its alias) parameter names are expanded if a script is in the path and ‘param’ and parameters are one per line (as I usually do, so this assumption works for me).
    h) [*sql*build[Tab] — requested matches

  16. xaegr Says:

    Роман, база в PowerTab используется в основном из за WMI, в PowerShellFar его пока не вижу (а надо очень🙂 )
    От раскрывания альясов — dir -> get-childitem в свое время в PowerTab отказались, потому что бесит очень иногда🙂 Например при попытке сделать cd sc[tab] я ожидаю дополнения папки .\scripts\ а не set-content🙂

  17. Roman Kuzmin Says:

    А, WMI… точно, забыл. Его-то я и не пользую почти, ну не нужен мне и все тут.

    Но это не критика была по любому.

    А вот с дополнением алиасов интересно — можно подумать. В фаре можно разрешить дополнение алиасов в редакторе, когда пишется скрипт, в котором, кстати, алиасы и не рекомендованы, а в ком.строке — запретить. Наверное, логично, подумаю.

  18. xaegr Says:

    WMI позарез нужен — без вариантов🙂 Еще с .net чтото не так… Но посмотрю потом, может не разобрался просто.

    Понятно что не критика, конкуренция = путь к идеалу🙂

    Да, думаю такой подход к альясам был бы самое то.

    С сменой менюшки ты не просёк фишку всёж, вместо того чтоб перезаписывать функу Out-ConsoleList, просто делаем Out-ЧтоугодноConsoleList и подставляем её в параметр: $PowerTabConfig.DefaultHandler = ‘Out-ЧтоугодноConsoleList’, а Default это именно дефолтный перебор табом пускай будет🙂 Но это мелочи уже🙂

  19. Roman Kuzmin Says:

    Подумал про подстановку алиасов — пожалуй, не буду лишние условности наворачивать (пока). Дело в том, что PSF TabExpansion не сделает то, что «бесит». В твоем примере он не подставит scripts вместо sc, потому что чаще всего он предлагает все варианты, а не только что-то одно — файл или соммандлет, … Поэтому в твоем примере тебе будет предложен выбор из set-content, scripts, … Вполне нормально, вроде.


Обсуждение закрыто.

%d такие блоггеры, как: