Lintalist 1.9 Searchable interactive lists to copy & paste text with plugins

Post a reply


In an effort to prevent automatic submissions, we require that you type the text displayed into the field underneath.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Lintalist 1.9 Searchable interactive lists to copy & paste text with plugins

Re: Lintalist 1.9 Searchable interactive lists to copy & paste text with plugins

Post by list » 17 Nov 2017, 14:59

For the adventurous: here is a development branch https://github.com/lintalist/lintalist/ ... -functions

  • support for user/ahk functions in snippets: [[SubStr("AutoHotkey",5,3]] -> Hot
  • support for subset of AutoHotkey built-in variables: A_MyDocuments etc

See the documentation "Functions" for a rudimentary introduction (docs needs some work)

I've also added some error checking* when processing snippets (plugins/functions) - this will avoid Lintalist to crash - if it finds a plugin/function it can't process it will wrap the that section of the snippet in {{braces}} so if you made a typo [[inpt=Name?]] or call a non-existing function [[MyFunk()]] it will become {{inpt=Name?}} {{MyFunk()}} so you can see there is an error in the snippet.

Suggestions and bug reports welcome :-0

* I should probably add some more by preventing snippets calling Lintalist functions as that could really mess things up but I haven't done so yet.

Re: Lintalist 1.9 Searchable interactive lists to copy & paste text with plugins

Post by list » 16 Nov 2017, 12:29

hoppfrosch wrote:Here here here! I would probably use it! ... I'm looking for a template system (written in AHK) ...

It wouldn't be to hard to "extract" it from Lintalist but if you do so "as is" you'll have a quite few global variables which some wouldn't like, so transforming the labels to functions would be preferred to have a nice and clean solution. I'll put it on my list :shh:

Re: Lintalist 1.9 Searchable interactive lists to copy & paste text with plugins

Post by hoppfrosch » 16 Nov 2017, 05:21

Here here here! I would probably use it! ;)

I'm looking for a template system (written in AHK) to automate/simplify the generation of the awesome AHK-page on github. For sure this can easily be done in any other scripting language - but how awesome is AHK, if it's a major barrier to implement a templating system to generate the awesomeAHK-page? :lol:

Re: Lintalist 1.9 Searchable interactive lists to copy & paste text with plugins

Post by list-nli » 16 Nov 2017, 03:38

@hoppfrosch funny you should say that - I've always thought it might be "useful" to separate the snippet+plugins processing from Lintalist as a standalone function/library. That way you could use it in other scripts by simply #include snippets.ahk

Code: [Select all]GeSHi © Codebox Plus

::hotstring:: ; or hotkey
var:=snippet("Hello [[Input=Name]]")
return

#include snippets.ahk
Not sure if it is worth the effort to do so as I don't expect many people would use it. :think:

Re: Lintalist 1.9 Searchable interactive lists to copy & paste text with plugins

Post by hoppfrosch » 16 Nov 2017, 01:00

list wrote:I already got to the point so that you can simply call a function like [[function(parameters)]] it sees there is no = and then knows its a function.

Code: [Select all]GeSHi © Codebox Plus

This is a test with a user [[func1(1,2,3)]] function and AHK [[SubStr("AutoHotKey",5,3)]] function
the result is (func1 just adds the numbers as a test to pass on parameters)

"This is a test with a user 6 function and AHK Hot function"

Pretty nifty if I do say so myself :D


Pretty cool 8-). it's funny: I'm currently working on a template mechanism for AutoHotkey V2, having a similar functionality is definitly on my plan!

Will have a look at your code - if you don't mind, I might "borrow" some ideas ;)

Re: Lintalist 1.9 Searchable interactive lists to copy & paste text with plugins

Post by list » 15 Nov 2017, 14:37

I'll have look through the list of variables and see what could be useful. Little point in adding A_GuiEvent for example.

I already got to the point so that you can simply call a function like [[function(parameters)]] it sees there is no = and then knows its a function.

Code: [Select all]GeSHi © Codebox Plus

This is a test with a user [[func1(1,2,3)]] function and AHK [[SubStr("AutoHotKey",5,3)]] function
the result is (func1 just adds the numbers as a test to pass on parameters)

"This is a test with a user 6 function and AHK Hot function"

Pretty nifty if I do say so myself :D

Re: Lintalist 1.9 Searchable interactive lists to copy & paste text with plugins

Post by FanaticGuru » 15 Nov 2017, 14:23

list wrote:What if I added support for (some of) AutoHotkey's built-in variables, so you could just write A_MyDocuments anywhere in your snippet (or plugin) and it would be translated to the correct value.
The paths could be useful. Maybe the time ones although you already have the DateTime=.

If it is just the path ones if might be better to stay with your current scheme like you did for DateTime= and do a Path= and have things like [[Path=MyDocuments]] but allow all the A_ path variables.

A_MyDocuments is easy for me but Path= but might be more consistent for your non-AHK users.

For those comfortable with AHK, I would just add an ability for them to use AHK functions whether standard or custom.

Now that I think about it this could be something like [[AHK= ]] where anything after the = gets evaluated as an AHK expression so you could technically do something like [[AHK=Floor((A_DD+2)/2)]]. This alone would open up a ton of stuff for the power users including custom functions assuming you had a way to #include them like you do the plugins.

Now that I think about it, I could probably just do this under the current version just by writing a custom pluggin called "AHK".

Just thoughts off the top of my head.

FG

Re: Lintalist 1.9 Searchable interactive lists to copy & paste text with plugins

Post by list » 15 Nov 2017, 12:21

What if I added support for (some of) AutoHotkey's built-in variables, so you could just write A_MyDocuments anywhere in your snippet (or plugin) and it would be translated to the correct value.

Re: Lintalist 1.9 Searchable interactive lists to copy & paste text with plugins

Post by list » 14 Nov 2017, 12:28

I'll play around with functions and post an update here. Thanks for the clarification / example.

Edit: outline https://github.com/lintalist/lintalist/issues/86

Re: Lintalist 1.9 Searchable interactive lists to copy & paste text with plugins

Post by FanaticGuru » 13 Nov 2017, 21:18

list wrote:
FanaticGuru wrote:Below is my first plugin for Lintalist. It produces an Ordinal Indicator for a number.
Yay - first third party plugin :-)
Would be useful for others as well I think, would you mind if I included in a future version?
You are more than welcome to use any of my code anyway that you want.

list wrote:Just curious: did you see the readme-howto.txt and template.plugin files / documentation?
I did but it just was not very intuitive and took me a bit to puzzle out what you were explaining.

Maybe a super simple plugin called "Example" would help like:

Code: [Select all] [Expand]GeSHi © Codebox Plus

I did not actually test this and you could refine the comments or plugin but something like this would have made it very clear to me very quickly. I think one problem I had was that I did not quickly realize what was Standard Global stuff and what was stuff I could change whether it be structural stuff in the plugin or variable names.

list wrote:It doesn't matter that much if I call IsLabel or IsFunc so as such it wouldn't be too much work to also allow functions. I think.

An ability to do functions would be nice. You can still use #include to get them in your script. I think that is fine.

How to designate them in the markup is a design choice. Could be something different than [[ ]] like << >> or could be a character within the standard syntax like [[*SomeFunction()]] with * being whatever character seems like a good flag for a function. Could also just autodetect if there are () and no = sign.

The source code would need to handle the inserting whatever the function returned into the PluginText.

FG

Re: Lintalist 1.9 Searchable interactive lists to copy & paste text with plugins

Post by list » 09 Nov 2017, 17:10

FanaticGuru wrote:Below is my first plugin for Lintalist. It produces an Ordinal Indicator for a number.
Yay - first third party plugin :-)
Would be useful for others as well I think, would you mind if I included in a future version?
FanaticGuru wrote:This was mainly done to learn about how to make Lintalist plugins. ... It took me longer than it seems like it should have for me to read and understand how to create my first plugin.
Just curious: did you see the readme-howto.txt and template.plugin files / documentation?
FanaticGuru wrote:.. I could just copy a dozen functions ... into a folder with no modification and then have them available to use.
There is certainly room for improvement - large part of the code is spaghetti code (long story, but I thought it "best" to go with labels and the =option|option vs ("option","option","option")).

I've thought about adding some form of plugin management:
  • either by having a GUI which looks at files in a folder and presents a listview with checkboxes allowing you to select which ones you'd like to add and/or remove.
  • Or just entirely dynamic: either based on user input ("update plugins") or always at start up (lintalist.ahk would just become a launcher for a new "main script")
This would create the #include and menus at each start up - something like the plugins framework from majkinetor.
The reason for #includi-ng everything is otherwise it won't find the functions (labels) - because they are being called as "%PluginName%" and that won't work with a "\lib\" folder so some form or pre-processing is required for it to work "automatically".

It doesn't matter that much if I call IsLabel or IsFunc so as such it wouldn't be too much work to also allow functions. I think.

FanaticGuru wrote:... I really do like Linalist.
:-)

All suggestions remain welcome - for example if you have any thoughts on modifying the Choice plugin - let me know https://github.com/lintalist/lintalist/issues/53

Re: Lintalist 1.9 Searchable interactive lists to copy & paste text with plugins

Post by FanaticGuru » 08 Nov 2017, 14:38

Below is my first plugin for Lintalist.

It produces an Ordinal Indicator for a number. That is the "st nd rd th" that goes after a number in English.

[[OrdinalIndicator=3]] will produce "rd"
[[OrdinalIndicator=3|]] will produce "3rd"

Code: [Select all] [Expand]GeSHi © Codebox Plus

This was mainly done to learn about how to make Lintalist plugins.

I really like Lintalist. It is one of the scripts I always have running. But I was not too crazy about the plugin system. It took me longer than it seems like it should have for me to read and understand how to create my first plugin.

It would seem so much easier and intuitive if plugins were just "functions". As opposed to the current system of gosubs with global variables that creates an overhead that you have to understand of how input and output works with the gosubs. Functions inherently already have an understood system of input through parameters and output through return.

[[OrdinalIndicator(1234)]] would seem so much easier to understand in the Lintalist markup, in the creation of the plugin, and even in the source coding of Lintalist. Just put a bunch of custom functions in a folder and those functions then become useable in the Lintalist markup.

It would be great if I could just copy a dozen functions that I already have for things like putting commas in numbers, formatting money, padding strings, various string manipulations, etc. (basically standard function from my AHK library) into a folder with no modification and then have them available to use in Lintalist.

Maybe a dual system where <<OrdinalIndicator(1234)>> indicates a custom function and not a plugin.

There might be other problems with this approach that I have not thought about and it would be a major modification at this point. Just my feedback. The most important feedback being that I really do like Linalist.

FG

Re: Lintalist 1.9 Searchable interactive lists to copy & paste text with plugins

Post by list » 06 Nov 2017, 15:38

Lintalist v1.9.3 - https://github.com/lintalist/lintalist/ ... tag/v1.9.3

  • Improved: TriggerKeys now accept more keys such as ½ or + (+ character, not shift) for example
  • Improved: Now there is also a 32x32 size icon button bar accommodating high(er) DPI settings (see BigIcons in settings)
  • New: added TryClipboard() to see if clipboard is inaccessible, if so "catch" error and do nothing
  • New: Make it possible to include contents of Snippet (part 1 and 2) in script code incl. caret position per snippet (see "Script" in Documentation)
  • Change: Similar to modal windows for Local variable etc, Snippet editor now modal - see also v1.8
  • Fix: Adding support for UTF-8 characters in Local variabe & Counter Editors ht @exetico
  • Fix: ReadIni() now writes in UTF-16 to store settings correctly
  • Fix: Closing using X in title bar didn't store Window position for users with Center=2 and now save it to settings.ini as well
  • Fix: Closing and Starting Lintalist in Narrow view mode no longer causes error in GUI with empty 'barx' variable

Re: Lintalist 1.9 Searchable interactive lists to copy & paste text with plugins

Post by list » 06 Jul 2017, 10:12

This may (or may not) work slightly better https://github.com/lintalist/lintalist/ ... -309209435

1) like I said you can already do a copy to clipboard upon a DoubleClick: Configuration, set PasteMethod = 2. Ensure that DoubeClickSends = 1 - you can combine that with a setting SingleClickSends.

2) You can simply close it by pressing the X (top right) or activate Search (press hotkey) and press Esc to close it. Pressing the Search hotkey again will bring it back to front/open the Gui in the Not Active mode.

This is probably about as far as the default Gui can go. Otherwise making a second Gui with fewer features (no menu, no button bar, no search) combined with "not context sensitive" (simply loading all bundles) is probably "easier" so it can bypass certain sections of the main script and thus avoid any errors in the flow / processing of snippets.

Edit: re 2 - you can try to remove "+Toolwindow" from the Gui line - if you do that there will be a minimize button on the Window Title bar.
Edit2: July 14th - added info about SingleClickSends ;)

Re: Lintalist 1.9 Searchable interactive lists to copy & paste text with plugins

Post by mrmed » 06 Jul 2017, 00:14

Thanks! The window stays open and double-clicking usually pastes into the correct window, but sometimes it pastes into the window that was edited 2 selections ago.
Can I make additional feature requests?

1) Copy on click. There is already an icon to the left of the text. Clicking it could copy the text to the clipboard.
2) Minimizable window.

Thanks very much for being so open to feedback!

Re: Lintalist 1.9 Searchable interactive lists to copy & paste text with plugins

Post by list » 17 Jun 2017, 06:27

You can download an experiment here https://github.com/lintalist/lintalist/issues/74 ymmv and no guarantees ...

Re: Lintalist 1.9 Searchable interactive lists to copy & paste text with plugins

Post by list » 17 Jun 2017, 04:03

To copy a snippet only upon double click and not paste it use the setting PasteMethod = 2. (Some plugins may not work properly so YMMV.)

Copy a snippet means you create a new snippet based on the one you selected, that way you can create a similar snippet without the need to retype everything again, just like copying a file for example.

Like I said it is not as easy as it sounds. You would indeed have to ensure the program you came from (currently active) has focus again before something is pasted, sending !{esc} might work but probably not always reliably.

Therefore it might actually be easier (relatively speaking) to not make the Lintalist window active when you open and click on it (if you want to use the mouse).
You can do that with something like "+AlwaysOnTop +E0x08000000 ; +E0x08000000 = WS_EX_NOACTIVATE" (same line as "Gui, 1:+Border...") and adding "NA" to Gui Show.
Drawback of that is the menu and search feature no longer work as you can't make the Lintalist window take focus very easily and not having search kind of defeats the purpose.
Not sure how to tackle it in the most reliable way at the moment. :think:

Re: Lintalist 1.9 Searchable interactive lists to copy & paste text with plugins

Post by Guest » 17 Jun 2017, 02:48

Would it be hard to implement this "always open" feature by switching to the previous window with ALT-TAB or something like this -

https://autohotkey.com/board/topic/5403 ... -is-wrong/

When I select Copy Snippet the editor window opens. I thought that would copy the snippet to the clipboard?

Would it be hard to add an option to have the double-click perform a copy instead of a paste? Is it easy to add a button on each line that does a copy?

Re: Lintalist 1.9 Searchable interactive lists to copy & paste text with plugins

Post by list » 16 Jun 2017, 13:20

I don't have a multiple monitor setup at the moment so can't check but did you restart/reload Lintalist after you changed the setting to 2? Otherwise it sound like it isn't storing the position which is done here upon closing the window https://github.com/lintalist/lintalist/ ... .ahk#L1601

I'm afraid it is a little more complicated at it looks at first glance. When you open the search window it stores some information about the current application and control you are in (GetActiveWindowStats() - https://github.com/lintalist/lintalist/ ... t.ahk#L270). After selecting the snippet Lintalist tries to paste it in the Window/Control that was active when you opened it. So you need to skip that as well. It probably requires some serious "hacking" to "bypass" the regular flow of the program.

Edit: I think I see what you mean with opening centered again, if I close the Gui with the red X at the top right it doesn't see to fire the 1GuiClose label so it doesn't store the current position. As I never use(d) that I didn't notice it earlier - if you press ESC it will fire the label and store the position. It should probably also write the XY to the settings to if you start the program again it remembers the position between sessions.

Edit2: changing 1guiclose to guiclose does the trick, will also ensure XY is saved on exit and read at startup in the next update.

Re: Lintalist 1.9 Searchable interactive lists to copy & paste text with plugins

Post by mrmed » 16 Jun 2017, 12:55

Thanks for the quick response. I don't know Autohotkey yet but I tried to hack the script by removing calls to Gui Destroy, which didn't work. I tried calling Gosub GuiStart after pasting to reopen the Lintalist window but it's opening centered and on a different monitor. My center configuration is set to "2 = Do not center but remember position set by user". Why isn't the window re-opening in the same position?

Top