Existe um atalho para selecionar todas as células acima da posição atual do cursor?

Existe um comando / entrada de menu / atalho de teclado para avaliar todas as células acima / até a posição atual do cursor? Tenho a sensação de que estou perdendo algo elementar aqui …

Adendo : Na verdade, é mais sobre a seleção dessas células, a avaliação não é o problema como tal.

Comentários

  • Shift-Home Shift-Enter talvez? (em um teclado com Home)
  • EXTREMAMENTE útil! Eu ‘ venho sugerindo esse recurso ao WRI há vários anos.
  • @AndreasLauschke phew, fico feliz que ´ m não é o único. E parece um pequeno esforço adicionar isso ao menu / atalhos. Quem no WRI devemos chamar para reforçar seu esforço?
  • Inútil. Forgeddaboudit. Mas você pode colocar a solução de Rolf ‘ s ou Martin ‘ s ou Rojo ‘ s em um init.m, para colocá-lo em um botão em uma paleta, ou use o keytranslate. Não tenho nenhum uso para a tecla Caps Lock, acho que é a tecla mais inútil de todas, então eu considero colocá-la em Caps Lock. Resolve dois problemas ao mesmo tempo e os transforma em soluções. Eu não ‘ não gosto muito de sobrecarregar as teclas Shift e Ctrl, pois tenho outras traduções de teclas para elas em um nível o / s, mas Caps Lock é gratuito e inútil.
  • @AndreasLauschke Eu gosto da correção dois em um do Caps Lock. Não há mais SHOUTING desnecessário também! Hmm, uma noite produtiva.

Resposta

Uma possibilidade é modificar seu (testado apenas no Windows). Avalie o seguinte, reinicie o Mathematica e Ctrl + Shift + Home selecionará todas as células acima do ponto de inserção.


Para 9.0.1. use: 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"]; 

Comentários

  • (… respirando fundo …) INCRÍVEL! Isso é ouro puro e com sinos e apitos também. Meu fluxo de trabalho envia os mais sinceros cumprimentos e vai para casa mais cedo para comemorar.
  • @YvesKlett Gern geschehen. Na verdade, adicionei SelectionEvaluate [SelectedNotebook []]; no final de KernelExecute, já que normalmente gosto de fazer isso. É uma questão de estilo pessoal de trabalho, acho que se quer isso ou não. Talvez as pessoas no WRI trabalhem de maneira diferente? Ou tem notebooks menores? Ou não ‘ não use notebooks realmente para teste (sendo todos eles fanáticos por WWB?). Quem sabe. Pelo menos é suficientemente fácil modificar / melhorar as coisas no Mathematica.
  • ligeiramente modificado para funcionar também no Linux corretamente … Observe que eu pessoalmente acho Control Shift UpKey mais fácil. Então, o que eu uso pode ser usado como Import["http://www.mertig.com/shortcuts.m"]
  • Atualizados os comentários para 9.0.1. Use: Import["http://www.mertig.com/shortcuts.m"]
  • Muito, muito bom. O código fornecido pode ser (muito) ligeiramente modificado para criar um atalho que selecione todas as células abaixo da célula atual, usando Ctrl + Shift + Seta para baixo. Após a definição de mymenuitems, basta adicionar a seguinte linha: mymenuitems=StringReplace[mymenuitems, {"Home" -> "Down","Next" -> "Previous", "Previous" -> "Next", "Before" -> "After"}];.

Resposta

Eu estava trabalhando em algo e aqui está “um efeito colateral. Nada de novo, mas fornecido em formato fechado como botão da paleta:

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

O cursor não deve estar entre as células, mas na célula que deve ser avaliada no final.

Comentários

  • Muito obrigado por essa grande economia de tempo que você criou! (Ei, finalmente consegui pontos suficientes para agradecê-lo). Como você sabe, modifiquei um pouco sua rotina para me livrar do ” beep, ” e postei o mod abaixo. Eu não ‘ não uso MMA com freqüência suficiente para lembre-se de vários comandos de tecla, então ‘ é bom ter uma paleta pequena e bacana com uma ” Avaliar acima ” botão nele que t Posso colocar convenientemente em qualquer lugar.
  • @BillN Sem problemas 🙂 Boa sorte e espero que você venha aqui com mais frequência 🙂 Não apenas para corrigir minhas respostas 🙂

Resposta

Esta é uma modificação da resposta de @Kuba, novamente avaliando todas as células acima e incluindo a célula selecionada, mas sem o “bipe” (um pequeno refinamento). Obrigado @Kuba pela rotina principal. Tal como acontece com o original, o código gera uma pequena paleta com um único botão “Avaliar acima”, que pode ser colocado em qualquer localização conveniente (como próximo a outros itens de menu na parte superior do seu notebook de trabalho). Uma célula (qualquer célula) deve ser selecionada para que o botão “Avaliar acima” funcione.

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

A alteração do código seleciona apenas células de entrada para avaliação, “pulando” (gerando um resultado nulo) para todos os outros estilos de célula. Obrigado @John Fultz pelo comando que retorna estilos de células (em “Como posso obter o estilo das células selecionadas?”). Evidentemente, um “bipe” ocorreria se células não-input fossem avaliadas. Isso parece estar funcionando bem com o Mathematica 11.0.1.

Eu sou novo no Mathematica, e este tópico não está ativo há algum tempo. Então, não tenho certeza se existe agora uma maneira fácil para fazer isso embutido (não consigo encontrar nada), ou se uma rotina personalizada como esta ainda é necessária.

Atualização 3/10/18: Eu adicionei a opção Botão Método -> “Fila “para evitar o tempo limite que ocorre com o método de avaliação do botão padrão” Preemptivo “. A opção “Em fila de espera” é usada para avaliar as funções do botão no link principal, que nunca atinge o tempo limite.

Comentários

  • +1 você deveria ter informado eu;) não estava ‘ ciente, pois não o uso diariamente;)
  • Sry @Kuba 🙂 I ‘ Sou tão novo aqui que não ‘ ainda não tenho pontos suficientes para comentar sua postagem (hehe). Um grande obrigado virá assim que eu fizer isso. Este é um enorme ” fator de incômodo ” redutor.
  • Obrigado pelo atualizar. Não estou ciente de nenhuma mudança no frontend para facilitar isso, mas estou muito feliz com a solução de Rolf ‘ s.
  • @Yves Klett Obrigado por me permitir saiba que uma função personalizada ainda é necessária.
  • @BillN bem-vindo à festa: D

Resposta

Você pode avaliar as células de entrada antes da célula atual executando este

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

Comentários

  • Viva! A única coisa que falta agora é um atalho conveniente (mas isso também já foi abordado pela resposta de @RolfMertig ´).
  • atalho ou botão em uma paleta. Eu ‘ provavelmente colocarei isso em um botão em uma paleta, junto com outros botões úteis.
  • Eu não ‘ acho que isso é tão fácil de colocar em um botão, já que você precisa de EvaluationCell []
  • @RolfMertig nesse caso, Experimental PreviousCell [] `faz mais sentido

Resposta

Não tenho ideia de como fazer isso em relação ao cursor em geral, mas usando CellObject você pode fazer muito se estiver em uma célula.

Há muito que você pode fazer com SelectionMove. O seguinte selecionará todas as células no caderno de avaliação. Observe que, estranhamente, All está especificando o bloco de notas atual, After e Previous fornecerá o respectivo elemento da lista de blocos de notas fornecida avaliando Notebooks[].

SelectionMove[EvaluationNotebook[], All, Notebook] 

A seleção pode ser movida de acordo com CellGroup. Este botão selecionará progressivamente cada CellGroup acima do botão:

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

A documentação para SelectionMove function fornece alguns exemplos e mostra que a função pode ser usada para selecionar o conteúdo interno de uma célula, bem como de células inteiras.

Acho que há uma maneira de eu poder peça ao Mathematica para me dar a lista de CellObject antes do primeiro de SelectedCells, mas “ainda não estou lá. >

Comentários

  • Most@Experimental CellRange [First, EvaluationCell []] . Or with only documented functions, TakeWhile [Cells [], # =! = EvaluationCell [] &] == Mais @ Experimental CellRange[First, EvaluationCell[]]
  • Desculpe, pensei que era antes de hte avaliar a célula, use SelectedCell[] para a célula selecionada
  • Isso ‘ é muito legal, ‘ vou precisar brincar com CellRa nge. Não posso ‘ acreditar que o contexto Experimental é mostrado no menu de conclusão do comando agora.
  • @Rojo seu primeiro comentário engoliu um backtick de contexto e o resto não trabalhar no V9 aqui … você gostaria de explicar melhor?
  • Sim, desculpe, Most@Experimental`CellRange[First, EvaluationCell[]]. Ou apenas com funções documentadas, TakeWhile[Cells[], # =!= EvaluationCell[] &]. Isso deve fornecer uma lista do CellObjects antes do avaliador.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *