Există o comandă rapidă pentru a selecta toate celulele deasupra poziției curente a cursorului?

Există o comandă / intrare în meniu / comandă rapidă de la tastatură pentru a evalua toate celulele de deasupra / până la poziția curentă a cursorului? Am sentimentul că îmi lipsește ceva elementar aici …

Addendum : De fapt, este mai mult despre selectarea acelor celule, evaluarea nu este problema ca atare.

Comentarii

  • Shift-Home Shift-Enter poate? (pe o tastatură care are Acasă)
  • EXTREM de util! ‘ sugerez această caracteristică WRI de câțiva ani.
  • @AndreasLauschke uf, mă bucur că ´ m nu singurul. Și pare un efort atât de minor să adăugați acest lucru în meniu / comenzi rapide. Cui pe WRI ar trebui să-l insinuăm pentru a vă consolida efortul?
  • Inutil. Forgeddaboudit. Dar ai putea pune Rolf ‘ s sau Martin ‘ s sau Rojo ‘ s un init.m, pentru a-l pune pe un buton dintr-o paletă sau pentru a folosi traducerea tastelor. Nu am rost de tasta Caps Lock, mi se pare cea mai inutilă cheie vreodată, așa că mă gândesc să pun asta pe Caps Lock. Rezolvă două probleme simultan și le transformă în soluții. Nu ‘ îmi place să supraîncărc prea mult tastele Shift și Ctrl, deoarece am alte traduceri cheie pentru ele la nivel de o / s, dar Blocarea majusculelor este gratuită și altfel inutilă.
  • @AndreasLauschke Îmi place îmi place fixarea majusculă în două în unu. Gata cu strigătul inutil, de asemenea! Hmm, o seară productivă.

Răspuns

O posibilitate este să vă modificați (testat numai pe Windows). Evaluați următoarele, apoi reporniți Mathematica, apoi Ctrl + Shift + Acasă va selecta toate celulele deasupra punctului de inserare.


Pentru 9.0.1. utilizați: 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"]; 

Comentarii

  • (… inspirând adânc …) MINUNAT! Acesta este aur pur, și cu clopote și fluiere, de asemenea. Fluxul meu de lucru îmi trimite cele mai sincere salutări și pleacă acasă devreme pentru a sărbători.
  • @YvesKlett Gern geschehen. De fapt, am adăugat SelectionEvaluate [SelectedNotebook []]; la sfârșitul KernelExecute, deoarece de obicei îmi place să fac asta. Este o chestiune de stil personal de lucru, cred că cineva dorește acest lucru sau nu. Poate că oamenii de la WRI funcționează diferit? Sau au caiete mai mici? Sau nu ‘ nu utilizați cu adevărat blocnotesuri pentru testare (fiind toți nebuni WWB?). Cine știe. Cel puțin este suficient de ușor să modificați / îmbunătățiți lucrurile în Mathematica.
  • ușor modificat pentru a funcționa corect și sub Linux … Observați că personal mi se pare mai ușor Control Shift UpKey. Deci, ceea ce folosesc poate fi folosit ca Import["http://www.mertig.com/shortcuts.m"]
  • Am actualizat comentariile pentru 9.0.1. Utilizați: Import["http://www.mertig.com/shortcuts.m"]
  • Foarte, foarte frumos. Codul dat poate fi (foarte) ușor modificat pentru a crea o comandă rapidă care selectează toate celulele de sub celula curentă, folosind Ctrl + Shift + DownArrow. După definiția mymenuitems, trebuie doar să adăugați următoarea linie: mymenuitems=StringReplace[mymenuitems, {"Home" -> "Down","Next" -> "Previous", "Previous" -> "Next", "Before" -> "After"}];.

Răspuns

Tocmai lucram la ceva și aici „un efect secundar. Nimic nou, dar dat în formă închisă ca buton de 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]]}] ]]] 

Cursorul nu trebuie să se afle între celule, ci în celula care urmează să fie evaluată la final.

Comentarii

  • Vă mulțumesc foarte mult pentru acest economisitor de timp masiv cu care ați venit! (Hehe, în sfârșit am obținut suficiente puncte ca să vă mulțumesc). După cum știți, v-am modificat ușor rutina pentru a scăpa de ” beep, ” și am postat modificarea de mai jos. Nu ‘ nu folosesc MMA suficient de des pentru a amintiți-vă o grămadă de comenzi cheie, așa că este ‘ plăcut să aveți o paletă mică cu cea ” Evaluați mai sus ” butonul de pe acesta tha t Pot plasa convenabil oriunde.
  • @ BillN Nici o problemă 🙂 Mult succes și sper că veți veni mai des aici 🙂 Nu numai pentru a-mi rezolva răspunsurile 🙂

Răspuns

Aceasta este o modificare a răspunsului @Kuba, evaluând din nou toate celulele de deasupra și inclusiv celula selectată, dar fără „bip” (un rafinament minor). Mulțumesc @Kuba pentru rutina principală. La fel ca în cazul originalului, codul generează o paletă strălucitoare cu un singur buton „Evaluare deasupra”, care poate fi apoi plasat la orice locație convenabilă (cum ar fi lângă celelalte elemente de meniu din partea de sus a carnetului dvs. de lucru). Trebuie selectată o celulă (orice celulă) pentru ca butonul „Evaluare de mai sus” să funcționeze.

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"]] 

Modificarea codului selectează numai celulele de intrare pentru evaluare, „sărind peste” (generând un rezultat nul) pentru toate celelalte stiluri de celule. Mulțumim @John Fultz pentru comanda care returnează stilurile de celule (sub „Cum pot obține stilul celulelor selectate?”). Evident, un „bip” ar apărea dacă s-ar cere evaluarea celulelor care nu sunt de intrare. Acest lucru pare să funcționeze bine cu Mathematica 11.0.1.

Sunt „nou la Mathematica și acest fir nu a fost activ de ceva vreme. Deci, nu sunt sigur dacă există acum o modalitate ușoară pentru a face acest lucru încorporat (nu se poate găsi nimic) sau dacă este necesară în continuare o rutină personalizată ca aceasta.

Actualizare 3/10/18: Am adăugat opțiunea Buton Metodă -> „Coadă „pentru a preveni expirarea care apare cu metoda implicită de evaluare a butonului„ Preventivă ”. Opțiunea „Coadă” este utilizată pentru a evalua funcțiile butoanelor de pe linkul principal, care nu se expiră niciodată.

Comentarii

  • +1 ar fi trebuit să le spuneți eu;) Nu eram ‘ știut, deoarece nu îl folosesc zilnic;)
  • Sry @Kuba 🙂 Eu ‘ Sunt atât de nou aici, nu am ‘ încă nu am suficiente puncte pentru a măcar să comentez la postarea ta (hehe). Un mare Mulțumesc vine odată ce o fac. Acesta este un reductor imens ” factor de complicație „.
  • Vă mulțumim pentru Actualizați. Nu știu nicio schimbare în frontend pentru a facilita acest lucru, dar sunt foarte mulțumit de soluția Rolf ‘.
  • @Yves Klett Vă mulțumim că mi-ați permis știți că este încă necesară o funcție personalizată.
  • @BillN bun venit la petrecere: D

Răspuns

Puteți evalua celulele de intrare înainte de celula curentă executând acest lucru

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

Comentarii

  • Ura! Singurul lucru care lipsește acum este o comandă rapidă convenabilă (dar aceasta este de asemenea acoperită deja de răspunsul @RolfMertig ´).
  • comandă rapidă sau buton dintr-o paletă. ‘ probabil voi pune acest lucru pe un buton dintr-o paletă, împreună cu alte butoane utile.
  • Nu ‘ nu cred că este atât de ușor de pus într-un buton, deoarece aveți nevoie de EvaluationCell []
  • @RolfMertig în acest caz, Experimental PreviousCell [] `face mai multe sens

Răspuns

Nu am nicio idee despre cum să fac acest lucru în raport cu cursorul în general, dar folosind CellObject puteți face multe dacă vă aflați într-o celulă.

Puteți face destul de puțin cu SelectionMove funcție. Următoarele vor selecta toate celulele din caietul de evaluare. Rețineți că destul de ciudat All specifică blocnotesul curent, After și Previous vă vor oferi elementul respectiv al listei de caiete furnizat prin evaluarea Notebooks[].

SelectionMove[EvaluationNotebook[], All, Notebook] 

Selecția poate fi mutată în funcție de CellGroup. Acest buton va selecta progresiv fiecare CellGroup de deasupra butonului:

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

Documentația pentru oferă câteva exemple și arată că funcția poate fi utilizată pentru a selecta conținutul intern al unei celule, precum și celulele întregi.

Cred că există un mod în care pot obțineți Mathematica să-mi dea lista CellObject înainte de prima dintre SelectedCells, dar încă nu sunt încă acolo.

Comentarii

  • Most@Experimental CellRange [First, EvaluationCell []] . Or with only documented functions, TakeWhile [Cells [], # =! = EvaluationCell [] &] == Most @ Experimental CellRange[First, EvaluationCell[]]
  • Ne pare rău, am crezut că este înainte de a evalua celula, folosiți SelectedCell[] în locul celulei selectate
  • Acela ‘ Este destul de grozav, ‘ va trebui să mă joc cu CellRa nge. Nu pot ‘ să cred că contextul experimental se afișează acum în meniul de finalizare a comenzilor.
  • @Rojo primul tău comentariu a mâncat un backtick context, iar restul nu chiar lucrați la V9 aici … ați dori să elaborați?
  • Da, îmi pare rău, Most@Experimental`CellRange[First, EvaluationCell[]]. Sau numai cu funcții documentate, TakeWhile[Cells[], # =!= EvaluationCell[] &]. Aceasta ar trebui să ofere o listă cu CellObjects înainte de cea de evaluare.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *