Copiei minha senha para a área de transferência! Você pode excluí-lo?


96

Seguindo as melhores práticas de segurança , mantenho um arquivo de texto sem formatação com minhas senhas no disco rígido. Na verdade, eu apenas copiei e colei um deles para acessar minha conta PPCG.

Em um momento lúcido, decido que a senha não deve permanecer na área de transferência após o uso. Como isso costuma acontecer comigo, eu poderia usar um programa para remover o conteúdo da área de transferência.

Desafio

Escreva um programa ou função que exclua ou substitua qualquer texto contido na área de transferência, usando a linguagem de programação de sua escolha.

Detalhes adicionais:

  • Se o seu sistema possui várias pranchetas, você pode escrever o programa para qualquer uma delas. O único requisito é que seja possível ao usuário copiar e colar texto usando essa área de transferência.

  • Se a sua área de transferência mantiver um histórico das entradas copiadas recentes, assuma a entrada mais recente.

  • Se sua resposta for específica para um sistema operacional ou área de transferência, indique-a no título da sua postagem, junto com o idioma usado.

  • A área de transferência é garantida para conter texto quando o programa é executado. Você pode excluir o conteúdo da área de transferência ou substituí-lo por outra coisa (não necessariamente texto). O único requisito é que, após a execução do programa, colar da área de transferência não produza o texto original.

  • Se você optar por sobrescrever algum texto fixo ou escolhido aleatoriamente, poderá assumir que o conteúdo anterior da área de transferência é diferente desse texto, para que a senha seja efetivamente removida. Em outras palavras, desconsidere a possibilidade de o texto do preenchimento coincidir com a senha.

  • O programa não deve ter efeitos colaterais, como reiniciar o sistema, fechar programas, desligar o computador ou congelá-lo. Após a execução do programa, o usuário poderá continuar usando o computador normalmente, apenas com a senha removida da área de transferência. Além disso, as brechas padrão são proibidas.

O menor código em bytes vence.


E se a área de transferência tiver um número indeterminado de entradas?
LarsW

20
Em uma nota mais séria: use algo como keepass para fazer isso por você.
flawr

17
"Desconsidere a possibilidade de o texto de preenchimento coincidir com a senha." Solução: ``, 0 bytes. Sobrescreve a senha por si mesma.
Esolanging Fruit

2
@ Challenger5 mas isso é só Se você optar por substituir com algum texto fixo ou escolhidos aleatoriamente
Luis Mendo

11
A pior parte dessa questão é que posso me relacionar completamente com a história da introdução, apesar de saber que é satírica. ... então, keepass, hein? Deve olhar para isso ...
Nat

Respostas:


14

Excel, 1 pressionamento de tecla

Ctrl-C

Funciona porque o Excel, exclusivamente, sempre tem uma seleção. Provavelmente também funciona em outros aplicativos de planilha. Ao contrário de outras entradas de brincadeira, as respostas do Excel são realmente um pouco frequentes no PPCG.


2
Não são essas duas teclas digitadas? "Pressionar uma tecla é pressionar uma tecla no teclado. Cada pressionar é uma tecla." computerhope.com/jargon/k/keystroke.htm
Martijn

@Martijn Possivelmente. Acabei de copiar daqui .
Adám 02/03/19

Não sei se é realmente válido pontuar pressionando as teclas. Além disso, como você diz: Ao contrário de outras entradas de brincadeira , eu interpreto que, ao admitir, essa não é uma resposta realmente válida. Portanto, não vou aceitar, mesmo que seja o mais curto. Se você pode me apontar para algum meta-post relevante estabelecer a validade de teclas como método de pontuação, eu felizmente vai aceitar esta submissão
Luis Mendo

@LuisMendo Sua análise nas entrelinhas está correta, mas agora que dediquei um tempo à pesquisa no Meta: codegolf.meta.stackexchange.com/a/4817/43319 parece indicar que é aceitável, em oposição a "Windows" que não é um editor.
Adám

@ Adám Entendo que esse meta-post se refere a uma categoria hipotética de desafio "editor golf" , para não usar o número de pressionamentos de tecla como método de pontuação para desafios de "code golf". Eu pingado maçaneta e Dennis saber sua opinião
Luis Mendo

123

PowerShell, 3 bytes

scb

Esse é um alias padrão para Set-Clipboard. Quando chamado sem nada incorporado e sem argumentos fornecidos, afasta o conteúdo atual da área de transferência.


23
A resposta mais curta que realmente limpa a área de transferência em vez de configurá-la para uma nova linha ou algo não muito vazio.
Luna

1
Isso é muito legal.
beppe9000 #

72

Vim, 3 bytes

"*Y

Define o conteúdo da área de transferência para uma nova linha.

Por padrão, o vim abre um buffer vazio na inicialização. Agora, o programa Yanks (copia) toda a linha (incluindo uma nova linha) e armazena-a na área de transferência, colocando o texto no registro "*. A *pode ser alterado para um +para o outro clipboard.


6
Aaargh, eu estava indo apenas para postar esta resposta! +1, ferramenta certa para o trabalho. :)
DJMcMayhem

Se houver mais instalações do vim do que do PowerShell, essa deve ser a resposta aceita com base na "Universalidade";) #
311 JPCF

1
@JPCF e há muitas mais aplicações 'reais' escrito em C # do que há CoffeeScript etc. Não faz um melhor que o outro quando se trata de código-golf
Baldrickk

1
Duvido que haja mais instalações do vim do que o PowerShell, pois ele é instalado por padrão no Windows 8 ou superior.
Robert Fraser

56

Javascript (Chrome DevTools Console), 6 bytes

copy``

Observe que esse é um recurso do console (que também funciona no console do FF) e não faz parte do padrão de idioma.


3
Não sabia que JS tinha essa função. Também funciona no Firefox. (O conteúdo da área de transferência se tornar [\n ""\n])
ETHproductions

1
Pode confirmar isso também no Chrome. A área de transferência muda para:[\n ""\n ]
haykam 26/02

32
@ETHproductions Na verdade, essa função realmente não existe em JS. Este é um console embutido. (Que não invalida a resposta Mas talvez ele deve ser explicado de forma mais explícita..)
Arnauld

Bem, isso não existe Document.execCommand("copy")ou é uma área de transferência interna para o navegador? Eu uso isso em alguns scripts macaco adulteração, mas com preguiça de verificá-lo
pinkfloydx33

1
Ok ... esta é agora a minha nova resposta mais votada #
SuperJedi224

55

AppleScript, 20 bytes

set the clipboard to

Define a área de transferência para ... nada.


Salvei muitos bytes removendo o código para me enviar o conteúdo da área de transferência;)


32

Lote (Windows 7 e versão superior), 7 bytes

fc|clip

Nota: ele responderá a mensagem de erro como "FC: ...", mas funciona.

"clip" é um comando para copiar a saída de outro programa para a área de transferência (disponível desde o Windows 7)

"fc" é um comando para comparar dois ou mais arquivos. neste caso, não inserimos nenhum arquivo. ocorrerá um erro e, em seguida, "clip" definirá a área de transferência para uma string vazia.

desde que você tenha um arquivo "a" em seu diretório atual (ele pode estar vazio), é possível fazer um melhor:

clip<a

Edit: Veja o comentário de Matthew Steeples para a versão mais curta (mas no PowerShell não é um lote)


2
Você pode usar em scvez de fcevitar a mensagem de erro. Em seguida, o sctexto de ajuda seria definido na área de transferência. Além disso, +1 por me falar sobre clip.
Neil

2
Meu usado cd. :-)
Hand-E-Food

Acho clipe não vai pegar a saída de um não-comando? Então você não poderia simplesmente correr x|clip?
Djmiley2k - CoW

@ djsmiley2k Sim, ele coletará apenas a saída de um comando válido.
Divcy

4
Você pode derrubar outro personagem disso. hé um apelido (por padrão) para get-history, de modo que você pode fazerh|clip
Matthew Steeples

32

Bash no macOS, 8 bytes

:|pbcopy

: pode ser substituído por quase qualquer outro caractere único.


6
:|pbcopyfunciona tanto no bash quanto no zsh.
Digital Trauma

@Nax's Fixed now
cat

29

C (no Windows), 65 62 bytes

#include<windows.h>
main(){OpenClipboard(0);EmptyClipboard();}

Editar: salvou 3 bytes graças a @Orion.


24
Como é C, você não pode usar em 0vez de NULL?
Orion

23

AHK , 10 bytes(Windows)

clipboard=

Limpa o conteúdo de texto da área de transferência. Se clipboardAllfor usado, limpa tudo.

Dos documentos -

Área de transferência é uma variável interna que reflete o conteúdo atual da área de transferência do Windows se esse conteúdo puder ser expresso como texto. Por outro lado, ClipboardAll contém tudo na área de transferência, como imagens e formatação.


22

Java 8, 127 125 bytes

Golfe:

()->java.awt.Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new java.awt.datatransfer.StringSelection(""),null)

Ungolfed:

public class ICopiedMyPasswordToTheClipboardCanYouDeleteIt {

  public static void main(String[] args) {
    f(() -> java.awt.Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
      new java.awt.datatransfer.StringSelection(""), null));
  }

  private static void f(Runnable x) {
    x.run();
  }
}

2
Você poderia usar uma string vazia em vez de nula? Salva 2 bytes
Poke

1
@ Poké sim, isso funciona. Eu estava focado em "excluir" o conteúdo da área de transferência, como realmente limpá-lo. Acontece que a substituição também é boa.

17

SmileBASIC 3, 10 bytes

Finalmente, um desafio praticamente feito para o SmileBASIC 3!

CLIPBOARD"

CLIPBOARDé um builtin que define a área de transferência de texto do ambiente para a sequência especificada. Aqui, fornecemos uma string vazia (o fechamento "não é necessário!)


Obrigado pela explicação, já que isso se parece com dois '!
msanford

17

Excel VBA, 9 8 bytes

[A1].Cut

Sobrescreve a área de transferência com o conteúdo da A1célula na planilha ativa (vazia por padrão, mas pode ser qualquer string / expressão de sua escolha - apenas certifique-se de que não seja sua senha!).

Utiliza a janela imediata.

Um byte economizado graças ao Slai


1
Agradável! Você pode salvar um byte com[a1].Cut
Slai

16

Python 56 48 40 bytes (Funciona apenas no Linux) .

8 bytes salvos graças ao @wheatwizard.

import os as o
o.system("echo|xclip")

1
Bem vindo ao site! Percebo alguns golfe que você pode fazer. em vez de importar systemde osvocê, pode import os as oligar e ligar o.system. Você também não precisa dos espaços ao redor do seu pipe no comando bash.
Assistente de trigo

35
É 6 bytes mais curto sem a as oparte ... ( import os \n os.system("echo |xclip") #
27717

4
Você também pode substituir echo com :para":|xclip"
Rɪᴋᴇʀ

22
Ou apenas uma linha em 37 bytes:__import__('os').system("echo|xclip")
Daniel

4
Há também uma alternativa aos sistemas Linux xclipchamados xsel, o que economizaria outro byte - e, como já mencionado, remova a parte de importação "as" novamente, apenas torna as coisas mais longas: import os;os.system(":|xsel")(29 bytes).
Byte Commander

14

Idioma do Google Chrome, 2 pressionamentos de teclas

<c-S><c-C>

Com base nesta resposta do Notepad ++.

O Google Chrome é compatível com Javascript (que, por sua vez, é compatível com RegExp). Por isso, afirmo que é um superconjunto de Javascript e um idioma próprio.

Como funciona:

Ctrl+Sinvocará a caixa de diálogo "Salvar página" com o texto "Nova guia" pré-selecionado e Ctrl+Co copiará para a área de transferência, deslocando o conteúdo anterior.

Nota:

Você pode acessar a funcionalidade Javascript no Chrome, por meio de javascript:URLs e do console das Ferramentas do desenvolvedor (chamado Ctrl + Shift + J)


Gah, eu queria usar o Google Chrome, mas não sabia que podia argumentar como um superconjunto de JS ... bem jogado.
Pavel

8
Acho que pressionar o botão Imprimir tela (1 pressionamento de tecla) é uma solução no idioma do Windows, que é um superconjunto do Google Chrome Lang.
Memor Olsen # 1/17

@MemetOlsen Sim, exatamente, fique à vontade para publicá-lo. Já temos o "Notepad ++ Language" e o "Google Chrome Language"; portanto, o "Windows Language" parece ser o próximo passo lógico a ser seguido! :)
zeppelin

1
@MemetOlsen não é um superconjunto do Google Chrome Lang, já que o Chrome é uma "biblioteca" externa que você precisa fazer o download. Ele é um super-IE Lang, que é um subconjunto de JS.
Pavel Pavel

Obrigado pessoal, eu adicionei minha sugestão como minha primeira resposta neste site SE.
Memet Olsen

11

bash + xsel 8 7bytes

xsel -c

Explicação

-b: Funciona na seleção da área de transferência

-c: limpa a seleção


1
+1, mas isso não é coreutils
Pacholik

@pacholik Sim, você precisa instalar o pacote, já que eu o operava no terminal, mencionei como coreutils.
Abel Tom

1
No Debian, o xsel está no pacote xsel, não faz parte do coreutils.
Brian Minton 27/02

Como podemos usar qualquer área de transferência que desejamos, acho que você pode soltar o b.
Dennis

@Digital Trauma Fair suficiente
Abel Tom

10

Mathematica, 17 bytes

CopyToClipboard@0

Define a área de transferência para o número 0.


10

R (Windows) 18

writeClipboard("")

Você conhece um equivalente Linux?

Eu acho que algo como readLines(file("clipboard", "r")) pode funcionar. Tente procurar nos documentos de ajuda do R em "Funções para manipular conexões".
Solhador

8

Matlab, 19 13 bytes

gcf;print -dm

Defina o conteúdo da área de transferência para uma figura vazia.


É 21 bytes UTF-8
CAD97

@LuisMendo Este é mais longo (23): axes;print -dmeta;closemas também funciona ...
EBH

@EBH Isso closepode ser removido. Por "efeitos colaterais", eu estava pensando nas coisas desaparecendo, não aparecendo. Também print(gcf,'-dm')funciona
Luis Mendo

@LuisMendo Bem, eu não sabia que -dmé como -dmeta, e pensei que o programa deve trabalhar 'em silêncio', sem avançar qualquer janela :)
EBH

2
@LuisMendo, de fato, é o meu primeiro. Agora a sugestão é ainda mais curta.
EBH 26/02

8

Bash, 11 10 8 7 bytes

2 bytes salvos graças a @seshoumara por usar em lsvez deecho

Graças a hexafraction, isaacg e Riker por sugerirem vários 7 byters

w|xclip

A área de transferência está definida para o resultado de w. Isso funciona apenas em sistemas baseados em X11. Por exemplo, no macOS, essa área de transferência pode ser acessada usando um aplicativo baseado em X como o XQuartz.


Resposta antiga apenas para o macOS ( 11 9 bytes):

ls|pbcopy

Isso define o conteúdo da área de transferência para uma nova linha.


Que tal ls|xclip?
26517 seshoumara

