Existuje příkaz / položka nabídky / klávesová zkratka k vyhodnocení všech buněk nad / až po aktuální pozici kurzoru? Mám pocit, že mi tu chybí něco elementárního …
Dodatek : Ve skutečnosti to jde spíše o výběr těchto buněk, vyhodnocení samo o sobě není problém.
Komentáře
- Shift-Home Shift-Enter možná? (na klávesnici, která má Home)
- NEJVYŠŠÍ užitečnost! ‚ Tuto funkci navrhuji WRI již několik let.
- @AndreasLauschke phew, jsem rád, že ´ m není jediný. A zdá se být tak malé úsilí přidat to do nabídky / zkratek. Koho na WRI bychom měli zaštiťovat, abychom posílili vaše úsilí?
- zbytečné. Forgeddaboudit. Ale můžete použít řešení Rolf ‚ s nebo Martin ‚ s nebo Rojo ‚ s init.m, umístit jej na tlačítko na paletě nebo použít keytranslate. Klávesu Caps Lock nemám k dispozici, považuji ji za nejneužitečnější klávesu, jakou kdy jsem vytvořil, a proto ji vložím na Caps Lock. Řeší dva problémy najednou a promění je v řešení. ‚ se mi příliš nelíbí přetížení kláves Shift a Ctrl, protože pro ně mám další překlady klíčů na úrovni o / s, ale Caps Lock je zdarma a jinak k ničemu.
- @AndreasLauschke Líbí se mi oprava Caps Lock dva v jednom. Už také žádné zbytečné HLÁŠENÍ! Hmm, produktivní večer.
Odpověď
Jednou z možností je upravit vaše osobní KeyEventTranslations.tr
(testováno pouze v systému Windows). Vyhodnoťte následující, poté restartujte Mathematica, poté Ctrl + Shift + Domů vybere všechny buňky nad kurzorem.
Pro 9.0.1. použít: 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"];
Komentáře
- (… zhluboka se nadechl …) ÚŽASNÉ! Jedná se o čisté zlato a také se zvonky a píšťalkami. Můj pracovní postup vyjadřuje nejupřímnější pozdravy a brzy jde domů oslavovat.
- @YvesKlett Gern geschehen. Vlastně jsem přidal SelectionEvaluate [SelectedNotebook []]; na konci KernelExecute, protože to obvykle dělám rád. Je to otázka osobního pracovního stylu, myslím, že pokud to někdo chce nebo ne. Možná lidé na WRI pracují jinak? Nebo máte menší notebooky? Nebo nepoužívejte ‚ notebooky pro testování (protože je WWB zběsile všechny?). Kdo ví. Přinejmenším je dostatečně snadné upravovat / vylepšovat věci v Mathematice.
- Mírně upravené, aby fungovalo správně i pod Linuxem … Všimněte si, že mne osobně je Control Shift UpKey snazší. Takže to, co používám, lze použít jako
Import["http://www.mertig.com/shortcuts.m"]
- Aktualizovány komentáře k 9.0.1. Použití:
Import["http://www.mertig.com/shortcuts.m"]
- Velmi, velmi pěkné. Daný kód lze (velmi) mírně upravit, aby se vytvořila zkratka, která vybere všechny buňky pod aktuální buňkou pomocí Ctrl + Shift + DownArrow. Po definici
mymenuitems
stačí přidat následující řádek:mymenuitems=StringReplace[mymenuitems, {"Home" -> "Down","Next" -> "Previous", "Previous" -> "Next", "Before" -> "After"}];
.
Odpověď
Jen jsem na něčem pracoval a tady je vedlejší efekt. Nic nového, ale v uzavřené formě jako tlačítko na paletě:
CreatePalette[ Button["Evaluate above", With[{NB = InputNotebook[]}, Do[ SelectionMove[Experimental`FromCellIndex[NB, i], All, Cell]; SelectionEvaluate[NB]; , {i, 1, Experimental`ToCellIndex @ SelectedCells[NB][[1]]}] ]]]
Kurzor nesmí být mezi buňkami, ale v buňce, která má být vyhodnocena na konci.
Komentáře
- Moc vám děkuji za tento obrovský spořič času, který jste vymysleli! (Hehe, konečně jsem dostal dost bodů, abych vám poděkoval). Jak víte, mírně jsem upravil vaši rutinu, abych se zbavil “ pípnutí, “ a zveřejnění níže uvedeného režimu. Nepoužívám ‚ dostatečně často MMA, abych pamatujte si spoustu klíčových příkazů, takže ‚ je hezké mít šikovnou malou paletu s jednou “ Vyhodnotit nad “ tlačítko na něm tha Mohu se pohodlně umístit kamkoli.
- @BillN Žádný problém 🙂 Hodně štěstí a doufám, že sem budete chodit častěji 🙂 Nejen opravit své odpovědi 🙂
Odpověď
Toto je modifikace odpovědi @Kuba, která znovu vyhodnotí všechny buňky výše a včetně vybrané buňky, ale bez „pípnutí“ (drobné upřesnění). Díky @Kuba za hlavní rutinu. Stejně jako u originálu kód generuje drobnou paletu s jediným tlačítkem „Vyhodnotit výše“, které lze poté umístit na libovolné pohodlné umístění (například vedle dalších položek nabídky v horní části pracovního notebooku). Aby tlačítko „Vyhodnotit výše“ fungovalo, musí být vybrána buňka (libovolná buňka).
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"]]
Změna kódu vybere pro vyhodnocení pouze vstupní buňky, „přeskočení“ (generování výsledku Null) pro všechny ostatní styly buněk. Děkuji @John Fultz za příkaz, který vrací styly buněk (v části „Jak mohu získat styl vybraných buněk?“). Je zřejmé, že by se ozvalo „pípnutí“, pokud by byly vyhodnoceny nevstupní buňky. Zdá se, že to s Mathematica 11.0.1 funguje dobře.
Jsem v Mathematice nový a toto vlákno už nějakou dobu není aktivní. Takže si nejsem jistý, jestli nyní existuje nějaký snadný způsob k tomu vestavěné (nemůžu nic najít), nebo zda je stále potřeba vlastní rutina.
Aktualizace 10/10/18: Přidal jsem možnost Tlačítko Metoda -> „Ve frontě „aby se zabránilo vypršení časového limitu, který nastane u výchozí metody vyhodnocení tlačítka“ Preemptivní. “ Možnost „Ve frontě“ se používá k vyhodnocení funkcí tlačítek na hlavním odkazu, které nikdy nevyprší.
Komentáře
- +1, které byste měli říct já;) Nebyl jsem ‚ vědom toho, že to nepoužívám denně;)
- Sry @Kuba 🙂 I ‚ Jsem tu tak nový, nemám ‚ ještě dost bodů, abych mohl váš příspěvek dokonce komentovat (hehe). Jakmile to udělám, přichází velké Děkuji. Toto je obrovský “ redukční faktor “ reduktor.
- Děkujeme za Aktualizace. Nejsem si vědom žádných změn v rozhraní, které by to usnadnily, ale jsem velmi spokojen s řešením Rolf ‚.
- @Yves Klett Děkuji, že jste mě nechali vězte, že je stále požadována vlastní funkce.
- @BillN vítejte na párty: D
odpověď
Vstupní buňky před aktuální buňkou můžete vyhodnotit spuštěním této
Function[cobj, SelectionMove[cobj, Cell, All]; SelectionEvaluate[InputNotebook[]];]~ Scan~ TakeWhile[Cells[CellStyle -> "Input"], # =!= EvaluationCell[] &]; SelectionMove[EvaluationCell[], After, Cell];
komentářů
- Hurá! Jedinou věcí, která nyní chybí, je pohodlná zkratka (ale ta je již pokryta odpovědí @RolfMertig ´).
- zástupce nebo tlačítko v paletě. Toto ‚ pravděpodobně umístím na tlačítko na paletě spolu s dalšími užitečnými tlačítky.
- Ne ‚ nemyslím si, že je to tak snadné dát do tlačítka, protože v takovém případě potřebujete EvaluationCell []
- @RolfMertig,
Experimental
PreviousCell [] „dělá více sense
Odpověď
Netuším, jak to udělat ve vztahu ke kurzoru obecně, ale pomocí CellObject
můžete toho udělat hodně, pokud jste v buňce.
S funkce. Následuje výběr všech buněk v hodnotícím zápisníku. Všimněte si, že All
specifikuje aktuální notebook, After
a Previous
vám příslušný prvek seznamu notebooků poskytnutý hodnocením Notebooks[]
.
SelectionMove[EvaluationNotebook[], All, Notebook]
Výběr lze přesunout podle CellGroup
. Toto tlačítko postupně vybírá každou CellGroup
nad tlačítkem:
Button["Select previous cell group", SelectionMove[EvaluationNotebook[], Previous, CellGroup]]
Dokumentace k poskytuje několik příkladů a ukazuje, že tuto funkci lze použít k výběru vnitřního obsahu buňky i celých buněk.
Myslím, že existuje způsob, jak mohu přimět Mathematicu, aby mi poskytla seznam CellObject
před prvním z SelectedCells
, ale ještě tam nejsem úplně.
Komentáře
-
Most@Experimental
CellRange [First, EvaluationCell []]. Or with only documented functions,
TakeWhile [Cells [], # =! = EvaluationCell [] &] == Most @ ExperimentalCellRange[First, EvaluationCell[]]
- Omlouvám se, myslel jsem si, že to bylo před hodnocením buňky, místo toho pro vybranou buňku použijte
SelectedCell[]
- To ‚ s docela v pohodě, budu si ‚ hrát s CellRa č. Nemohu ‚ uvěřit, že experimentální kontext se nyní zobrazuje v nabídce dokončení příkazu.
- @Rojo, váš první komentář snědl backtick kontextu a zbytek opravdu není pracujte zde na V9 … chtěli byste to rozpracovat?
- Ano, promiňte,
Most@Experimental`CellRange[First, EvaluationCell[]]
. Nebo pouze s dokumentovanými funkcemiTakeWhile[Cells[], # =!= EvaluationCell[] &]
. To by mělo dát seznamCellObjects
před hodnocením.