Can’t map most-recent-used commands to the right click context menu

I can’t find the option, does it even exists? In Mac’s v8 it exists and it boosts my workflow tremendously, because that’s how I got into using it. The difference between the platforms is that with the Mac we have a dropdown list of the most-recent-used commands but in Windows the option is limited to solely one/the last used. Wasn’t v8 supposed to bridge the gap between the platforms? What is this? This issue is seemingly minor but in usability context it ruins the reputation of the best 3D modeller. I’d appreciate if someone from the team would respond to me.



Rhino 8 SR17 2025-3-7 (Rhino 8, 8.17.25066.07001, Git hash:master @ b14fcd901289f8715631debb308bc919a4988e07)
License type: Educational, build 2025-03-07
License details: Cloud Zoo

Windows 11 (10.0.26100 SR0.0) or greater (Physical RAM: 16GB)
.NET 7.0.0

Computer platform: DESKTOP

Standard graphics configuration.
Primary display and OpenGL: NVIDIA GeForce GTX 1660 SUPER (NVidia) Memory: 6GB, Driver date: 2-25-2025 (M-D-Y). OpenGL Ver: 4.6.0 NVIDIA 572.60
> Accelerated graphics device with 4 adapter port(s)
- Windows Main Display attached to adapter port 0

OpenGL Settings
Safe mode: Off
Use accelerated hardware modes: On
GPU Tessellation is: On
Redraw scene when viewports are exposed: On
Graphics level being used: OpenGL 4.6 (primary GPU’s maximum)

Anti-alias mode: 4x
Mip Map Filtering: Linear
Anisotropic Filtering Mode: High

Vendor Name: NVIDIA Corporation
Render version: 4.6
Shading Language: 4.60 NVIDIA
Driver Date: 2-25-2025
Driver Version: 32.0.15.7260
Maximum Texture size: 32768 x 32768
Z-Buffer depth: 24 bits
Maximum Viewport size: 32768 x 32768
Total Video Memory: 6 GB

Rhino plugins that do not ship with Rhino

Rhino plugins that ship with Rhino
C:\Program Files\Rhino 8\Plug-ins\Commands.rhp “Commands” 8.17.25066.7001
C:\Program Files\Rhino 8\Plug-ins\WebBrowser.rhp “WebBrowser”
C:\Program Files\Rhino 8\Plug-ins\rdk.rhp “Renderer Development Kit”
C:\Program Files\Rhino 8\Plug-ins\RhinoScript.rhp “RhinoScript”
C:\Program Files\Rhino 8\Plug-ins\IdleProcessor.rhp “IdleProcessor”
C:\Program Files\Rhino 8\Plug-ins\RhinoRenderCycles.rhp “Rhino Render” 8.17.25066.7001
C:\Program Files\Rhino 8\Plug-ins\rdk_etoui.rhp “RDK_EtoUI” 8.17.25066.7001
C:\Program Files\Rhino 8\Plug-ins\NamedSnapshots.rhp “Snapshots”
C:\Program Files\Rhino 8\Plug-ins\MeshCommands.rhp “MeshCommands” 8.17.25066.7001
C:\Program Files\Rhino 8\Plug-ins\RhinoCycles.rhp “RhinoCycles” 8.17.25066.7001
C:\Program Files\Rhino 8\Plug-ins\Toolbars\Toolbars.rhp “Toolbars” 8.17.25066.7001
C:\Program Files\Rhino 8\Plug-ins\3dxrhino.rhp “3Dconnexion 3D Mouse”
C:\Program Files\Rhino 8\Plug-ins\Displacement.rhp “Displacement”
C:\Program Files\Rhino 8\Plug-ins\SectionTools.rhp “SectionTools”

Rhino 8 SR17 2025-3-7 (Rhino 8, 8.17.25066.07002, Git hash:master @ b14fcd901289f8715631debb308bc919a4988e07)
License type: Educational, build 2025-03-07
License details: Cloud Zoo

Apple macOS Version 15.3.1 (Build 24D70) (Physical RAM: 16GB)
Mac Model Identifier: MacBookPro18,3
Language: en-GB (MacOS default)
.NET 7.0.0

Metal GPU Family Apple 7
Metal GPU Family Common 3
Metal GPU Family Mac 2
Graphics processors
Apple M1 Pro
Color LCD (1512 x 982 @ 120.00Hz)
GPU Vendor: Apple

USB devices
None

Bluetooth devices
None

Third party kernel extensions
None

Third party plugins
/usr/lib/swift/libswiftCore.dylib
/usr/lib/swift/libswiftObjectiveC.dylib
/usr/lib/swift/libswiftCoreFoundation.dylib
/usr/lib/swift/libswiftDarwin.dylib
/usr/lib/swift/libswiftDispatch.dylib
/usr/lib/swift/libswiftIOKit.dylib
/usr/lib/swift/libswiftSystem.dylib
/usr/lib/swift/libswiftXPC.dylib
/usr/lib/swift/libswift_Builtin_float.dylib
/usr/lib/swift/libswift_Concurrency.dylib
/usr/lib/swift/libswift_StringProcessing.dylib
/usr/lib/swift/libswift_errno.dylib
/usr/lib/swift/libswift_math.dylib
/usr/lib/swift/libswift_signal.dylib
/usr/lib/swift/libswift_stdio.dylib
/usr/lib/swift/libswift_time.dylib
/usr/lib/swift/libswiftos.dylib
/usr/lib/swift/libswiftsys_time.dylib
/usr/lib/swift/libswiftunistd.dylib
/usr/lib/swift/libswiftDistributed.dylib
/usr/lib/swift/libswiftObservation.dylib
/usr/lib/swift/libswiftMetal.dylib
/usr/lib/swift/libswiftOSLog.dylib
/usr/lib/swift/libswiftQuartzCore.dylib
/usr/lib/swift/libswiftUniformTypeIdentifiers.dylib
/usr/lib/swift/libswiftsimd.dylib
/usr/lib/swift/libswiftRegexBuilder.dylib
/usr/lib/swift/libswift_RegexParser.dylib
/usr/lib/swift/libswiftCryptoTokenKit.dylib
/usr/lib/swift/libswiftAVFoundation.dylib
/usr/lib/swift/libswiftCoreAudio.dylib
/usr/lib/swift/libswiftCoreLocation.dylib
/usr/lib/swift/libswiftCoreMIDI.dylib
/usr/lib/swift/libswiftCoreMedia.dylib
/usr/lib/swift/libswiftCoreImage.dylib
/usr/lib/swift/libswiftAccelerate.dylib
/usr/lib/swift/libswiftMLCompute.dylib
/usr/lib/swift/libswiftSynchronization.dylib
/usr/lib/swift/libswiftCompression.dylib
/usr/lib/swift/libswiftFileProvider.dylib
/usr/lib/swift/libswiftCoreGraphics.dylib
/usr/lib/swift/libswiftFoundation.dylib
/usr/lib/swift/libswiftSwiftOnoneSupport.dylib
/usr/lib/usd/libusd_ms.dylib
/usr/lib/swift/libswiftIntents.dylib
/usr/lib/swift/libswiftSafariServices.dylib
/usr/lib/swift/libswiftSpatial.dylib
/usr/lib/swift/libswiftWebKit.dylib
/usr/lib/swift/libswiftAppleArchive.dylib
/usr/lib/swift/libswiftDataDetection.dylib
/usr/lib/swift/libswiftNaturalLanguage.dylib
/usr/lib/swift/libswiftDemangle.dylib
/usr/lib/swift/libswiftVideoToolbox.dylib
/usr/lib/swift/libswiftGameplayKit.dylib
/usr/lib/swift/libswiftSpriteKit.dylib
/usr/lib/swift/libswiftPassKit.dylib
/usr/lib/swift/libswiftGLKit.dylib
/usr/lib/swift/libswiftMetalKit.dylib
/usr/lib/swift/libswiftModelIO.dylib
/usr/lib/swift/libswiftSceneKit.dylib
/usr/lib/swift/libswiftMapKit.dylib
/Users/diamantis/Library/Application Support/McNeel/Rhinoceros/packages/8.0/SubstanceImporter/2.0.7/libSubstanceImporter.dylib
/Users/diamantis/Library/Application Support/McNeel/Rhinoceros/packages/8.0/SubstanceImporter/2.0.7/libsubstance_ogl3_blend.9.dylib
/Users/diamantis/Library/Application Support/McNeel/Rhinoceros/packages/8.0/SubstanceImporter/2.0.7/libsubstance_linker.9.dylib

Rhino plugins that do not ship with Rhino
/Users/diamantis/Library/Application Support/McNeel/Rhinoceros/packages/8.0/SubstanceImporter/2.0.7/SubstanceImporter.rhp “SubstanceImporter” 2.0.7.0

Rhino plugins that ship with Rhino
/Applications/Rhino 8.app/Contents/Frameworks/RhMaterialEditor.framework “Renderer Development Kit” 8.17.25066.1002
/Applications/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/Commands.rhp “Commands” 8.17.25066.7002
/Applications/Rhino 8.app/Contents/PlugIns/NamedSnapshots.rhp “Snapshots” 8.17.25066.1002
/Applications/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/RDK_EtoUI.rhp “RDK_EtoUI” 8.17.25066.7002
/Applications/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/MeshCommands.rhp “MeshCommands” 8.17.25066.7002
/Applications/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/RhinoRenderCycles.rhp “Rhino Render” 8.17.25066.7002
/Applications/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/RhinoCycles.rhp “RhinoCycles” 8.17.25066.7002
/Applications/Rhino 8.app/Contents/PlugIns/SectionTools.rhp “SectionTools” 8.17.25066.1002
/Applications/Rhino 8.app/Contents/PlugIns/Displacement.rhp “Displacement” 8.17.25066.1002
/Applications/Rhino 8.app/Contents/PlugIns/PanelingTools.rhp “PanelingTools” 8.17.25066.1002
/Applications/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/RhinoDLR_Python.rhp “IronPython” 8.17.25066.7002
/Applications/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/GrasshopperPlugin.rhp “Grasshopper” 8.17.25066.7002
/Applications/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/RhinoCodePlugin.rhp “RhinoCodePlugin” 8.17.25066.7002

Hi @Diamantis_Rinas, on windows right click the command prompt to see that list. Alternatively, there is a toolbar named ‘Recently Used’ in your default workspace which lists buttons of the last used commands.

does that help ?

_
c.

I wasn’t aware of the toolbar. Thank you very very much.

For some reason, the “Recently Used” toolbar is designed to register only the commands picked from the graphical interface ie the “icons”. It’s not picking the commands typed from the keyboard. So my issue persists. I also don’t like to reach to the area of the command prompt every two to three seconds just to access the recent commands typed from the keyboard. Please, please, port the recent commands dropdown from the Mac’s right-click context menu to the Windows version. Make v8 universal as possible and my experience better. Thank you.

Hi Diamantis -

On Windows, it’s always been on the MMB and I can only find two requests for changing the macOS version to behave as the Windows version but nothing the other way around.

Ref.:
RH-51575 Preferences > Mouse > Middle Mouse button doesn’t have “most recently used commands” pop-up menu option
RH-74397 Mac middle mouse popup option

You have set your MMB to pop up a toolbar:

… is that something that you use more than the recent commands?
-wim

Hello Wim,

On Windows, I would want to have this as an option on the right mouse button, as the middle mouse button is occupied by the default popup in my setup. Just like on MacOS, where the context menu have the recent commands drop-down, show objects etc, object properties and the display modes.

-diamantis

Hi @Diamantis_Rinas,

it’s only been possible to popup the menu (i don’t mean the toolbar) using either right mouse on the command line or the middle mouse by choosing the first item in the picture @wim showed in above image. Setting custom single commands or actions for the right mouse has never been possible on windows despite having fixed items in the delayed context menu.

Until this is done, there may be possible workarounds, eg. using either AutoHotKey software or the software of your mouse if you have additional buttons to map commands to. Below is a script you can run to popup the most recently used commands at mouse position, it’s the same list as shown whwn right clicking the command bar and does list typed commands:

#! python 2

import Rhino
import System
import rhinoscriptsyntax as rs
from System.Collections.Generic import List

def DoSomething():
    str_items = List[str]()
    cmd_items = List[str]()
    
    for item in reversed(Rhino.Commands.Command.GetMostRecentCommands()):
        str_items.Add(item.DisplayString) 
        cmd_items.Add(item.Macro)
    
    if not str_items: return
    
    size = Rhino.UI.RhinoEtoApp.MainWindow.LogicalPixelSize
    point = System.Windows.Forms.Cursor.Position
    point.X /= size
    point.Y /= size
    
    index = Rhino.UI.Dialogs.ShowContextMenu(str_items, point, None)
    if index >= 0: rs.Command(cmd_items[index], True)
        
DoSomething()

I’m sorry for having no better idea at the moment.

_
c.

Thank you for helping me clement!
This python script is a great workaround on my issue, but I don’t have the know-how on how to map it on the fourth or fifth button, using AutoHotKey or any other mouse bloatware. Too much fuss when I just need the modeller to design on and to deliver before my deadline. I thought we’ve had overcome the need of setting all these parameters ourselves, in the day and age where the UX has been perfected with the smartphone and its built in services that meet all our needs. The Rhino program falls behind in terms of simplicity with its impossible to grasp settings/options/preferences section. The fourth and fifth mouse buttons should’ve native rhino support for mapping whatever on them. Strange that no one on the development team hasn’t implemented this yet so many years later. I get that with python implementation, we can write whichever shortcut ourselves, making the use of the modeller somewhat modular I would say, but in the end of the day I need the program to be usable by default / just work. I’m not a programmer, I’m a designer who bought this program to get his work done.

Hi @Diamantis_Rinas, you could start with a simple alias or keyboard shortcut containing below macro to run the script after saving it to a file on your systen with the py extension:

! _-RunPythonScript “C:\YourPathToTheScript\YourScriptName.py”

A new alias or keyboard shortcut can be added from:

_Options > Rhino Options > Alias > New
_Options > Rhino Options > Keyboard > New

Mapping a keyboard key to a mouse button usually is done from your mouse software, so you might handle it without installing additional bloatware. I agree it is a lot of work to setup, but once it works you’ll just forget it and use it, just with a different button.

Maybe true for the right mouse button, for fourth and fifth you might consider that there are so many different type of mice around, it would be hard to impossible for McNeel to cover them all.

_
c.