@seshoumara Thanks! (e pensar que eu ls /usr/bin | grep "^.\{1,3\}$"'d para procurar um comando mais curto: P)
Kritixi Lithos

3
Ou w|xclippor um a menos. Despeja a lista de usuários logados na área de transferência.
ζ--

4
Or :|xclip. Realmente limpa a área de transferência.
Isaacg

1
Huh, trabalha na minha máquina. E, como os envios podem esperar entrada vazia, o mesmo ocorreria xclipsem tubos.
Dennis


7

Python + tkinter, 43 bytes

Python 3:

from tkinter import*;Tk().clipboard_clear()

Python 2:

from Tkinter import*;Tk().clipboard_clear()

O tkinter está incluído na distribuição python?
Cruncher

@Cruncher É no meu Python 3.
DLosc

@Cruncher Sim, faz parte do stdlib, embora eu acredite que o debian o empacote em um pacote separado ( python-tk) do "core python".
Bakuriu

Dê uma olhada no comentário do Dopapp para uma maneira ainda mais curta.
jpaugh

@jpaugh Se você estiver se referindo à alteração do estilo de importação __import__("tkinter")...., neste caso, será 1 byte a mais.
Trelzevir 02/03

7

C #, 30 bytes

Obrigado a Nat , JMD e BgrWorker por suas sugestões!

System.Windows.Clipboard.Clear

C # sem WPF, 36 bytes

System.Windows.Forms.Clipboard.Clear

Função interna que esvazia a área de transferência.

Programa completo com caso de teste:

using System;
using System.Windows.Forms;

class ClearClipboard
{
    static void Main()
    {
        Action f =
        ()=>System.Windows.Forms.Clipboard.Clear();

        // test case:
        Clipboard.SetText("SomePassword!");
        Console.WriteLine("In clipboard initially: " + Clipboard.GetText());
        f();
        Console.WriteLine("In clipboard now: " + Clipboard.GetText());
    }
}


4
Além disso, Clipboard.Clear()já é uma função, portanto, o lambda pode ser descartado.
Nat

1
Não vou me incomodar em adicionar uma resposta para o LINQPad, pois essa resposta funcionaria apenas nela. System.Windows.Clipboard.Clear();Mas, lprun pode ser uma maneira mais leve de executar essa resposta do que o VS ou mesmo o VS Code.
JMD 27/02

@ Nat Ao omitir .Forms, ele não foi compilado no Linux e eu não tenho uma máquina Windows no momento.
adrianmp

2
@adrianmp essa classe está contida apenas no PresentationCore.dll, uma referência adicionada por padrão em projetos do tipo WPF. Eu não tenho idéia se isso dll está incluído no Mono / .NET Núcleo
BgrWorker

6

Haskell, 34 bytes

import System.Hclip
setClipboard""

Apenas uma função de biblioteca chata. Também existe clearClipboarda mesma contagem de bytes.


6

Bloco de notas ++, 3 pressionamentos de tecla

a<c-A><c-C>

Insere a letra a, seleciona e copia para o teclado.

O Notepad ++ é uma linguagem válida, suporta regex e, portanto, é um superconjunto de regex, e consideramos regex uma linguagem válida.


consider regex to be a valid languageReferências ? Aparentemente, o RegExp não é o Turing completo por si só.
Zeppelin

2
@ zeppelin Não precisa ser o Turing Complete para ser um idioma válido.
Pavel

It doesn't have to be Turing Complete to be a valid languagePor essa medida, podemos afirmar que quase tudo é uma "linguagem". Ou seja, XML ou HTML também têm uma sintaxe (e até se chamam linguagens, ao contrário do RegExp), no entanto, não acho que sejam aceitáveis. Você pode fornecer um exemplo de uma resposta pura do Regexp, que foi aprovada pela comunidade? Além disso, acredito que o Notepad ++ realmente não "suporta regexp" no sentido de que pode invocá-lo programaticamente, e abrir a caixa "Pesquisar e substituir" da interface do usuário para digitar um RegExp lá, não é um "código de programa" em nenhuma medida.
Zeppelin

1
@zeppelin meta.codegolf.stackexchange.com/a/4817/60042 <- meta post relevante. Lembre-se de que você pode acessar a pesquisa e substituição no N ++ por <c-H>e usar <tab>para navegar pela interface do usuário e interagir com todos os campos relevantes. Observe também que o regex pode determinar a primalidade e adicionar números. (Tanto na unária, que é a representação numérica padrão para expressão regular)
Pavel

o meta post em questão refere-se aos editores das classes Vim e Emacs, que são extremamente programáveis, não o Bloco de Notas. E sim, já vi pessoas usarem o RegExp para testes de primalidade neste site, mas isso é apenas um caso engraçado e não uma prova real de que o RegExp é uma linguagem. Portanto, forneça uma referência a qualquer resposta "pura-Regexp" aprovada, para provar seu argumento.
Zeppelin

6

Python 33 bytes (funciona apenas no Windows) .

4 bytes salvos da versão @hubacub.

3 bytes alternando para o Windows, usando a solução @Divcy

import os
os.system("fc|clip")

Acabei de me registrar no stackexchange, por isso não tenho reputação de comentar apenas no envio do @hubacub. Não é necessário gastar 5 bytes com "como o" na importação para salvar 1 byte para reduzir "os.system" para "o.system".


Bem vindo ao site!
Luis Mendo

6

J (Windows), 12 bytes

wd'clipcopy'

wdé a biblioteca padrão de J para Windows. wd 'clipcopy password'colocaria o texto passwordna área de transferência. A especificação de nada limpa a área de transferência.

Se você deseja que um programa coloque sua senha de texto sem formatação na área de transferência, use o seguinte:

pass =. 'abc123'
wd 'clipcopy ' , pass

Este não é um programa de função ou preenchimento, mas um fragmento. Você precisaria torná-lo um verbo para que seja válido. você poderia fazer algo parecido com'clipcopy 'wd@,]
Conor O'Brien

