Cè una scorciatoia per selezionare tutte le celle sopra la posizione corrente del cursore?

Esiste un comando / voce di menu / scorciatoia da tastiera per valutare tutte le celle sopra / fino alla posizione corrente del cursore? Ho la sensazione che mi manchi qualcosa di elementare qui …

Addendum : In effetti, riguarda più la selezione di quelle celle, la valutazione non è il problema in quanto tale.

Commenti

  • Maiusc-Home Maiusc-Invio forse? (su una tastiera con Home)
  • ESTREMAMENTE utile! ‘ suggerisco questa funzione a WRI da diversi anni.
  • @AndreasLauschke phew, lieto di essere ´ m non lunico. E sembra uno sforzo così piccolo aggiungerlo al menu / ai collegamenti. Chi in WRI dovremmo insultare per rafforzare i tuoi sforzi?
  • Inutile. Forgeddaboudit. Ma potresti inserire la soluzione di Rolf ‘ s o Martin ‘ so Rojo ‘ in un init.m, per metterlo su un pulsante in una tavolozza, o usare il keytranslate. Non ho bisogno del tasto Caps Lock, lo trovo il tasto più inutile in assoluto, quindi penso di metterlo su Caps Lock. Risolve due problemi contemporaneamente e li trasforma in soluzioni. Non ‘ mi piace sovraccaricare troppo i tasti Maiusc e Ctrl, poiché ho altre traduzioni di tasti per loro a livello di o / s, ma Caps Lock è gratuito e altrimenti inutile.
  • @AndreasLauschke Mi piace la correzione due in uno per il blocco delle maiuscole. Niente più spifferi inutili! Hmm, una serata produttiva.

Rispondi

Una possibilità è modificare il tuo (testato solo su Windows). Valuta quanto segue, quindi riavvia Mathematica, quindi Ctrl + Maiusc + Home selezionerà tutte le celle sopra il punto di inserimento.


Per 9.0.1. usa: 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"]; 

Commenti

  • (… facendo un respiro profondo …) IMPRESSIONANTE! Questo è oro puro, e anche con campane e fischietti. Il mio flusso di lavoro manda i saluti più sinceri e torna a casa presto per festeggiare.
  • @YvesKlett Gern geschehen. In realtà ho aggiunto SelectionEvaluate [SelectedNotebook []]; alla fine di KernelExecute, dato che di solito mi piace farlo. È una questione di stile di lavoro personale, immagino che lo si voglia o no. Forse le persone al WRI lavorano in modo diverso? O hai taccuini più piccoli? Oppure non ‘ utilizzare i notebook per i test (essendo tutti fanatici della WWB?). Chi lo sa. Almeno è sufficientemente facile modificare / migliorare le cose in Mathematica.
  • leggermente modificato per funzionare correttamente anche sotto Linux … Notare che personalmente trovo Control Shift UpKey più facile. Quindi quello che uso può essere usato come Import["http://www.mertig.com/shortcuts.m"]
  • Aggiornati i commenti per 9.0.1. Usa: Import["http://www.mertig.com/shortcuts.m"]
  • Molto, molto carino. Il codice fornito può essere (molto) leggermente modificato per creare una scorciatoia che seleziona tutte le celle sotto la cella corrente, usando Ctrl + Maiusc + Freccia giù. Dopo la definizione di mymenuitems, aggiungi la seguente riga: mymenuitems=StringReplace[mymenuitems, {"Home" -> "Down","Next" -> "Previous", "Previous" -> "Next", "Before" -> "After"}];.

Risposta

Stavo solo lavorando su qualcosa e qui “un effetto collaterale. Niente di nuovo ma dato in forma chiusa come pulsante della tavolozza:

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

Il cursore non deve trovarsi tra le celle ma nella cella che si intende valutare alla fine.

Commenti

  • Grazie mille per questo enorme risparmio di tempo che hai pensato! (Hehe, finalmente ho ottenuto abbastanza punti per ringraziarti). Come sai, ho modificato leggermente la tua routine per sbarazzarmi del ” beep, ” e ho pubblicato la mod di seguito. Non ‘ uso MMA abbastanza spesso per ricorda un sacco di comandi da tastiera, quindi ‘ è carino avere una piccola tavolozza elegante con quella ” Valuta sopra ” su di esso che t Posso posizionare comodamente ovunque.
  • @BillN Nessun problema 🙂 Buona fortuna e spero che verrai qui più spesso 🙂 Non solo per correggere le mie risposte 🙂

Risposta

Questa è una modifica della risposta di @Kuba, che valuta nuovamente tutte le celle sopra e include la cella selezionata, ma senza il “segnale acustico” (una rifinitura minore). Grazie @Kuba per la routine principale. Come con loriginale, il codice genera un simpatico tavolozza con un singolo pulsante “Valuta sopra”, che può quindi essere posizionato in qualsiasi posizione comoda (ad esempio accanto alle altre voci di menu nella parte superiore del notebook di lavoro). È necessario selezionare una cella (qualsiasi cella) affinché il pulsante “Valuta sopra” funzioni.

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

La modifica del codice seleziona solo le celle di input per la valutazione, “saltando” (generando un risultato Null) per tutti gli altri stili di cella. Grazie @ John Fultz per il comando che restituisce gli stili di cella (in “Come posso ottenere lo stile delle celle selezionate?”). Evidentemente, si verificherebbe un “beep” se si chiedesse di valutare celle non di input. Sembra funzionare bene con Mathematica 11.0.1.

Sono nuovo di Mathematica e questo thread non è attivo da un po . Quindi non sono sicuro che ora esista un modo semplice per farlo integrato (non riesco a trovare nulla), o se è ancora necessaria una routine personalizzata come questa.

Aggiornamento 3/10/18: ho aggiunto lopzione Button Method -> “Queued “per evitare il timeout che si verifica con il metodo di valutazione Button predefinito” Preemptive “. Lopzione “In coda” viene utilizzata per valutare le funzioni dei pulsanti sul link principale, che non scade mai.

Commenti

  • +1 che avresti dovuto dire me;) ‘ non lo sapevo perché non lo uso tutti i giorni;)
  • Sry @Kuba 🙂 I ‘ Sono così nuovo qui, non ‘ non ho ancora abbastanza punti per commentare il tuo post (hehe). Un grande grazie arriverà una volta che lo farò. Questo è un enorme ” fattore di riduzione “.
  • Grazie per il aggiornare. Non sono a conoscenza di alcun cambiamento nel frontend per facilitare ciò, ma sono molto soddisfatto della soluzione di Rolf ‘.
  • @Yves Klett Grazie per avermi permesso sappi che è ancora necessaria una funzione personalizzata.
  • @BillN benvenuto alla festa: D

Answer

Puoi valutare le celle di input prima della cella corrente eseguendo questo

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

Commenti

  • Evviva! Lunica cosa che manca ora è una comoda scorciatoia (ma anche questa è già coperta dalla risposta di @RolfMertig ´).
  • scorciatoia o pulsante in una tavolozza. ‘ probabilmente lo metterò su un pulsante di una tavolozza, insieme ad altri pulsanti utili.
  • Non ‘ Non penso che questo sia così facile da inserire in un pulsante, dal momento che hai bisogno di EvaluationCell []
  • @RolfMertig in questo caso, Experimental PreviousCell [] `fa di più senso

Risposta

Non ho idea di come farlo in relazione al cursore in generale, ma usando CellObject puoi fare molto se “sei in una cella.

Ci sono molte cose che puoi fare con SelectionMove funzione. Quanto segue selezionerà tutte le celle nel quaderno di valutazione. Tieni presente che stranamente All specifica il taccuino corrente, After e Previous ti daranno il rispettivo elemento dellelenco di taccuini fornito valutando Notebooks[].

SelectionMove[EvaluationNotebook[], All, Notebook] 

La selezione può essere spostata secondo CellGroup. Questo pulsante selezionerà progressivamente ogni CellGroup sopra il pulsante:

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

La documentazione per SelectionMove fornisce alcuni esempi e mostra che la funzione può essere utilizzata per selezionare il contenuto interno di una cella così come di intere celle.

Penso che ci sia” un modo in cui posso chiedi a Mathematica di fornirmi lelenco di CellObject prima del primo SelectedCells ma non sono ancora arrivato.

Commenti

  • Most@Experimental CellRange [First, EvaluationCell []] . Or with only documented functions, TakeWhile [Cells [], # =! = EvaluationCell [] &] == Most @ Experimental CellRange[First, EvaluationCell[]]
  • Scusa, pensavo fosse prima di valutare la cella, utilizza SelectedCell[] invece per la cella selezionata
  • Quella ‘ è fantastico, ‘ dovrò giocare con CellRa nge. Non posso ‘ credere che il contesto sperimentale sia visualizzato nel menu di completamento dei comandi ora.
  • @Rojo il tuo primo commento ha mangiato un backtick contestuale e il resto non lo è davvero lavora su V9 qui … vorresti approfondire?
  • Sì, scusa, Most@Experimental`CellRange[First, EvaluationCell[]]. O solo con funzioni documentate, TakeWhile[Cells[], # =!= EvaluationCell[] &]. Dovrebbe fornire un elenco di CellObjects prima di quello di valutazione.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *