Is er een snelkoppeling om alle cellen boven de huidige cursorpositie te selecteren?

Is er een commando / menu-item / sneltoets om alle cellen boven / tot aan de huidige cursorpositie te evalueren? Ik heb het gevoel dat ik hier iets elementair mis …

Addendum : in feite gaat meer over de selectie van die cellen, evaluatie is niet het probleem als zodanig.

Opmerkingen

  • Shift-Home Shift-Enter misschien? (op een toetsenbord met Home)
  • EXTREEM handig! Ik ‘ stel deze functie al een aantal jaren voor aan WRI.
  • @AndreasLauschke pfff, blij dat ik ´ m niet de enige. En het lijkt zon kleine moeite om dit aan het menu / snelkoppelingen toe te voegen. Wie bij WRI moeten we afluisteren om uw inspanningen te versterken?
  • Nutteloos. Forgeddaboudit. Maar je zou Rolf ‘ s of Martin ‘ s of Rojo ‘ s oplossing in een init.m, om het op een knop in een palet te zetten, of gebruik de keytranslate. Ik heb geen gebruik van de Caps Lock-toets, ik vind het de meest nutteloze sleutel ooit, dus ik overweeg om deze op Caps Lock te zetten. Lost twee problemen tegelijk op en zet ze om in oplossingen. Ik ‘ vind het niet leuk om de Shift- en Ctrl-toetsen te veel te belasten, aangezien ik er andere sleutelvertalingen voor heb op een o / s-niveau, maar Caps Lock is gratis en verder nutteloos.
  • @AndreasLauschke Ik vind de twee-in-één-oplossing van Caps Lock leuk . Ook geen onnodig GEZOCHT meer! Hmm, een productieve avond.

Antwoord

Een mogelijkheid is om uw persoonlijke KeyEventTranslations.tr (alleen getest op Windows). Evalueer het volgende, start Mathematica opnieuw, en Ctrl + Shift + Home selecteert alle cellen boven het invoegpunt.


Voor 9.0.1. gebruik: Import["http://www.mertig.com/shortcuts.m"]


 mymenuitems=" (* Select all cells upwards *) Item[KeyEvent[\"Home\", Modifiers -> {Control, Shift}], KernelExecute[ Module[{ enb = EvaluationNotebook[], tag = StringJoin[\"tmp\", ToString[Round[AbsoluteTime[]/$TimeUnit]]],editable }, editable = ReplaceAll[Editable, Options[enb, Editable]]; SetOptions[enb, Editable -> False]; SelectionMove[enb, Previous, Cell, AutoScroll -> False]; MathLink`CallFrontEnd[FrontEnd`SelectionAddCellTags[enb, {tag}]]; SelectionMove[enb, Before, Notebook, AutoScroll -> False]; SelectionMove[enb, Next, Cell, AutoScroll -> False]; While[FreeQ[ReplaceAll[CellTags,Options[NotebookSelection[]]], tag], MathLink`CallFrontEnd[FrontEnd`SelectionAddCellTags[enb, {tag}]]; SelectionMove[enb, Next, Cell, AutoScroll -> False] ]; NotebookFind[enb, tag, All, CellTags, AutoScroll -> False]; MathLink`CallFrontEnd[FrontEnd`SelectionRemoveCellTags[enb, {tag}]]; SetOptions[enb, Editable -> editable] ] ], MenuEvaluator -> Automatic ] "; With[{os = Switch[$OperatingSystem,"MacOSX","Macintosh","Windows","Windows","Unix","X"]}, Quiet@CreateDirectory@FileNameJoin[{$UserBaseDirectory,"SystemFiles","FrontEnd","TextResources",os}]; mykeyeventtrans=FileNameJoin[{$UserBaseDirectory,"SystemFiles","FrontEnd","TextResources",os,"KeyEventTranslations.tr"}]; (*If[FileExistsQ[mykeyeventtrans],DeleteFile@mykeyeventtrans];*) If[!FileExistsQ[mykeyeventtrans], CopyFile[FileNameJoin[{$InstallationDirectory,"SystemFiles","FrontEnd","TextResources",os,"KeyEventTranslations.tr"}],mykeyeventtrans] ]]; keytext=Import[mykeyeventtrans,"Text"]; mykeytext=StringReplace[keytext,"EventTranslations[{":>StringJoin["EventTranslations[{\n(* User defined *)\n",mymenuitems,",\n"]]; Export[mykeyeventtrans,mykeytext,"Text"]; 

Reacties

  • (… diep ademhalen …) GEWELDIG! Dit is puur goud, en ook met toeters en bellen. Mijn workflow doet de oprechte groeten en gaat vroeg naar huis om het te vieren.
  • @YvesKlett Gern geschehen. Ik heb eigenlijk SelectionEvaluate [SelectedNotebook []] toegevoegd; aan het einde van KernelExecute, aangezien ik dat meestal graag doe. Het is een kwestie van persoonlijke werkstijl, denk ik of men dit wil of niet. Misschien werken mensen bij WRI anders? Of heb je kleinere notebooks? Of ‘ gebruik notebooks niet echt om te testen (zijn ze allemaal WWB-freaks?). Wie weet. Het is tenminste voldoende gemakkelijk om dingen in Mathematica aan te passen / te verbeteren.
  • enigszins aangepast om ook onder Linux correct te werken … Merk op dat ik persoonlijk Control Shift UpKey gemakkelijker vind. Dus wat ik gebruik kan worden gebruikt als Import["http://www.mertig.com/shortcuts.m"]
  • De commentaren voor 9.0.1 bijgewerkt. Gebruik: Import["http://www.mertig.com/shortcuts.m"]
  • Heel erg leuk. De gegeven code kan (zeer) lichtjes worden aangepast om een snelkoppeling te maken die alle cellen onder de huidige cel selecteert, met Ctrl + Shift + Pijl-omlaag. Voeg na de definitie van mymenuitems de volgende regel toe: mymenuitems=StringReplace[mymenuitems, {"Home" -> "Down","Next" -> "Previous", "Previous" -> "Next", "Before" -> "After"}];.

Antwoord

Ik was net aan iets bezig en hier is een bijwerking. Niets nieuws, maar in gesloten vorm gegeven als paletknop:

CreatePalette[ Button["Evaluate above", With[{NB = InputNotebook[]}, Do[ SelectionMove[Experimental`FromCellIndex[NB, i], All, Cell]; SelectionEvaluate[NB]; , {i, 1, Experimental`ToCellIndex @ SelectedCells[NB][[1]]}] ]]] 

Cursor mag niet tussen cellen staan, maar in de cel die aan het einde moet worden geëvalueerd.

Opmerkingen

  • Heel erg bedankt voor deze enorme tijdwinst die je bedacht! (Hehe, ik heb eindelijk genoeg punten om je te bedanken). Zoals je weet heb ik je routine een beetje aangepast om de ” piep, ” en plaatste de onderstaande mod. Ik ‘ gebruik MMA niet vaak genoeg om onthoud een aantal sleutelcommandos, dus het ‘ is fijn om een handig klein palet te hebben met dat ” Evalueer hierboven ” knop erop tha t Ik kan overal gemakkelijk plaatsen.
  • @BillN Geen probleem 🙂 Veel succes en ik hoop dat je hier vaker zult komen 🙂 Niet alleen om mijn antwoorden op te lossen 🙂

Answer

Dit is een wijziging van het antwoord van @Kuba, waarbij opnieuw alle cellen hierboven worden geëvalueerd en inclusief de geselecteerde cel, maar zonder de “piep” (een kleine verfijning). Bedankt @ Kuba voor de belangrijkste routine. Net als bij het origineel genereert de code een klein palet met een enkele “Evaluate Above” -knop, die vervolgens op een willekeurige handige locatie (zoals naast de andere menu-items bovenaan uw werkende notebook). Er moet een cel (een willekeurige cel) worden geselecteerd om de knop “Evalueer hierboven” te laten werken.