A que "isso" você está se referindo? Os dois pedaços de código são arquivos executáveis ​​.ijs.
Dane

Eu poderia simplesmente ter entendido errado. Desculpe por isso haha. De qualquer forma, você pode remover o espaço entre wde 'clipcopy'.
Conor O'Brien

Obrigado! Raspou um byte. Estou tão acostumado a espaços para me ajudar a ler J que não pensei nisso.
Dane

5

JavaScript 175 148 139 135 69 Bytes

Golfe:

<input value="c"onclick="this.select();document.execCommand('copy')">

Violino

Ungolfed

Obteve ajuda do SitePoint

HTML:

<input style="display: none;" id="Empty" value="x">
<input id="clipclear" type="button" value="Clear The Clipboard">

JS:

function clearclip(){
empty=document.getElementById("Empty");
empty.style.display="block";
empty.select();
        document.execCommand('copy');
empty.style.display="none";
}      
document.getElementById("clipclear").addEventListener("click", clearclip, false);


Testado em FF e Chrome
TecBrat 27/02

1
Não publique até jogar golfe. Por enquanto, você pode excluir sua resposta, editá-la para jogar golfe e desmarcar sua resposta.
NoOneIsHere 27/02

@NoOneIsHere, Ok, fui em frente e joguei golfe. Aqui está o novo violino .
TecBrat 27/02

1
Em vez de comentar, edite o violino na sua resposta. Além disso, ótimo trabalho no golfe. Eu te dei um +1. (FYI, a linguagem é tecnicamente HTML + JavaScript.)
NoOneIsHere

5

Java 8 (JavaFX), 61 bytes

()->javafx.scene.input.Clipboard.getSystemClipboard().clear()

A API JavaFX para manipular a área de transferência é um pouco mais concisa do que as AWT;)


5

Tcl / Tk wish shell (REPL), 5 bytes

cli c

O Wish Shell (REPL) permite comandos incompletos, desde que não haja ambiguidade, o comando completo seria:

clipboard clear

4

PHP + PHP GTK 2.0 , 24 bytes

Isso pressupõe que você já tenha a extensão PHP GTK carregada.

<?GtkClipboard::clear();

Referência da documentação: http://gtk.php.net/manual/en/html/gtk/gtk.gtkclipboard.method.clear.html


Você não precisa da <?marca de abertura, pois é possível executar o código sem a <?marca na linha de comando com a -ropção Veja mais informações aqui: meta.codegolf.stackexchange.com/questions/7098/…
Kodos Johnson

@KodosJohnson Eu deixei intencionalmente a tag de abertura lá.
Ismael Miguel

@KodosJohnson Ele ainda teria que adicionar os bytes nos sinalizadores.
Ckjbgames #

@ckjbgames Não, eu não faria. A bandeira é grátis. Não mudei o código porque deixei intencionalmente as tags de abertura.
Ismael Miguel

@IsmaelMiguel Já vi pessoas adicionando sinalizadores de interpretador / compilador à contagem de bytes.
Ckjbgames
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.