Czy istnieje skrót do zaznaczania wszystkich komórek powyżej bieżącej pozycji kursora?

Czy istnieje polecenie / pozycja menu / skrót klawiaturowy do oceny wszystkich komórek powyżej / do bieżącej pozycji kursora? Mam wrażenie, że brakuje mi tutaj czegoś podstawowego …

Dodatek : W rzeczywistości to bardziej kwestia wyboru tych komórek, ocena sama w sobie nie stanowi problemu.

Komentarze

  • Shift-Home Shift-Enter może? (na klawiaturze z Home)
  • BARDZO przydatne! ' sugerowałem WRI tę funkcję od kilku lat.
  • @AndreasLauschke uff, cieszę się, że ´ m nie tylko ten. I wydaje się, że to niewielki wysiłek, aby dodać to do menu / skrótów. Kogo w WRI powinniśmy zrobić, aby wzmocnić twoje wysiłki?
  • Bezużyteczne. Forgeddaboudit. Ale możesz umieścić rozwiązanie Rolfa ' s, Martina ' s lub Rojo ' s w init.m, aby umieścić go na przycisku w palecie lub użyj keytranslate. Nie potrzebuję klawisza Caps Lock, uważam go za najbardziej bezużyteczny klawisz w historii, więc zastanawiam się nad włączeniem Caps Locka. Rozwiązuje jednocześnie dwa problemy i zamienia je w rozwiązania. Nie ' nie lubię zbytnio przeciążać klawiszy Shift i Ctrl, ponieważ mam dla nich inne tłumaczenia klawiszy na poziomie O / S, ale Caps Lock jest darmowy i bezużyteczny.
  • @AndreasLauschke lubię poprawkę Caps Lock dwa w jednym. Koniec z niepotrzebnym szaleństwem! Hmm, produktywny wieczór.

Odpowiedź

Jedną z możliwości jest zmodyfikowanie osobistego KeyEventTranslations.tr (testowane tylko w systemie Windows). Oceń poniższe elementy, a następnie uruchom ponownie Mathematica, a następnie Ctrl + Shift + Home zaznaczy wszystkie komórki powyżej punktu wstawiania.


Wersja 9.0.1. użyj: 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"]; 

Komentarze

  • (… bierze głęboki oddech …) NIESAMOWITE! To jest czyste złoto, a także dzwonki i gwizdki. Mój przepływ pracy wysyła najszczersze pozdrowienia i wraca do domu wcześnie, aby świętować.
  • @YvesKlett Gern geschehen. Właściwie dodałem SelectionEvaluate [SelectedNotebook []]; na końcu KernelExecute, ponieważ zazwyczaj lubię to robić. Myślę, że jest to kwestia osobistego stylu pracy, czy się tego chce, czy nie. Może ludzie w WRI pracują inaczej? A może masz mniejsze notebooki? Lub nie ' naprawdę używaj notebooków do testowania (czy jesteś fanatykiem WWB?). Kto wie. Przynajmniej dość łatwo jest modyfikować / ulepszać rzeczy w Mathematica.
  • nieznacznie zmodyfikowane, aby działały również poprawnie pod Linuksem … Zauważ, że osobiście uważam, że Control Shift UpKey jest łatwiejsza. Więc to, czego używam, może być używane na przykład Import["http://www.mertig.com/shortcuts.m"]
  • Zaktualizowano komentarze do wersji 9.0.1. Użyj: Import["http://www.mertig.com/shortcuts.m"]
  • Bardzo, bardzo ładnie. Podany kod można (bardzo) nieznacznie zmodyfikować, aby utworzyć skrót, który wybiera wszystkie komórki poniżej bieżącej komórki, używając Ctrl + Shift + DownArrow. Po definicji mymenuitems wystarczy dodać następujący wiersz: mymenuitems=StringReplace[mymenuitems, {"Home" -> "Down","Next" -> "Previous", "Previous" -> "Next", "Before" -> "After"}];.

Odpowiedź

Właśnie nad czymś pracowałem i oto efekt uboczny. Nic nowego, ale podane w formie zamkniętej jako przycisk palety:

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

Kursor nie może znajdować się między komórkami, ale w komórce, która ma być oceniana na końcu.

Komentarze

  • Dziękuję bardzo za tę ogromną oszczędność czasu, którą wymyśliłeś! (hehe, w końcu mam wystarczająco dużo punktów, aby ci podziękować). Jak wiesz, nieznacznie zmodyfikowałem twoją rutynę, aby pozbyć się ” beep, ” i opublikowałem poniższy mod. Nie ' nie używam MMA wystarczająco często, aby zapamiętaj kilka poleceń klawiszowych, więc ' fajnie jest mieć ładną małą paletę z jedną ” Ocena powyżej ” na nim tha t Mogę wygodnie umieścić gdziekolwiek.
  • @BillN Żaden problem 🙂 Powodzenia i mam nadzieję, że będziesz tu częściej przychodzić 🙂 Nie tylko po to, by poprawiać moje odpowiedzi 🙂

Odpowiedź

To jest modyfikacja odpowiedzi @Kuba, ponownie oceniająca wszystkie komórki powyżej i łącznie z wybraną komórką, ale bez „sygnału” (drobne udoskonalenie). Dzięki @Kuba za główny program. Podobnie jak w przypadku oryginału, kod generuje kiepską paletę z pojedynczym przyciskiem „Oceń powyżej”, który można następnie umieścić w dowolnym dogodna lokalizacja (na przykład obok innych elementów menu u góry działającego notatnika). Aby przycisk „Oceń powyżej” działał, należy wybrać komórkę (dowolną komórkę).

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

Zmiana kodu wybiera tylko komórki wejściowe do oceny, „przeskakując” (generując wynik zerowy) dla wszystkich innych stylów komórek. Dzięki @John Fultz za polecenie, które zwraca style komórek (w sekcji „Jak uzyskać styl zaznaczonych komórek?”). Oczywiście, „sygnał dźwiękowy” wystąpiłby, gdyby komórki nie-wejściowe zostały poproszone o ocenę. Wygląda na to, że działa dobrze z Mathematica 11.0.1.

Jestem nowy w Mathematica i ten wątek nie jest aktywny od jakiegoś czasu. Więc nie jestem pewien, czy jest teraz jakiś łatwy sposób aby zrobić to wbudowane (nie można niczego znaleźć) lub czy nadal jest wymagana niestandardowa procedura, taka jak ta.

Aktualizacja 3/10/18: Dodałem opcję przycisku Metoda -> „W kolejce „, aby zapobiec przekroczeniu limitu czasu, który występuje przy domyślnej metodzie oceny przycisku„ Wywłaszczająca „. Opcja „W kolejce” służy do oceny funkcji przycisków w głównym łączu, które nigdy nie przekraczają limitu czasu.

Komentarze

  • +1, które powinieneś powiedzieć ja;) Nie ' nie jestem tego świadomy, ponieważ nie używam go na co dzień;)
  • Sry @Kuba 🙂 I ' jestem tu taki nowy, nie ' nie mam jeszcze wystarczająco dużo punktów, aby nawet skomentować Twój post (hehe). Wielkie podziękowanie nadchodzi, gdy to zrobię. To jest ogromny ” czynnik powodujący kłopoty ” reduktor.
  • Dziękujemy za aktualizacja. Nie znam żadnych zmian w interfejsie, które to ułatwiałyby, ale jestem bardzo zadowolony z rozwiązania Rolfa '.
  • @Yves Klett Dzięki za pozwolenie wiedz, że funkcja niestandardowa jest nadal wymagana.
  • @BillN witamy na imprezie: D

Odpowiedź

Możesz ocenić komórki wejściowe przed bieżącą komórką, uruchamiając to

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

Komentarze

  • Brawo! Jedyne, czego teraz brakuje, to wygodny skrót (ale jest to już objęte odpowiedzią @RolfMertig ´).
  • skrót lub przycisk w palecie. ' prawdopodobnie umieszczę to na przycisku na palecie, razem z innymi przydatnymi przyciskami.
  • Nie ' myślę, że to jest tak łatwe do umieszczenia w przycisku, ponieważ potrzebujesz EvaluationCell []
  • @RolfMertig w takim przypadku Experimental PreviousCell [] `daje więcej sens

Odpowiedź

Nie mam pojęcia, jak to zrobić w odniesieniu do kursora w ogóle, ale używając CellObject możesz wiele zrobić, jeśli jesteś w komórce.

Jest całkiem sporo, które możesz zrobić z SelectionMove. Poniższe opcje wybiorą wszystkie komórki w notatniku oceny. Zauważ, że dość dziwnie All określa bieżący notatnik, After i Previous podają odpowiedni element listy notatników dostarczony przez ocenę Notebooks[].

SelectionMove[EvaluationNotebook[], All, Notebook] 

Zaznaczenie można przesunąć zgodnie z CellGroup. Ten przycisk będzie stopniowo zaznaczał każdy element CellGroup nad przyciskiem:

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

Dokumentacja zawiera sporo przykładów i pokazuje, że można jej użyć do wybrania wewnętrznej zawartości komórki, jak również całych komórek.

Myślę, że jest to sposób, w jaki mogę poproś Mathematica, aby podał mi listę CellObject przed pierwszym z SelectedCells, ale jeszcze nie do końca.

Komentarze

  • Most@Experimental CellRange [First, EvaluationCell []] . Or with only documented functions, TakeWhile [Cells [], # =! = EvaluationCell [] &] == Most @ Experimental CellRange[First, EvaluationCell[]]
  • Przepraszam, myślałem, że to było przed oceną komórki hte, użyj SelectedCell[] zamiast wybranej komórki
  • That ' jest całkiem fajny, ' będę musiał pobawić się CellRa nge. Nie mogę ' wierzyć, że kontekst eksperymentalny pojawia się teraz w menu uzupełniania poleceń.
  • @Rojo Twój pierwszy komentarz pochłonął lewy przycisk kontekstowy, a reszta tak naprawdę nie pracuj tutaj nad wersją 9 … czy chciałbyś to rozwinąć?
  • Tak, przepraszam, Most@Experimental`CellRange[First, EvaluationCell[]]. Lub tylko z udokumentowanymi funkcjami, TakeWhile[Cells[], # =!= EvaluationCell[] &]. To powinno dać listę CellObjects przed testem.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *