Note that I’m using autohotkey v2, not v1.

I want to run two different autohotkey scripts. I want to trigger a hotstring in the first script, the output of which ends up being part of the hotstring trigger for the second script. Is this possible?

Here’s a simplified version of my intended workflow.

Script 1:

#Hotstring EndChars \
#Hotstring o
#Hotstring ?
::iv::ǐ
::av::ǎ

Script 2:

#Hotstring EndChars \
#Hotstring o
#Hotstring ?
::nǐ::你
::hǎo::好

So the idea is that I can type niv\ and the first script will convert it to nǐ - then I can immediately type \ and the second script will convert it to 你. So I type niv\\ and my text goes from niv to nǐ to 你. I can then type hav\o\ and have my text go: h, ha, hav, hǎ, hǎo, 好. So I can do niv\ hav\o and get nǐ hǎo, or I can do niv\\ hav\o\ and get 你 好. Both writing systems in a reasonably simple format.

There are reasons I want to set it up like this. The first script has dozens of functions beyond writing in pinyin/chinese, and I share it with another person - so I don’t want to add potentially hundreds of random Chinese hotstrings to it, just the special pinyin characters. That’s why I’m using two scripts.

But I also realize I could just make “niv” and “havo” their own hotstrings which go directly to 你 and 好 without the intermediate nǐ and hǎo. I don’t want to do this mostly because I think the system I have in mind is prettier - type it correctly in pinyin first, then have it correctly convert to Chinese.

All of that aside: I’ve gathered that this is probably possible using some combination of SendLevel and #InputLevel - but I’ve tried a bunch of different combinations and ideas with it, and haven’t successfully had one script trigger another yet. Even in simplified toy scripts, which is a little discouraging. Ideally I’d be able to do this with as few changes to the main script I share with another person as possible - the script that handles the Chinese can be as complicated as it needs to be though. Anyone know how to make this work?

  • zkfcfbzrOP
    link
    English
    1
    edit-2
    1 year ago

    One last reply to say that, unless someone else replies with an amazing solution, this is what I’ve decided to go with:

    I’m keeping the pinyin characters in the main script (They fit thematically with the rest of the script), but I’m moving both the pinyin and Chinese to its own separate script, and giving it its own EndChar to prevent conflicts. I found the following single-script setup that works (Because, for some reason, the setup in my previous comment doesn’t work if you shove it into one script):

    #InputLevel 1
    
    #Hotstring o
    #Hotstring ?
    #Hotstring EndChars ``
    
    Out(output) {
    	SendEvent output
    }
    
    :X:iv::Out("ǐ")
    
    ::nǐ::你
    

    To me this is less abhorrent than adding complexity to the main script, and it only comes at the cost of having to learn a new EndChar. I would still love a solution that let me do what I originally wanted to do without making major changes to the first script. Cheers.

    • zkfcfbzrOP
      link
      English
      1
      edit-2
      1 year ago

      I lied. What I’m actually doing is this.

      #Hotstring EndChars \
      #Hotstring o
      #Hotstring B0
      #Hotstring ?
      
      ::niv\::{bs 2}你
      ::hav\o::{bs 3}好
      

      It requires no changes at all to the original script, but lets me keep the same EndChar, with no chance of clashing. It gives me some extra complexity in this script with the B0 flag but that doesn’t bother me - and I don’t have to mess with SendLevel or #InputLevel at all, which is nice because I had no idea what they were doing anyways. And it gives me the exact behavior I was after originally: I type niv\ hav\o for nǐ hǎo, or niv\\hav\o\ for 你好.