Is there a way to use custom icons with applescript display dialog and notifications?
In the AppleScript documentation it says about the display dialog:
with icon (text | integer)
The resource name or ID of the icon to
display.
with icon (stop | note | caution) The type of icon to show.
You may specify one of the following constants:
stop (or 0): Shows a stop icon
note (or 1): Shows the application icon
caution (or 2): Shows a warning icon, badged with the application icon
with icon (alias | file) An alias or file specifier that specifies a .icns file.
So it seams like you can use your own icons, but I cannot get the following code to work.
display dialog "Text" with icon "/Users/user/Desktop/asd.icns"
It gets me the following error: "Resource not found."
The goal is to not even use a display dialog, but a display notification instead.
First of all you can't display a custom icon with display notification. The reason is that notifications are strongly related to a target application. As AppleScript scripts and applets aren't applications in terms of the Notification framework, the notification is related to the current application, the AppleScript Runner.
But you can display a custom icon with display dialog
The line
with icon (alias | file) An alias or file specifier that specifies a .icns file.
means what it says: The parameter must be an alias or file specifier rather than a POSIX or HFS string path.
Either
display dialog "Text" with icon alias ((path to desktop as text) & "asd.icns")
or
display dialog "Text" with icon file ((path to desktop as text) & "asd.icns")
path to desktop as text represents the HFS path to the desktop of the current user:
"Macintosh HD:Users:user:Desktop:"
Noted this question was three years ago, but I stumbled across this looking for a solution to a similar problem. Mine needs display alert rather than ... notification but the problem is the same because display alert doesn't have a custom icon option.
As noted in the other answer here, AppleScript has at least three interactive message type commands: display dialog, display alert, display notification, and probably others. It seems odd that only the first has the option to add a custom icon. I don't really understand why that is when it would be simple to make them consistent.
Needless to say, this question and #vadian's answer, inspired my solution - a "duh" moment for me once I realized it. It may or may not be a solution to this question. Posting it in case it is...
If the icon in question belongs to an app, you can tell that app to display the notification, regardless of whatever else your script is doing.
Your script can do whatever it needs to do to whatever other apps, or System Events, or itself (if your script is saved as its own application), or whatever else. In the middle of all of that you can have a single line that says:
tell application "MyApp" to display notification ...
The notification will have My App's icon, the result of the notification if any will be returned to the rest of the script and then your script will continue on inside whatever other tell statement or context its in.
If your icon isn't the icon for an app, then I believe there are ways to create an empty app with whatever icon you like, which can behave this way. Admittedly that's a bit of a kludge, but depending on how badly you want this, it's an option - though not one I'll expand on here.
My specific case in detail if interested (but doesn't particularly add to the solution above, just covers how I got there):
I'm writing a script that quits and re-opens another application after confirmation from the user. However, let's say I just wanted to provide a notification as per this question.
Options:
1. display dialog - has the option to provide a custom icon but lacks features of the other two options.
2. display alert - no custom icon but has other desired features, in my case the message parameter which adds extra smaller explanatory text below the primary text.
3. display notification - no custom icon but has other features as desired by this question's poster.
In my case I want alert because I want that extra message parameter (but this works for notification as well).
In my case, ideally the icon of the alert would be the icon of the app I'm restarting, but I can't tell the app itself to display the alert and then restart because the script loses connection with the app when it quits and it kills the running of the script.
If I tell System Events or the script itself to do all that then it can quit and reopen the app independently of the app, but the alert has the generic icon of itself or the System Events icon.
However, if I do what I described above - have my script do all its stuff, but have it tell the app in question to display the alert (and only that as described above), then the alert has the icon of the app in question, but the script still does its stuff independently of the app outside of that alert.
Solved my problem. May or may not solve this question.
#DavidT's answer is a perfect solution when your script is controlled by another application. However, things have changed a bit on Mac OS since.
Notably, if you run your script with tell application "MyApp" to display alert ... you will be promoting the user to give your app permissions to control itself, at least starting since Catalina. Not only this annoys the user with a new permission request, but it also looks kinda dumb since the dialogue is asking the user to allow "MyApp" to control "MyApp" and if the user denies it, your script will fail.
To avoid the permission request, just use tell me to display alert ... this will work just fine.
Another issue you might run into is that osascript may throw an exception if your script is launched as root. I found a nice workaround for that here.
This is a small example of how to launch the dialogue with the right user:
uid=determineUserIdFunction(...)
launchctl asuser $uid /usr/bin/osascript <<-EOS
tell me to display dialog "Now you see me" buttons {"OK"} default button 1 with title "WARNING!"
EOS
You have your path specification wrong. If you have a posix path to your icns file, use the POSIX file class coercion:
display dialog "Text" with icon POSIX file "/Users/user/Desktop/asd.icns"
This coerces the string path into a file reference the system understands, and works just fine.
Related
Can anybody explain to me what the problem seems to be with one of my dialog boxes. All the other dialog boxes, which were created in the same way and are on the same access level are fine, but this one keeps going red when ever I launch the robot and so it does not let me enter the topic through input.
This is the error displayed: https://prnt.sc/mhnv3s
Hard to tell without seeing the whole program, but it looks like you have two dialogue boxes which both refer to the same .top file, and which are both active at the same time.
When you trigger the "start" of the dialog box, it will stay active until either a) you trigger it's "stop", or b) the whole diagram in which it is is stopped (which will happen if you "exit" it, but not when a sub-diagram is activated).
Another possibility is that this dialogue is flagged as being collaborative dialogue, which means it could be loaded by the system while the robot is in autonomous life, and then re-launched again by your dialogue box.
With Windows 7 I could easily use the Open With context menu to add a new program which would thereafter appear in the Open With menu (I can't remember the exact sequence, but it was easy and worked fine). However I have now upgraded to Windows 10. The programs that I associated with my particular file extension in W7 still appear in the Open With menu in W10. If I want to add another one I select "Choose Another App". However, any app I add with W10 does not appear in the Open With menu - I have to select Choose Another App every time to get to it. I now have two lists of available apps, one in Open With (the ones I set up with W7) and one in Open With | Choose Another App (the ones I set up with W10). It's not exactly a show stopper but it's irritating. Does anyone know what this is all about and how I can get the apps into the main Open With menu?
The reason why it doesn't appear in "Open with" menu is most likely because application's VERSIONINFO is not properly filled out with all the relevant details. If you are application developer you should create VERSIONINFO resource as clarified here:
https://learn.microsoft.com/en-us/windows/win32/menurc/versioninfo-resource
If you are not the developer, then you can still fix this by editing registry - see here:
https://superuser.com/questions/1199648/strange-open-with-list-inconsistent-with-registry/1256482#1256482
Basically under the registry key: Computer\HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\Shell\MuiCache there should be 2 keys for YourExampleApp:
One that ends with .FriendlyAppName
One that ends with .ApplicationCompany
For example:
C:\Program Files (x86)\ExampleApp\YourExampleApp.exe.FriendlyAppName
C:\Program Files (x86)\ExampleApp\YourExampleApp.exe.ApplicationCompany
Most likely one of these 2 is missing which causes the application to be dropped out of the "Open with" menu.
The MuiCache list is cached from the properties of the application's VERSIONINFO resource embedded in the application, so if such resource is missing from the application, some items may be missing from the cache as well. For more details have a look at the above references.
Coder12345 had the correct answer for me, thanks a ton! I would like to expand on it briefly; I wanted Shotcut to appear in the first open with... context menu. I had to add the registry entry for ApplicationCompany. It appears that it doesn't matter what you put for the value of that key, just as long as it's there. No restart of file explorer was required, the change takes place immediately.
Also, the FriendlyAppName changes what text appears in the open with submenu. Shotcut appeared as shotcut.exe so I changed it to just Shotcut.
Is there a way to open the "Open with" dialog programmatically for a given file? I mean the dialog that you get when you right-click a file in Nautilus and select "Open with".
I'm preferably looking for a simple shell command to use, but an API or a DBUS interface would also work. I'm stuck with GNOME 2.28.2 on this PC, but would be also interested in a solution for recent GNOME. Maybe there is even a standardized solution for multiple Linux-ish desktops (something like xdg-open-as)?
I tried gnome-open and xdg-open, but both just use the standard association and don't let me choose the application.
I am unsure I understand your question.
If you want that a particular application appears in the "Open with" menu, then you have to register the MIME type for that application with xdg-mime, and then Nautilus will show it.
If you want a menu similar to "Open with" that opens only for specific files, then you should write a Nautilus Extension (for example, in Python or C). In the extension's code, you can check things like MIME Type, if selection is multiple, etc. Nautilus provides access to that information. See How to create nautilus C extensions
If you mean something different, then please rephrase your question :-)
I could not find a command line tool like that either, so I made one. Surprisingly it is really trivial.
https://github.com/timgott/gtk-open-with
If you want to do this programatically in Gtk, it requires only few lines of code (example using the C++ bindings):
auto dialog = Gtk::AppChooserDialog(file);
int response = dialog.run();
if (response == Gtk::RESPONSE_OK)
dialog.get_app_info()->launch(file);
I have a simple bash script, which I use to maintain some log etc files on a server, and most of the time the tools works in "normal mode". For UI I use the dialog tool.
However, sometimes I have some condition that requires more careful attention, and I would like at those times to change the background color of dialog, to draw more attention to the issue.
I know that by changing the screen_color attribute in .dialogrc, I can define custom colors for the dialogs, but that affects all windows, and is not what I want.
Is there some way to dynamically set this variable so that only specific dialogs would have different colors, and everything else unaffected?
For a given dialog process, you can select a specific configuration file using the environment variable DIALOGRC (see manual).
Currently I am working on J2ME App and I am facing command issue in j2me.
When I am adding any command on form its coming under options, not coming directly on screen.
Command selCommand = new Command("Select");
This select command is not coming directly on screen, options is coming on screen then click on option command then Select command is coming.
I want Select command on screen instead of option.
High Level GUI coding in JavaME doesn't let you decide how a Command should be displayed.
The same code may display a Command directly on the screen on some devices, but under Options on other devices. So don't have any control of that.
Your best chance is to look into priorities. By setting a high priority on your Command, you may be lucky that it displays directly on the screen instead of under Options. It is not something you should count on though, since it's not required by the specification, but I suspect at least many devices would do that.
J2ME doesn't let you allow to add commands on Screen it will come in menu but we can set priority to command so that they can be visible in left or right side.
even if you want to add command on Screen you have to use buttons.
Container containerbtn;
Button btnsel = new Button("Select");
containerbtn.addComponent(btnsel );
this.addComponent(containerbtn);