{"action":"created","issue":{"url":"https://api.github.com/repos/MarlinFirmware/Marlin/issues/3605","repository_url":"https://api.github.com/repos/MarlinFirmware/Marlin","labels_url":"https://api.github.com/repos/MarlinFirmware/Marlin/issues/3605/labels{/name}","comments_url":"https://api.github.com/repos/MarlinFirmware/Marlin/issues/3605/comments","events_url":"https://api.github.com/repos/MarlinFirmware/Marlin/issues/3605/events","html_url":"https://github.com/MarlinFirmware/Marlin/pull/3605","id":150712476,"number":3605,"title":"Manual Filament Change: A New Hope","user":{"login":"thinkyhead","id":698003,"avatar_url":"https://avatars.githubusercontent.com/u/698003?v=3","gravatar_id":"","url":"https://api.github.com/users/thinkyhead","html_url":"https://github.com/thinkyhead","followers_url":"https://api.github.com/users/thinkyhead/followers","following_url":"https://api.github.com/users/thinkyhead/following{/other_user}","gists_url":"https://api.github.com/users/thinkyhead/gists{/gist_id}","starred_url":"https://api.github.com/users/thinkyhead/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thinkyhead/subscriptions","organizations_url":"https://api.github.com/users/thinkyhead/orgs","repos_url":"https://api.github.com/users/thinkyhead/repos","events_url":"https://api.github.com/users/thinkyhead/events{/privacy}","received_events_url":"https://api.github.com/users/thinkyhead/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/MarlinFirmware/Marlin/labels/Improvement","name":"Improvement","color":"009800"},{"url":"https://api.github.com/repos/MarlinFirmware/Marlin/labels/PR:%20New%20Feature","name":"PR: New Feature","color":"bfe5bf"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":2,"created_at":"2016-04-24T23:16:19Z","updated_at":"2016-04-24T23:49:00Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/MarlinFirmware/Marlin/pulls/3605","html_url":"https://github.com/MarlinFirmware/Marlin/pull/3605","diff_url":"https://github.com/MarlinFirmware/Marlin/pull/3605.diff","patch_url":"https://github.com/MarlinFirmware/Marlin/pull/3605.patch"},"body":"I've added onto #3601 to illustrate a more proper way to put it together, and to mess around in the menu system to see how it behaves when used \"recursively.\" This is posted as a PR for easy viewing and commentary on the code.\r\n\r\nNote that this feature is somewhat redundant with the (currently experimental) `FILAMENTCHANGEENABLE` feature that adds an `M600` command and a Filament Change menu item to run the `M600` routine. So in this demo implementation I made `MANUAL_FILAMENT_CHANGE` a subset of that feature."},"comment":{"url":"https://api.github.com/repos/MarlinFirmware/Marlin/issues/comments/214068088","html_url":"https://github.com/MarlinFirmware/Marlin/pull/3605#issuecomment-214068088","issue_url":"https://api.github.com/repos/MarlinFirmware/Marlin/issues/3605","id":214068088,"user":{"login":"thinkyhead","id":698003,"avatar_url":"https://avatars.githubusercontent.com/u/698003?v=3","gravatar_id":"","url":"https://api.github.com/users/thinkyhead","html_url":"https://github.com/thinkyhead","followers_url":"https://api.github.com/users/thinkyhead/followers","following_url":"https://api.github.com/users/thinkyhead/following{/other_user}","gists_url":"https://api.github.com/users/thinkyhead/gists{/gist_id}","starred_url":"https://api.github.com/users/thinkyhead/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thinkyhead/subscriptions","organizations_url":"https://api.github.com/users/thinkyhead/orgs","repos_url":"https://api.github.com/users/thinkyhead/repos","events_url":"https://api.github.com/users/thinkyhead/events{/privacy}","received_events_url":"https://api.github.com/users/thinkyhead/received_events","type":"User","site_admin":false},"created_at":"2016-04-24T23:49:00Z","updated_at":"2016-04-24T23:49:00Z","body":"@CoderSquirrel I think I might have spent more time coding than most other things. Maybe that's sad! But it's been a useful tool to explore and test ideas — and of course to be able to improve the software that I use every day.\r\n\r\nSo I'll point out some of the more interesting alterations I made here:\r\n\r\n- Instead of three `bool` variables (which will never be set at the same time) we use an `enum` to keep track of the current state of the procedure. This seems to work well.\r\n- Instead of inserting-slow forever, it will stop after the full insert length.\r\n- I changed the verb from \"Remove\" or \"Retract\" to \"Eject\" since that is more idiomatic in English.\r\n- Added a \"Stop Insert / Eject\" menu item that displays while insert or eject is active.\r\n- Added a clear-and-redraw when you use \"Stop …\", so the menu titles can be updated. (Maybe that is also needed when you _start_ an eject / insert?)\r\n- Since `FILAMENTCHANGEENABLE` is already existing, I decided to use the existing `FILAMENTCHANGE_FINALRETRACT` for the insert and retract length. (Your feature could be separate from `M600` but since this is related it would be good to integrate them.)"}}