CreatePalette[ Button["Evaluate Above", With[{nbI = InputNotebook[]}, Do[ SelectionMove[Experimental`FromCellIndex[nbI, i], All, Cell]; If[TextString["Style" /. Developer`CellInformation[nbI][[1]]] === "Input", SelectionEvaluateCreateCell[nbI]];, {i, 1, Experimental`ToCellIndex@SelectedCells[nbI][[1]]}]],Method -> "Queued"]] 

De codewijziging selecteert alleen invoercellen voor evaluatie, “overslaan” (genereert een null-resultaat) voor alle andere celstijlen. Bedankt @John Fultz voor de opdracht die celstijlen retourneert (onder “Hoe kan ik de stijl van geselecteerde cellen krijgen?”). Het is duidelijk dat er een “piep” zou klinken als niet-invoercellen werden gevraagd om te worden geëvalueerd. Dit lijkt goed te werken met Mathematica 11.0.1.

Ik ben nieuw bij Mathematica, en deze thread is al een tijdje niet actief. Dus ik weet niet zeker of er nu een gemakkelijke manier is om dit ingebouwd te doen (kan niets vinden), of dat een aangepaste routine zoals deze nog steeds vereist is.

Update 10-3-2018: Ik heb de knopoptie Method -> “Queued toegevoegd “om de time-out te voorkomen die optreedt bij de standaard Button-evaluatiemethode” Preventief “. De optie “In wachtrij” wordt gebruikt om knopfuncties op de hoofdlink te evalueren, die nooit een time-out heeft.

Reacties

  • +1 die je had moeten vertellen me;) Ik was me niet ‘ bewust omdat ik het niet dagelijks gebruik;)
  • Sry @Kuba 🙂 I ‘ ben hier zo nieuw, ik heb ‘ nog niet genoeg punten om zelfs maar te reageren op je post (hehe). Een grote dank komt eraan zodra ik dat doe. Dit is een enorme ” probleemfactor ” verkleiner.
  • Bedankt voor de bijwerken. Ik ben niet op de hoogte van enige wijzigingen in de frontend om dat te vergemakkelijken, maar ik ben erg blij met de oplossing van Rolf ‘.
  • @Yves Klett Bedankt dat ik weet dat een aangepaste functie nog steeds vereist is.
  • @BillN welkom bij de partij: D

Answer

U kunt de invoercellen evalueren vóór de huidige cel door dit uit te voeren

Function[cobj, SelectionMove[cobj, Cell, All]; SelectionEvaluate[InputNotebook[]];]~ Scan~ TakeWhile[Cells[CellStyle -> "Input"], # =!= EvaluationCell[] &]; SelectionMove[EvaluationCell[], After, Cell]; 

Opmerkingen

  • Hoera! Het enige dat nu nog ontbreekt, is een handige snelkoppeling (maar dit wordt ook al behandeld door @RolfMertig ´ s antwoord).
  • snelkoppeling of knop in een palet. Ik ‘ zal dit waarschijnlijk op een knop op een palet zetten, samen met andere handige knoppen.
  • Ik don ‘ Ik denk niet dat dit zo gemakkelijk in een knop kan worden gestopt, aangezien je EvaluationCell []
  • @RolfMertig nodig hebt in dat geval, Experimental PreviousCell [] `maakt meer sense

Answer

Ik heb geen idee hoe ik dit moet doen met betrekking tot de cursor in het algemeen, maar gebruik CellObject je kunt veel doen als je “in een cel zit.

Er is nogal wat dat je kunt doen met de SelectionMove functie. Het volgende zal alle cellen in het evaluatienotitieblok selecteren. Merk op dat All het huidige notitieboek specificeert, After en Previous zullen u het respectieve element van de lijst met notitieblokken geleverd door Notebooks[] te evalueren.

SelectionMove[EvaluationNotebook[], All, Notebook] 

De selectie kan worden verplaatst volgens CellGroup. Deze knop selecteert geleidelijk elke CellGroup boven de knop:

Button["Select previous cell group", SelectionMove[EvaluationNotebook[], Previous, CellGroup]] 

De documentatie voor de SelectionMove -functie biedt nogal wat voorbeelden, en laat zien dat de functie kan worden gebruikt om zowel de interne inhoud van een cel als hele cellen te selecteren.

Ik denk dat er een manier is die ik kan vraag Mathematica om me de lijst van CellObject voorafgaand aan de eerste van de SelectedCells te geven, maar ik “ben er nog niet helemaal.

Reacties

  • Most@Experimental CellRange [Ten eerste, EvaluationCell []] . Or with only documented functions, TakeWhile [Cells [], # =! = EvaluationCell [] &] == Meest @ Experimenteel CellRange[First, EvaluationCell[]]
  • Sorry, ik dacht dat het was voordat de cel werd geëvalueerd, gebruik SelectedCell[] in plaats daarvan voor de geselecteerde cel
  • Dat ‘ is best gaaf, ik ‘ moet wat spelen met CellRa nge. Ik kan ‘ niet geloven dat de Experimentele context nu wordt weergegeven in het menu voor het aanvullen van opdrachten.
  • @Rojo je eerste opmerking at een context-backtick op en de rest niet echt hier aan V9 werken … zou je dit willen uitwerken?
  • Ja, sorry, Most@Experimental`CellRange[First, EvaluationCell[]]. Of met alleen gedocumenteerde functies, TakeWhile[Cells[], # =!= EvaluationCell[] &]. Dat zou een lijst moeten geven van de CellObjects vóór de evaluerende.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *