Я скопіював свій пароль у буфер обміну! Чи можете ви її видалити?


96

Дотримуючись найкращих практик безпеки , я зберігаю звичайний текстовий файл із паролями на своєму жорсткому диску. Насправді я просто скопіював і вставив одну з них, щоб отримати доступ до свого облікового запису PPCG.

У світлий момент я вирішую, що пароль повинен не залишатися в буфері обміну після його використання. Оскільки це трапляється зі мною часто, я міг би скористатися програмою для видалення вмісту буфера обміну.

Виклик

Напишіть програму або функцію, яка видаляє або перезаписує будь-який текст, що міститься в буфері обміну, використовуючи мову вибору програми на ваш вибір.

Додаткові дані:

  • Якщо у вашій системі є кілька буферів обміну, ви можете написати програму для будь-якого з них. Єдина вимога полягає в тому, що користувач повинен мати можливість копіювати та вставляти текст за допомогою цього буфера обміну.

  • Якщо ваш буфер обміну зберігає історію останніх скопійованих записів, припустіть останню запис.

  • Якщо ваша відповідь стосується операційної системи або буфера обміну, вкажіть її у назві вашої публікації разом із використаною мовою.

  • Буфер обміну гарантовано містить текст під час запуску програми. Можна або видалити вміст із буфера обміну, або перезаписати його чимось іншим (не обов’язково текстом). Єдина вимога - після запуску програми вставлення з буфера обміну не видасть оригінальний текст.

  • Якщо ви вирішите перезаписати якийсь фіксований або випадковим чином обраний текст, ви можете припустити, що попередній вміст буфера обміну відрізняється від цього тексту, тому пароль ефективно видаляється. Іншими словами, ігноруйте можливість того, що текст наповнювача збігається з паролем.

  • Програма не повинна мати таких побічних ефектів, як перезапуск системи, закриття програм, вимкнення комп'ютера або його заморожування. Після запуску програми користувач повинен мати можливість продовжувати користуватися комп’ютером як звичайно, лише з паролем, видаленим із буфера обміну. Також заборонені стандартні лазівки .

Найкоротший код у байтах виграє.


Що робити, якщо в буфер обміну є невизначена кількість записів?
LarsW

20
Більш серйозна примітка: використовуйте щось на зразок Keepass, щоб зробити це для вас.
недолік

17
"Не враховуйте можливість того, що текст наповнювача збігається з паролем." Рішення: ``, 0 байт. Перезаписує пароль із собою.
Esolanging Fruit

2
@ Challenger5, але це лише якщо ви вирішили перезаписати якийсь фіксований або випадковим чином обраний текст
Луїс Мендо

11
Найгірша частина цього питання полягає в тому, що я можу повністю ставитися до вступної історії, незважаючи на те, що це сатирично. ... так, тримай, так? Потрібно заглянути в це ...
Нат

Відповіді:


14

Excel, 1 натискання клавіш

Ctrl-C

Працює тому, що в Excel, унікально, завжди є вибір. Можливо, працює і в інших додатках електронних таблиць. На відміну від інших жартівливих записів, відповіді Excel насправді дещо часті в PPCG.


2
Це не два натискання клавіш? "Натискання клавіші - це одне натискання клавіші на клавіатурі. Кожне натискання клавіші - це натискання клавіші." computerhope.com/jargon/k/keystroke.htm
Martijn

@Martijn Можливо. Я просто скопіював звідси .
Адам

Я не впевнений, що це дійсно дійсно забивати натисканням клавіш. Крім того, оскільки ви говорите На відміну від інших жартівливих записів , я тлумачу, що, як ви визнаєте, це не є дійсно вірною відповіддю. Тому я не прийму його, навіть якщо він найкоротший. Якщо ви можете вказати мені на якийсь відповідний мета-пост, що встановлює обгрунтованість натискань клавіш як методу підрахунку, я з радістю прийму це подання
Луїс Мендо,

@LuisMendo Ваш аналіз міжрядкових рядків є правильним, але тепер, коли я фактично взяв час на дослідження мета: codegolf.meta.stackexchange.com/a/4817/43319 , здавалося б, вказує на те, що це прийнятно, а не "Windows", який не є редактором.
Адам

@ Adám Я розумію, що цей мета-пост посилається на гіпотетичну категорію викликів "редактор гольфу" , а не на використання кількості натискань на клавіші як методу підрахунків для викликів "кодового гольфу". Я поскакував на Дорноб і Денніса, щоб дізнатися їх думку
Луїс Мендо

123

PowerShell, 3 байти

scb

Це псевдонім за замовчуванням для Set-Clipboard. Якщо дзвонити без нічого, і не наводиться аргументів, це видаляє поточний вміст буфера обміну.


23
Найкоротша відповідь, яка насправді очищає буфер обміну замість того, щоб встановити його на новий рядок або щось не зовсім порожнє.
Луна

1
Це дуже приємно.
beppe9000

72

Vim, 3 байти

"*Y

Встановлює вміст буфера обміну на новий рядок.

За замовчуванням vim відкриває порожній буфер при запуску. Тепер програма Yперетягує (копіює) весь рядок (включаючи новий рядок) і зберігає його у буфері обміну, додаючи текст до реєстру "*. *Може бути змінено на +для іншого буфера обміну.


6
Ааарх, я просто збирався опублікувати цю відповідь! +1, правильний інструмент для роботи. :)
DJMcMayhem

Якщо є більше встановлень vim, ніж powerhell, це має бути прийнятою відповіддю на основі "Універсальності";)
JPCF

1
@JPCF і є багато інших "фактичних" додатків, написаних на C #, ніж є coffeescript і т. Д. Це не робить одну кращу, ніж іншу, коли мова заходить про код-гольф
Baldrickk

1
Я сумніваюсь, що встановлено vim більше, ніж PowerShell, оскільки він встановлений за замовчуванням у Windows 8 і вище.
Роберт Фрейзер

56

Javascript (Chrome DevTools Console), 6 байт

copy``

Зауважте, що це особливість консолі (яка також працює в консолі FF) і не є частиною мовного стандарту.


3
Так, я не знав, що JS виконує цю функцію. Працює і в Firefox. (Зміст буфера обміну стає [\n ""\n])
ETHproductions

1
Це можна також підтвердити на Chrome. Буфер обміну змінюється на:[\n ""\n ]
haykam

32
@ETHproductions На насправді, то вона не буде дійсно існує в JS. Це вбудована консоль. (Що не скасовує відповідь. Але, можливо, це слід пояснити більш чітко.)
Арнольд,

Чи не існує це через Document.execCommand("copy")буфер обміну з внутрішнім браузером? Я використовую це в деяких сценаріях з мавпочками, але це лінь, щоб перевірити це
pinkfloydx33

1
Гаразд ... це тепер моя нова найбільш прихильна відповідь
SuperJedi224

55

AppleScript, 20 байт

set the clipboard to

Встановлює буфер обміну на ... нічого.


Я зберег багато байтів, видаливши код, щоб надіслати мені вміст буфера обміну;)


32

Пакетна версія (Windows 7 і новіша версія), 7 байт

fc|clip

Примітка: воно відповість на повідомлення про помилку типу "FC: ...", але воно працює.

"clip" - це команда скопіювати вихід іншої програми в буфер обміну (доступна з Windows 7)

"fc" - це команда для порівняння двох або більше файлів. у цьому випадку ми не вводимо жодного файлу. вона помилиться, тоді "clip" встановить буфер обміну в порожню рядок.

за умови, що у вашому поточному каталозі є файл "a" (він може бути порожнім), ви можете зробити краще:

clip<a

Редагувати: Дивіться коментар до @Matthew Steeples для коротшої версії (але в повному обсязі не пакет)


2
Ви можете використовувати scзамість цього, fcщоб уникнути повідомлення про помилку. Потім scтекст довідки буде встановлений у буфер обміну. Також +1 для розповіді про мене clip.
Ніл

2
Мій використовував cd. :-)
Hand-E-Food

Я здогадуюсь, кліп не підбере вихід без команди? Отже, ти не міг просто бігти x|clip?
djsmiley2k

@ djsmiley2k Так, він підбере лише вихід з дійсної команди.
Divcy

4
Ви можете збити іншого персонажа з цього. hпсевдонім (за замовчуванням) для get-history, так що ви можете зробитиh|clip
Matthew Steeples

32

Bash на macOS, 8 байт

:|pbcopy

: може бути замінено майже будь-яким іншим символом.


6
:|pbcopyпрацює в bash, а також zsh.
Цифрова травма

@Nax це виправлено зараз
кіт

29

C (у Windows), 65 62 байти

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

Редагувати: збережено 3 байти завдяки @Orion.


24
Оскільки це C, ви не можете використовувати його 0замість NULL?
Оріон

23

AHK , 10 байт(Windows)

clipboard=

Очищає текстовий вміст буфера обміну. Якщо clipboardAllвикористовується, вона очищує все.

З документів -

Буфер обміну - це вбудована змінна, яка відображає поточний вміст буфера обміну Windows, якщо цей вміст може бути виражений у вигляді тексту. На відміну від цього, ClipboardAll містить усе, що міститься у буфері обміну, такі як зображення та форматування.


22

Java 8, 127 125 байт

Гольф:

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

Безголовки:

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
Чи можете ви використовувати порожній рядок замість нуля? Зберігає 2 байта
ткнути

1
@ Poke так, це працює. Я зосереджувався на "видаленні" вмісту буфера обміну, як на справді їх очищенні. Виявляється, перезапис теж добре.

17

SmileBASIC 3, 10 байт

Нарешті, завдання для SmileBASIC 3 практично зроблене !

CLIPBOARD"

CLIPBOARDце вбудований параметр, який встановлює текстовий буфер обстановки на відповідний рядок. Тут ми надаємо йому порожній рядок (закриття "не потрібно!)


Дякую за пояснення, оскільки це виглядає як два '!
msanford

17

Excel VBA, 9 8 байт

[A1].Cut

Перезапис буфера обміну із вмістом A1комірки в активному робочому аркуші (за замовчуванням порожній, але може бути будь-який рядок / вираз на ваш вибір - просто переконайтеся, що це не ваш пароль!).

Використовує негайне вікно.

Один байт збережено завдяки Слаю


1
Приємно! Ви можете зберегти байт за допомогою[a1].Cut
Slai

16

Python 56 48 40 байт (працює лише в Linux) .

8 байт збережено завдяки @wheatwizard.

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

1
Ласкаво просимо на сайт! Я помічаю кілька гольфів, які ви можете зробити. замість того, щоб імпортувати systemз osвас, можна import os as oі зателефонувати o.system. Вам також не потрібні пробіли навколо вашої труби в команді bash.
Сріотчілізм О'Заїк

35
Це на 6 байт коротше без as oчастини ... ( import os \n os.system("echo |xclip")
17:00

4
Крім того, можна замінити echo з :на":|xclip"
Rɪᴋᴇʀ

22
Або лише один рядок у 37 байт:__import__('os').system("echo|xclip")
Даніель,

4
Існує також альтернатива xclipвиклику xselв системах Linux, яка б заощадила вам ще один байт - і як уже згадувалося, знову видаліть імпортну частину "as o", вона просто покращить: import os;os.system(":|xsel")(29 байт).
Командир байтів

14

Мова Google Chrome, 2 натискання клавіш

<c-S><c-C>

На основі цієї відповіді Блокнот ++.

Google Chrome підтримує Javascript (що, в свою чергу, підтримує RegExp), тому я заявляю, що він є набором Javascript і власною мовою.

Як це працює:

Ctrl+Sвикличе діалогове вікно "Зберегти сторінку" із попередньо вибраним текстом "Нова вкладка", Ctrl+Cскопіює його у буфер обміну, вивівши попередній вміст.

Sidenote:

Ви можете отримати доступ до функцій Javascript у Chrome через javascript:URL-адреси та консоль Інструментів для розробників (викликається Ctrl + Shift + J)


Гах, я хотів використовувати Google Chrome, але я не розумів, що можу стверджувати, що це суперсет JS ... добре зіграний.
Павло

8
Тоді я думаю, що натискання кнопки "Екран друку" (1 натискання клавіші) - це рішення в мові Windows, що є суперсетом Google Chrome Lang.
Memet Olsen

@MemetOlsen Так, точно, сміливо публікуйте це. У нас уже є "Мова блокнота ++" та "Мова Google Chrome", тому "Мова Windows" здається наступним логічним кроком! :)
zeppelin

1
@MemetOlsen - це не дуже суперсет Google Chrome Lang, оскільки Chrome - це зовнішня "бібліотека", яку ви повинні завантажити. Це є надбезліччю IE Ланга, який є надбезліччю JS.
Павло

Спасибі, хлопці, я додав свою пропозицію як свою першу відповідь на цьому веб-сайті SE.
Мемет Ольсен

11

bash + xsel 8 7 байт

xsel -c

Пояснення

-b: Працює з вибору буфера обміну

-c: очищає виділення


1
+1, але це не coreutils
pacholik

@pacholik Так, вам потрібно встановити пакет, оскільки я керував ним на терміналі, я згадав його як coreutils.
Авель Том

1
У Debian xsel знаходиться в пакеті xsel, не входить до coreutils.
Брайан Мінтон

Оскільки нам дозволено використовувати будь-який буфер обміну, який ми хочемо, я думаю, ви можете кинути його b.
Денніс

@Digital Trauma Fair досить
Abel Tom

10

Математика, 17 байт

CopyToClipboard@0

Встановлює буфер обміну на число 0.


10

R (Windows) 18

writeClipboard("")

Ви знаєте еквівалент Linux?

Я думаю, що щось подібне readLines(file("clipboard", "r")) може спрацювати. Спробуйте переглянути довідкові документи R у розділі "Функції для маніпуляції з'єднаннями".
Flounderer

8

Матлаб, 19 13 байт

gcf;print -dm

Встановити вміст буфера обміну в порожню фігуру.


Це 21 байт UTF-8
CAD97

@LuisMendo Це довше (23): axes;print -dmeta;closeале також працює ...
EBH

@EBH Це, closeможливо, можна видалити. За побічними ефектами я думав про те, що речі зникають, а не з’являються. Також print(gcf,'-dm')працює
Луїс Мендо

@LuisMendo Ну, я не знав, що -dmце таке -dmeta, і думав, що програма повинна працювати "мовчки", не вискакуючи жодного вікна :)
EBH

2
@LuisMendo справді, це моє перше. Зараз пропозиція ще коротша.
EBH

8

Bash, 11 10 8 7 байт

2 байти збережено завдяки @seshoumara за використання lsзамістьecho

Завдяки гексафракції, isaacg та Рікер запропонували кілька 7-байтних

w|xclip

Буфер обміну встановлений в результаті w. Це працює лише на системах на базі X11. Наприклад, у macOS доступ до цього буфера обміну можна використовувати за допомогою програми на базі X на зразок XQuartz.


Стара відповідь лише для macOS ( 11 9 байт):

ls|pbcopy

Це встановлює вміст буфера обміну на новий рядок.


Як щодо ls|xclip?
seshoumara

@seshoumara Дякую! (і подумати, що я ls /usr/bin | grep "^.\{1,3\}$"б шукав більш коротку команду: P)
Корови кракають

3
Або w|xclipна одного менше. Скидає список зареєстрованих користувачів у буфер обміну.
ζ--

4
Або :|xclip. Фактично очищає буфер обміну.
isaacg

1
Так, працює на моїй машині. А оскільки подання може очікувати порожнього входу, то це може бути голою xclipбез труб.
Денніс


7

Python + tkinter, 43 байти

Пітон 3:

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

Пітон 2:

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

tkinter включений в дистрибутив пітона?
Cruncher

@Cruncher Це в моєму Python 3.
DLosc

@Cruncher Так, це частина stdlib, хоча я вважаю, що debian пакує його в окремий пакунок ( python-tk) від "core python".
Бакуріу

Погляньте на коментар Допаппа ще коротше.
jpaugh

@jpaugh Якщо ви маєте на увазі зміну стилю імпорту __import__("tkinter")...., у цьому випадку це на 1 байт довше.
Трельзевір

7

C #, 30 байт

Дякуємо Nat , JMD та BgrWorker за їх пропозиції!

System.Windows.Clipboard.Clear

C # без WPF, 36 байт

System.Windows.Forms.Clipboard.Clear

Вбудована функція, яка спорожнює буфер обміну.

Повна програма з тестовим кейсом:

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
Також, Clipboard.Clear()це вже функція, тому лямбда можна скидати.
Нат

1
Я не буду заважати додавати відповідь для LINQPad, оскільки ця відповідь просто запуститься в ній. System.Windows.Clipboard.Clear();Але lprun може бути більш легким способом виконання цієї відповіді, ніж VS або навіть VS Code.
JMD

@Nat При пропуску .Formsвін не компілювався в Linux, і у мене зараз немає машини Windows.
adrianmp

2
@adrianmp цей клас міститься лише у PresentationCore.dll, посилання за замовчуванням додається для проектів типу WPF. Я поняття не маю, чи буде цей dll включений у Mono / .NET Core
BgrWorker

6

Хаскелл, 34 байти

import System.Hclip
setClipboard""

Просто нудна бібліотечна функція. Там же clearClipboardдля того ж байта.


6

Блокнот ++, 3 натискання клавіш

a<c-A><c-C>

Вставляє букву a, відбирає її, копіює її на клавіатуру.

Блокнот ++ є дійсною мовою, він підтримує регулярний вираз і, таким чином, є набором регулярних виразів, і ми вважаємо, що регулярна виразність є дійсною мовою.


consider regex to be a valid languageСписок літератури? Мабуть, RegExp не є Turing завершеним сам по собі.
zeppelin

2
@zeppelin Не потрібно бути Turing Complete, щоб бути дійсною мовою.
Павло

It doesn't have to be Turing Complete to be a valid languageЗа цією мірою ми можемо стверджувати, що майже що-небудь є "мовою". Тобто XML або HTML теж мають синтаксис (і навіть називають себе мовами, на відміну від RegExp), проте я не вважаю їх прийнятними. Чи можете ви навести приклад чистої відповіді на Regexp, яку схвалила громада? Більше того, я вважаю, що Notepad ++ насправді не "підтримує регулярний вираз" в тому сенсі, що він може викликати його програмно, і відкриття вікна "Пошук і заміна" інтерфейсу користувача для введення RegExp там не є "програмним кодом" жодним заходом.
zeppelin

1
@zeppelin meta.codegolf.stackexchange.com/a/4817/60042 <- відповідна мета-повідомлення. Майте на увазі, що ви можете отримати доступ до пошуку та заміни в N ++ <c-H>і використовувати <tab>для навігації по інтерфейсу користувача та взаємодії з усіма відповідними полями. Також зауважте, що регулярний вираз може визначати первинність і додавати числа. (Обидва в одинарному, що є типовим числовим поданням для регулярного виразу)
Павло,

мета-пост, про який йдеться, відноситься до редакторів класів Vim та Emacs, які надзвичайно програмовані, а не Блокнот. І так, я бачив, як люди використовують RegExp для тестування первинності на цьому сайті, але це лише кумедний кутовий випадок, а не справжнє підтвердження того, що RegExp є мовою. Тому, будь ласка, наведіть посилання на будь-яку схвалену відповідь "чистого Regexp", щоб підтвердити свою думку.
зеппелін

6

Python 33 байти (працює лише в Windows) .

4 байти збережено з версії @hubacub.

3 байти перемикаються на вікна, використовуючи рішення @Divcy

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

Щойно зареєстрований у stackexchange, тому я не маю репутації просто коментувати подання @hubacub. Не потрібно витрачати 5 байтів із символом "як o" в імпорті, щоб зберегти 1 байт, щоб зменшити "os.system" до "o.system".


Ласкаво просимо на сайт!
Луїс Мендо

6

J (Windows), 12 байт

wd'clipcopy'

wdє стандартною бібліотекою J для Windows. wd 'clipcopy password'помістив би текст passwordу буфер обміну. Вказуючи, що нічого не витирає буфер обміну.

Якщо ви хочете, щоб програма помістила ваш пароль прямого тексту в буфер обміну, ви можете скористатися наступним:

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

Це не функція або програма заповнення, а скоріше фрагмент. Вам знадобиться зробити його дієсловом, щоб воно було дійсним. ви могли б зробити щось на кшталт'clipcopy 'wd@,]
Conor O'Brien

На яке "це" ти йдеш? Обидва фрагменти коду - це виконувані файли .ijs.
Датчанин

Я, можливо, просто не зрозумів. Вибачте, але ха-ха. У будь-якому випадку ви можете видалити пробіл між wdі 'clipcopy'.
Conor O'Brien

Дякую! Поголили байт. Я просто настільки звик до пробілів, щоб допомогти мені прочитати J, що я не думав про це.
Датчанин

5

JavaScript 175 148 139 135 69 байт

Гольф:

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

Скрипка

Безумовно

Отримав допомогу від 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);


Випробуваний у FF та Chrome
TecBrat

1
Не публікуйте його, поки не пограєте в нього. Наразі ви можете видалити свою відповідь, відредагувати її, а потім видалити свою відповідь.
NoOneIsHere

@NoOneIsHere, Гаразд, я пішов вперед і пограв у нього. Ось нова загадка .
TecBrat

1
Замість коментарів, будь ласка, відредагуйте загадку у своїй відповіді. Також чудова робота з гольфу. Я дав вам +1. (FYI, мова технічно HTML + JavaScript.)
NoOneIsHere

5

Java 8 (JavaFX), 61 байт

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

API JavaFX для маніпулювання буфером обміну трохи коротше, ніж AWT;)


5

Обкладинка Tcl / Tk (REPL), 5 байт

cli c

Оболонка побажань (REPL) дозволяє виконувати неповні команди, якщо немає двозначності, повна команда буде:

clipboard clear

4

PHP + PHP GTK 2.0 , 24 байти

Це передбачає, що у вас вже завантажено розширення PHP GTK.

<?GtkClipboard::clear();

Посилання на документацію: http://gtk.php.net/manual/en/html/gtk/gtk.gtkclipboard.method.clear.html


Вам не потрібен <?тег відкриття, оскільки ви можете запустити код без <?тегу в командному рядку за допомогою -rперемикача. Детальніше дивіться тут: meta.codegolf.stackexchange.com/questions/7098/…
Кодос Джонсон

@KodosJohnson Я навмисно залишив там тег вступу.
Ісмаїл Мігель

@KodosJohnson Йому все одно доведеться додавати байти у прапори.
ckjbgames

@ckjbgames Ні, я б не став. Прапор безкоштовний. Я не змінив код, оскільки навмисно залишив вступні теги.
Ісмаїл Мігель

@IsmaelMiguel Я бачив, як люди додають прапори інтерпретатора / компілятора до кількості байтів.
ckjbgames
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.