-
-
Save willeccles/02228fc54c42942531a072318dcaf82b to your computer and use it in GitHub Desktop.
(* 2019-06-07: Added nohup and output redirection to fix a bug with "Open Terminal here" feature. | |
Thanks to @fools-mate for bringing the issue to my attention. *) | |
on alfred_script(q) | |
do shell script "cd ~; nohup /Applications/kitty.app/Contents/MacOS/kitty /bin/bash -c \"source ~/.bashrc && " & q & ";/bin/bash\" > /dev/null 2>&1 &" | |
end alfred_script |
First of all thank you for this nice little script!
Do you also have a problem when you open something with the "Open Terminal here"? In the beginning, it works fine, kitty opens and changes to the directory, but then Alfred window freezes and will not disappear until you close the new instance of kitty.
@fools-mate: I ran into that same (sort of) problem when writing an Automator service that allowed me to right click a directory and "Open New Kitty Window Here." The issue is that the Alfred task (or in my case, the Automator service) started the kitty process, and therefore cannot exit until the child kitty process has exited. You need to use nohup
to disown the child process, like so:
nohup /Applications/kitty.app/Contents/MacOS/kitty `which zsh` -c "source ~/.zshrc && cd \"$1\"; `which zsh`" > /dev/null 2>&1 &
Note: This script is made specifically for my Automator service, and won't work directly in Alfred. Modify your Alfred script as necessary according to the list below.
This is of course using zsh, but you could adapt the same principle to bash in my original script. In fact, the original script likely needs to be updated to reflect this change, but I don't use the "Open Terminal Here" thing in Alfred (@hangtwenty: you might want to change your script if you need this functionality). The basic idea is this:
- Use
nohup
to disown the child process (nohup [...]
) - Redirect output to /dev/null (
> /dev/null 2>&1
) - Background the process (the
&
at the end)
Also, in my script, you might have noticed I used which zsh
here and there. This is because I have more than one zsh installed and rather than fix the problem I just made sure the right zsh is the one in the path and I don't have to remember the path myself if I just use which zsh
. Ignore that part.
That was a quick and extensive response, thanks!
It tried the command in the terminal and it works fine but when I try to exchange the line in Alfred, it don't work anymore.
What do I wrong? I have no experience in AppleScript.
Btw. nice little trick to use which zsh
.
@fools-mate: If you can post your AppleScript here, I can probably help you a bit better. The one I just posted is not for use in Alfred, it's for the Automator Folder Action thing that I made, which would cause it not to work, as it's specialized for that purpose. However, if you follow the general steps I listed, you should be able to get to a working solution. If not, post your script here and I'll take a look when I can. Apologies for the misleading explanation, I'll update it so that any future readers aren't confused.
Ah ok, I thought this solution would be also a fix for the problem in Alfred.
I just tried to exchange the one line in Alfred, this was really naiv. 😅
on alfred_script(q)
do shell script "nohup /Applications/kitty.app/Contents/MacOS/kitty `which zsh` -c "source ~/.zshrc && cd \"$1\"; `which zsh`" > /dev/null 2>&1 &"
end alfred_script
@fools-mate: This is an adapted version of the original (for bash). Try this and let me know if it works for you! I haven't tested it since I'm at work, but this should do it for you.
on alfred_script(q)
do shell script "cd ~; nohup /Applications/kitty.app/Contents/MacOS/kitty /bin/bash -c \"source ~/.bashrc && " & q & ";/bin/bash\" > /dev/null 2>&1 &"
end alfred_script
I tried it with zsh and it works great! 🎉
Thank you.
@fools-mate: No worries! Glad it works for you. I'll update the original script in a moment to reflect this change.
Current script will open another instance of kitty.app (extra icon in Dock)
@aahung I am pretty sure this is a kitty preference, and I haven't noticed this issue before. Not sure what to tell you.
If you want to open a new tab within an existing Kitty instance I came up with this: https://gist.github.com/pyrho/d2f4fe152eb8113b1956edd6d7456862, it's a bit more troublesome to set up, but nothing too hard ^^
I just came across this gist as I was trying to set up this functionality in Alfred, however when I tried using it, it kept splitting my active terminal instead of opening a new tab. I did some digging and it turns out that the new-window
command is deprecated, replaced by the launch
command. Here's the snippet that I was able to come up with that opens a new tab instead of splitting the current one.
on alfred_script(q)
tell application "kitty" to activate
tell application "System Events"
repeat until (exists file "/tmp/mykitty.sock")
delay 6
end repeat
end tell
do shell script "/Applications/kitty.app/Contents/MacOS/kitty @ --to unix:/tmp/mykitty.sock launch --type=tab"
tell application "System Events" to keystroke q
tell application "System Events"
key code 36 -- enter key
end tell
end alfred_script
In addition to this, you will need to ensure that allow_remote_control yes
is present in your ~/.config/kitty/kitty.conf
file, and then also create a new file at ~/.config/kitty/macos-launch-services-cmdline
which contains the following:
--listen-on unix:/tmp/mykitty.sock
This macos-launch-services-cmdline
file is specific to the Mac version of kitty and specifies launch arguments to use, which is the only way I was able to get it to create the necessary socket file for remote control.
@hangtwenty Coincidentally, I switched to zsh a few months ago and had to update mine as well. Naturally, I completely forgot I ever did this, so this didn't get updated at the same time. Thanks for sharing!
I considered this as well, but having already written the naive way, it seemed like a waste of time to go back and change it.