
はてなキーワード:クリップボードとは
一度投稿したうえで別タブを開いてプログラム的(fetch)に送信してその別タブが閉じられる仕組み。
// ==UserScript== // @namePGP未署名検出と別タブ自動編集 // @namespacehttp://tampermonkey.net/ // @version 1.0 // @descriptionPGP署名がない投稿を自動編集ページへ誘導 // @matchhttps://anond.hatelabo.jp/* // @grantGM_setValue // @grantGM_getValue // @grantGM.openInTab // ==/UserScript== (function () { 'use strict';constbody = document.getElementById('entry-page'); if (!body) return;consttitleText = document.title; if (!titleText.includes('dorawii')) return;constpgpRegex = /BEGIN.*PGP(?: SIGNEDMESSAGE| SIGNATURE)?/;const preElements = document.querySelectorAll('div.body pre'); let hasPgpSignature =false; for (const pre of preElements) { if (pgpRegex.test(pre.textContent)) { hasPgpSignature =true; break; } } if (hasPgpSignature) return;const editLink = document.querySelector('a.edit');const childTab =GM.openInTab(editLink.href, {active:false, insert:true,setParent:true }); })();
// ==UserScript== // @name編集ページ処理と自動送信・閉じ // @namespacehttp://tampermonkey.net/ // @version 1.0 // @description編集ページで署名処理と送信、タブ自動閉じ // @matchhttps://anond.hatelabo.jp/dorawii_31/edit?id=* // @grantGM_getValue // @grantGM_xmlhttpRequest // @grantGM_setClipboard // @grantGM_notification // @connectlocalhost // ==/UserScript== (async function () { 'use strict';const shouldRun = awaitGM_getValue('open-tab-for-edit', '0');consttextareaId = 'text-body';consttextarea = document.getElementById(textareaId); if (!textarea) return;const content =textarea.value;constpgpSignatureRegex = /-----BEGINPGP SIGNEDMESSAGE-----[\s\S]+?-----BEGINPGP SIGNATURE-----[\s\S]+?-----ENDPGP SIGNATURE-----/; if (pgpSignatureRegex.test(content)) {console.log('[PGPスクリプト]署名が検出されたためそのまま送信します'); return; }consthttpRequest = (url, data) => { return newPromise((resolve,reject) => {GM_xmlhttpRequest({ method: 'POST',url:url, headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, data: `value=${encodeURIComponent(data)}`,onload: function (response) { resolve(response.responseText); },onerror: function (error) {reject(error); } }); }); }; //textarea の値を取得 // 1.現在のページのURLからURLオブジェクトを作成const currentUrl = newURL(window.location.href); // 2.ベースとなる部分 (例: "https://anond.hatelabo.jp") を取得constorigin = currentUrl.origin; // 3. 'id'パラメータの値 (例: "20250610184705") を取得constidValue = currentUrl.searchParams.get('id'); // 4.ベース部分とIDを結合して、目的のURL文字列を生成 //idValueが取得できた場合のみ実行する let newUrl = null; if (idValue) { newUrl = `${origin}/${idValue}`; } // 5. 生成されたURLを変数に代入し、コンソールに出力して確認console.log(newUrl);constvalueToSend = newUrl;try {const signatureText = awaithttpRequest('http://localhost:12345/run-batch',valueToSend);console.log('バッチ応答:', signatureText); if (!signatureText.includes('BEGINPGP SIGNEDMESSAGE')) { alert('PGP署名がクリップボードに見つかりませんでした。'); return; }const newText = content.replace(/\s*$/, '') + '\n' + signatureText + '\n';textarea.value = newText;console.log('[PGPスクリプト]署名を貼り付けました。送信を再開します。');const form = document.forms.edit;const newForm = form.cloneNode(true); form.replaceWith(newForm); newForm.addEventListener('submit', async (e) => { e.preventDefault(); //HTML標準のsubmitをキャンセルconstbodyText =textarea?.value || ''; //reCAPTCHAトークンの取得constrecaptchaToken = await newPromise((resolve) => { grecaptcha.enterprise.ready(() => { grecaptcha.enterprise.execute('hoge', {action: 'EDIT' }) .then(resolve); }); }); // POSTするデータの構築const formData = new FormData(newForm); formData.set('body',bodyText); formData.set('recaptcha_token',recaptchaToken); formData.set('edit', '1');try {constresponse = await fetch(newForm.action, { method: 'POST',body: formData, credentials: 'same-origin' }); if (response.ok) {console.log('送信成功'); window.close(); } else {console.error('送信失敗',response.status); } }catch (err) {console.error('送信中にエラーが発生', err); } }); //プログラム的に送信トリガー newForm.dispatchEvent(new Event('submit', { bubbles:true })); }catch (e) {console.error('バッチ呼び出し失敗:', e); } })();
consthttp =require('http');const { exec } =require('child_process');const querystring =require('querystring');const server =http.createServer((req, res) => { if (req.method === 'GET' && req.url === '/ping') { res.writeHead(200); res.end('pong'); } else if (req.method === 'POST' && req.url === '/run-batch') { letbody = ''; req.on('data', chunk => {body += chunk.toString(); }); req.on('end', () => {constparsed = querystring.parse(body);constvalue =parsed.value || 'default'; // 値を引数としてバッチに渡す exec(`C:\\Users\\hoge\\Desktop\\makesign.bat "${value}"`, { encoding: 'utf8' }, (err, stdout, stderr) => { if (err) { res.writeHead(500); res.end('Error executing batch: ' + stderr); } else { res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' }); res.end(stdout.trim()); } }); }); } else { res.writeHead(404); res.end('Not found'); }});server.listen(12345, () => {console.log('Batch serverrunningathttp://localhost:12345/');});
@echo offsetlocal enabledelayedexpansion::署名するファイル名set "infile=%~1"set outfile=%TEMP%\pgp_output.asc:: 以前の出力があれば削除if exist "%outfile%" del "%outfile%":signloop::AutoHotkeyでパスフレーズ入力(gpgがパスワード要求するダイアログが出た場合に備える)start "" /b "C:\Users\hoge\Documents\AutoHotkey\autopass.ahk"::PGPクリア署名を作成echo %infile% | gpg --yes --clearsign --output "%outfile%"::署名が成功していればループを抜けるif exist "%outfile%" (goto postprocess) else ( timeout /t 1> nulgoto signloop):postprocesspowershell -nologo -command ^ "$header = '>|'; $footer = '|<'; $body =Get-Content '%outfile%' -Raw;Write-Output ($header + \"`r`n\" + $body + $footer)"powershell -nologo -command ^ "$header = '>|'; $footer = '|<'; $body =Get-Content 'signed.asc' -Raw;Set-Clipboard -Value ($header + \"`r`n\" + $body + $footer)"endlocalexit /b
#Persistent#SingleInstance ignoreSetTitleMatchMode, 2WinWaitActive, pinentrySendInputpasswordSleep 100SendInput {Enter}ExitApp
動けばいいという考えで作っているので余分なコードも含んでいるかもしれない。
-----BEGINPGP SIGNEDMESSAGE-----Hash: SHA512https://anond.hatelabo.jp/20250613185036 -----BEGINPGP SIGNATURE-----iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaEv1FQAKCRBwMdsubs4+SHHkAQDUOLgBcdji2T6MJ7h/vlMdFfGlWAzNdXijjE1gIuEPywEAiMNMZqhrMmtlc7UqRuggNJ/UTa5xTIcKp622+7jJQQg==Lgkl-----ENDPGP SIGNATURE-----
・エントリページでタイトルがdorawiiでpgp署名が無くeditボタンがあったら、現在のURLを保管してそれをクリック
・そのクリックによるURLへのアクセスにおいては別タブを開かせるようにするが、現在のタブは変えないようにする
・保管してあるURLをnode.jsサーバー経由でバッチファイルに渡して署名してクリップボードにコピー
・フォームへの貼り付けが終わったら送信ボタンをクリックし、レスポンスが正常に返ったと確認された段階(つまりページ表示の完了を待たない)で、別タブを自動終了
-----BEGINPGP SIGNEDMESSAGE-----Hash: SHA512https://anond.hatelabo.jp/20250611115815 -----BEGINPGP SIGNATURE-----iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaEk0DAAKCRBwMdsubs4+SMeUAP0Sbc2rovwbBLIW1EsKVCkZgaMMBQh7XNHretkmy/X+MgD/VZaho2zYzj5TBcoTBYw5DL/IbfBlrq8oRZoAJckc8wY==U8nF-----ENDPGP SIGNATURE-----
ようやく(ほぼ)すべてが自動化された。
あとはローカルサーバーの起動をスタートアップに設定する(方法をAIに聞いて指示に従う)だけの消化試合。
署名時要求してくるパスワードを自動入力するahkファイルはドキュメントのAutoHotkey配下に置いた。
バッチファイル(make.sign.bat)はデスクトップに置いた。
#Persistent#SingleInstance ignoreSetTitleMatchMode, 2WinWaitActive, pinentrySendInput お前のパスワードSleep 100SendInput {Enter}ExitApp
//run-batch-server.jsconsthttp =require('http');const { exec } =require('child_process');const server =http.createServer((req, res) => { if (req.url === '/ping') { res.writeHead(200); res.end('pong'); } else if (req.url === '/run-batch') { exec('C:\\Users\\you\\Desktop\\makesign.bat', (err) => { res.writeHead(200); res.end(err ? 'Error' : 'OK'); }) ; } else { res.writeHead(404); res.end('Not found'); }});server.listen(12345, () => {console.log('Batch serverrunningathttp://localhost:12345/');});
@echo offsetlocal enabledelayedexpansion::ミリ秒単位のUTC時刻を取得for /f %%a in ('powershell -nologo -command "[int64]::Parse((Get-Date).ToUniversalTime().ToString('yyyyMMddHHmmssfff'))"') doset timestamp=%%a::署名するファイル名set infile=%TEMP%\pgp_input.txtset outfile=%TEMP%\pgp_output.asc:: 以前の出力があれば削除if exist "%outfile%" del "%outfile%"::タイムスタンプを原文として保存echo %timestamp%> "%infile%":signloop::AutoHotkeyでパスフレーズ入力(gpgがパスワード要求するダイアログが出た場合に備える)start "" /b "C:\Users\infini\Documents\AutoHotkey\autopass.ahk"::PGPクリア署名を作成gpg --yes --clearsign --output "%outfile%" "%infile%"::署名が成功していればループを抜けるif exist "%outfile%" (echo [INFO]署名成功goto postprocess) else (echo [WARN]署名失敗、再試行します… timeout /t 1> nulgotosignloop):postprocess::PowerShellで余計な改行なしに |< をつけてクリップボードにコピーpowershell -nologo -command ^ "$header = '>|'; $footer = '|<'; $body =Get-Content '%outfile%' -Raw;Set-Clipboard -Value ($header + \"`r`n\" + $body + $footer)"echo Done.signed.asc created and clipboard updated (no extra blankline).endlocalexit /b
// ==UserScript==// @namePGP署名自動付加スクリプト(GM_xmlhttpRequest版)// @namespacehttp://tampermonkey.net/// @version 1.0// @description投稿前にPGP署名を付けてから送信(fetch未使用)// @matchhttps://anond.hatelabo.jp/dorawii_31/edit*// @grant GM_xmlhttpRequest// @grant GM_setClipboard// @grant GM_notification// / @connectlocalhost// ==/UserScript==(function () { 'use strict';const submitId = 'submit-button';consttextareaId = 'text-body';const localServer = 'http://localhost:12345/run-batch';constpgpSignatureRegex = /-----BEGINPGPSIGNEDMESSAGE-----[\s\S]+?-----BEGINPGPSIGNATURE-----[\s\S]+?-----ENDPGPSIGNATURE-----/;consthttpRequest = (url) => { return newPromise((resolve,reject) => { GM_xmlhttpRequest({ method: 'GET',url:url, onload: function (response) { resolve(response.responseText); }, onerror: function (error) {reject(error); } }); }); };const interceptClick = () => {constbtn = document.getElementById(submitId); if (!btn ||btn.dataset.pgpIntercepted === 'true') return;btn.dataset.pgpIntercepted = 'true';btn.addEventListener('click', async function (e) {consttextarea = document.getElementById(textareaId); if (!textarea) return;const content =textarea.value; if (pgpSignatureRegex.test(content)) {console.log('[PGPスクリプト]署名が検出されたためそのまま送信します'); return; } e.preventDefault(); e.stopImmediatePropagation();console.log('[PGPスクリプト]署名が見つからないため処理を停止し、署名を取得します');try { awaithttpRequest(localServer); //バッチ実行constsignatureText = await navigator.clipboard.readText(); if (!signatureText.includes('BEGINPGPSIGNEDMESSAGE')) { alert('PGP署名がクリップボードに見つかりませんでした。'); return; }const newText = content.replace(/\s*$/, '') + '\n' +signatureText + '\n';textarea.value = newText;console.log('[PGPスクリプト]署名を貼り付けました。送信を再開します。');btn.click(); //イベント再発火 }catch (err) { alert('PGP署名の取得または貼り付けに失敗しました。\n' + err); } },true); }; window.addEventListener('load', () => {setTimeout(interceptClick, 1000); });})();
プロミスメソッドとか全然まだ理解してなくてそのなかに関数代入したその関数にオブジェクトのプロパティにresponseを?いやまあそのあたりのコードが示すデータの流れが全然理解できないような人間でもここまでできちゃった。
AIすごいなと思うよ。そして思うのは今後重要になってくるのは文法とか自体に詳しいことじゃなくて、そのプログラムの処理内容を指示できるシステムエンジニア的な言語化能力のほうじゃないかなと思った。
-----BEGINPGPSIGNEDMESSAGE-----Hash: SHA51220250609111559680 -----BEGINPGPSIGNATURE-----iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaEbCbwAKCRBwMdsubs4+SLueAPwOv7PBk4voAe5qlcCEvs/PJhmKc5QAb/1R43JMQFuDZgD/UTPEKsL/PhK9jFGv2HDXK1dVjLNwvosgX9uYJh5xxwY==qiOE-----ENDPGPSIGNATURE-----
ChatGPTにバッチファイルを作ってもらったのでこれからは署名が捗るぞ。これだけ手軽化できたらレスバに入っても署名つけるのも億劫にならずできそうだ。
なにせ文章を書き折ったらあとはバッチダブルクリックしてCtr+Vするだけだ。
名乗る人が増えることを期待して作らせたものを公開しておく。
@echo offsetlocal::ミリ秒単位のUTC時刻を取得for /f %%A in ('powershell -nologo -command "[int64]::Parse((Get-Date).ToUniversalTime().ToString('yyyyMMddHHmmssfff'))"') doset timestamp=%%A::PGPクリア署名を作成echo %timestamp% | gpg --yes --clearsign> signed.asc::PowerShellで余計な改行なしに |< をつけてクリップボードにコピーpowershell -nologo -command ^ "$header = '>|'; $footer = '|<'; $body =Get-Content 'signed.asc' -Raw;Set-Clipboard -Value ($header + \"`r`n\" + $body + $footer)"echo Done. signed.asc created and clipboard updated (no extra blankline).
-----BEGINPGP SIGNEDMESSAGE-----Hash: SHA51220250608045542542 -----BEGINPGP SIGNATURE-----iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaEUXzgAKCRBwMdsubs4+SCvuAQDjRjPVCO1F9DgmAKoqKYG7qB9r4e7y2Ky+/umT/OhnygEA8h2NL8zIczSphcOk/MaDWJJ2Y7WDA3d6gxFakW8TKAw==HE4/-----ENDPGP SIGNATURE-----
なんで金かけたのってババァに言われた
そう言うことをすると他の人もそれをやらなきゃ行けなくなってお金がかかるでしょ!だそうで。
確かに今までは封筒を再利用してガムテで補強したものに書類が入り、どこぞの紙袋に入れて、手描きの用紙で回覧順を書いたようなもので回っていたが、その工作を俺にしろと言うことらしかった。
めんどくさ。心底めんどくさ。
100均で
440円で解決できることをなんでそんなことをしなければならないのか。時間がもったいない。
言っている事の意味がわかったら、もうこりゃ流した方がいいなと
あっはい、なるほど。なるほどー!
と言って全力で流して「じゃあおねがいしますー!しつれいしますー」で置いてきたけど
俺を巻き込むな。
AIインフルエンサーたちはChatGPTが世に出る前は何を投稿していたのか?(1/1)の続き
このTwitterアカウントは、主にYouTube、SEO、競馬、アニメなどの話題について呟いており、自身の活動や興味関心について発信しています。
このアカウントは、日々の米国株や暗号通貨の市場動向、特にテクノロジー関連株やビットコインの価格変動についてツイートしています。
「ゼロコロナ政策再び。 $AAPL の生産に影響が懸念され大きく下落。更に経済混乱が想定され、株価はSP500全業種で
一方で年末商戦売上堅調な滑り出しで $AMZN
暗号資産レンディングBlockFiが経営破綻、暗号通貨も軒並み下落。
チャート上、なんとか踏み止まるか? 」
このアカウントは、AI、特にプロマネAIや量子AIに関する話題や、仕事効率化、プログラミング、そして最新の技術トレンドについて呟いています。
"プロマネAIの実証実験を開始しました!量子AI×NotionによるプロマネAIの実証実験を開始https://prtimes.jp/main/html/rd/p/000000003.000082094.html…via @PRTIMES_JP"
このアカウントは、主にOpenAIの最新言語モデル「text-davinci-003」の進化と、そのモデルを用いた英語学習ツールやサービスについて呟いています。特に、英語学習におけるAI活用とその重要性を強調しています。
"朝起きたら世界がまた変わっていた(笑)。@OpenAI が最新モデル「text-davinci-003」を発表。主な特徴は、①より明確で、説得力のある文章が書ける②より複雑な指示にも対応③より長い形式のコンテンツが生成可1月に"InstructGPT"が出た時も感動したけどそれを遥かに上回る進化、です。"
このアカウントは、主にAI、特に画像生成AIに関する話題を呟いています。特にStable Diffusionのバージョンアップや使い方について多くのツイートをしています。
ここにリストアップした人たち以外もみましたが、分類すると3種類のアカウントがいて
またIDを変更してログがヒットしない人は含まれていません(IDから特定できるけどそこまでやらなかった)
javascript:(function() {
consttext = Array.from(document.querySelectorAll('[data-testid="tweetText"]')).map(s => s.textContent.trim()).join('\n');
consttextarea = document.createElement('textarea');
document.body.appendChild(textarea);
try {
document.execCommand('copy');
console.log('結果がクリップボードにコピーされました!');
}catch (err) {
console.error('クリップボードへのコピーに失敗しました:', err);
}
document.body.removeChild(textarea);
})();
Windowsの画面右下になんかアイコンのできたcopilot君、話が同じところでぐるぐる回ることにかけては有名生成AIの中でも特に一流と私の中でもっぱらの話題なんだが、つい先日は本当にマジで典型をやってくれて笑ってしまった。
markdownでメールアドレス書く時のお作法とかある?みたいに聞いたのよ。素で書いてみたらVSCodeがなんか波線ひいて警告だしてきたからさ。
そしたらcopilot君のウインドウ内でわーっと文字単位で出力が始まってな、markdownの書式を書き出してくれて、書式が閉じた瞬間URL記法なので危険と判断したのか表示に解釈が入って書式ごと撤去された。ブロックが分けられてコピーボタンまで表示されたが、それをクリックしてもクリップボードに入るのは例になる仮のメールアドレスだけ。
だからcopilotに文句言ってやったのよ。「お前それちゃんと表示されてねえんだけど」ってな。
「わかりました!コードブロックで表示しますね!」とか嬉々として再出力始めたんだけどな。
そしたら伝わらなかったようですね!とか言いながら元気にもう一度失敗してくれたよ。もうなんか可愛いわ。
だいぶ前なんかバッチファイルの中身の書き方を聞こうとして、copilot君、cmd.exeでこれこれこういうことしたいんだけどさあ、って書き込んだらなんかどっかに突き刺さってしまったらしくずっとなんか表示がぐるぐる待機中のまま帰ってこなくなった。
現代のテキストエディタがCtrlを押しながら矢印、Shiftによる選択、Home,Endなどを組み合わせたときの操作に対して、viが本当にエディタを乗り換えるほどの優位性を持っているのか疑問
viに有利な例題でない限りはそんなに差は無いのでは?
あとなぜvimはいまだにヤンクというクリップボードの下位互換のヤンクという概念で操作せねばならないのか?
このせいで「ビジュアルモード」という選択範囲クリップボード操作と同等の操作と、vi本来の操作が入り混じった一貫性に欠けたテキスト編集を強いられる
fugaをコピーしてhogeに上書き張り付けするという自然な操作の流れが「vi流」のキー操作で行えないのは明確な問題だと思える
vi開発当初にクリップボードという概念が存在しなかった事は分かる。しかしそれがいまだに改善されていないのはなぜか?
テキスト操作を便利にするためにユーザにはvi流の変態的操作を押し付けるのに
テキスト操作を便利するためにエディタ側はクリップボードを使った操作体系を取り入れないのは単に昔からの慣習を至上とする悪習なのではないか
利用いただき、ありがとうございます。
このたび、ご本人様のご利用かどうかを確認させていただきたいお取引がありましたので、誠に勝手ながら、カードのご利用を一部制限させていただき、ご連絡させていただきました。
つきましては、以下へアクセスの上、カードのご利用確認にご協力をお願い致します。
ご了承も何も、ワイそもそもその手のカードは作れないんだがwwwwww?
「▼ご利用確認はこちら」ってカードの種類別のURL一覧が載せてあるけど、そのURLのドメインがwww2.cr.mufg.jp
うわっ、怖っ!
でも、せっかくの機会なのでそのURLをVirusTotalにでもかけてみようと思い、右クリックからリンクをコピーしたらクリップボードに全く違うURLが・・・・・・
うわっ、怖っ!(二回目)
それはそれとしてクリップボード上のURLをVirusTotalにかけてみたところ、CRDF、CyRadar、Qutteraの3つだけがこれを悪意あるサイトという判定をした
あーでもないこーでもない…macだとこんなに便利とかWindowsだと標準装備だぞとかバカなのかなと思いながら。
■Alfred
Spotlightで十分では? appの起動もファイル検索も電卓()もできるじゃん。
一回入れてみたけどよくわからんかった。細々したコマンド入力するのもダルい。マウス操作で良い。
トラックパットでもちもち仕事してる人向け?マウス縛りしてるひとにはいいのかも。
キーボードに集中していて、マウスに持ち替えるたび意識が阻害されるタイプの職種のひとには合ってると思う。
■BetterTouchTool
わからない。いらない。
やっぱノート民が主語を拡張してmacで〜〜〜とか言ってるだけな気がする。
トラックパット上で3本指4本指で肩をすぼませてちまちま操作するならマウス使ってダイナミックに操作しようぜ。そっちの方がストレスフリーよ。
■Karabiner-Elements
イキってUSキーを買ったバカタレが英語/かなキーの割り当てのためだけに導入するアプリってイメージ
あのあの、最初からJISキーにすればいいですよね。え、JISキーは美しくない?シンプルじゃない?
見た目のためにわざわざ外部アプリを入れてごちゃごちゃ設定する方が美しくないしシンプルじゃないと思います。
ハード面で余計な選択をしてその解決のために余計なソフトを入れるってかなり美意識を疑う。クソみたいなマッチポンプ。
■Yoink
ちっちゃい画面で仕事してるひと向け?
■JeditΩ
■Clipy
まあそれとは別によく使う文章を登録できるので仕事上良く使う注釈などは登録している。
■JumpDesktop
出先でiPadから自宅のMacを操作できるので便利。ノート買っとけという話ではある。
クソデカファイルをDLしても実際にDLしているのは自宅のマシンなのでモバイル通信残量を使用しないというのはノートと比べた際の利点か。些細ではあるが。
■SPAi
神。イラレ上でスクリプトをショートカットで実行できる。クソ便利。戻れない。
■ParallelsDesktop
いちおうそれだけではなく、客からWMVで欲しいと言われた際にエンコードのためだけに使用します。
Mac版Adobe製品だとWMVにエンコできないんですよね。たまげたね。
エディタ。買い切りなのがいい。iCloudに保存してMacとiPadとの反復作業が可能。
■Lok Board
入れてみただけ。まるでデスクトップのようにiPadを操作できるが、あらかじめ定められたアプリしか使用できないので自分の用途には合わなかった。
Ctrl+C、Ctrl+V:皆さんご存じコピペ
Ctrl+X:切り取り。単純に削除として使うことも多々ある
Ctrl+Z:元に戻す
Ctrl+Y:やり直し
Win+V:クリップボードを開く。過去にコピーや切り取りしたデータが出てくる
Win+D:デスクトップの表示。そのままもう一回同じ操作したら元に戻る
Ctrl+Win+T:指定ウィンドウを常に最前面に表示する。Microsoft PowerToysとかいう奴の機能の一つで色々便利らしいけど使いこなせてない
ブラウザのタブをホイールクリック :タブを閉じる。↓と合わせて死ぬほど使うのになんか知らない人が多い
ブラウザのリンクをホイールクリック:リンクを新しいタブで開く。ブックマークのフォルダに行えばその中のリンクをまとめて開ける
MacのDigitalColor Meterのカラーコードを小文字でエディタに貼り付ける方法。
Automatorでアクションを作成してショートカットを登録する。
pbpaste | tr'A-Z''a-z' | pbcopy
DigitalColor Meterは便利な反面カラーコードが大文字で、コーディングルールと違うのが困り物だったんだよなあ。そりゃクリップボードのテキストを文字変換して戻すだけでいけるに決まってるのに、何を困っていたのか。
あらかた組んだ後にエディタで一括変換してたけど、その一手間がクッソうざくてどうにかならんかと長年悩んでいたのでスッキリ。