RRM
https://lh3.googleusercontent.com/a-/AOh14GiPZKClxjmfTTFkohH7MDVvhoeGSYBK_9FWLkYP=s96-c#.png
私はるりまと言います。
同一人物
RRMさんしれっと地方自治体事業の声優とかやってるらしい 上坂すみれチルドレンみたいだな
うちなんちゅ
できること
はんだづけ
ボール盤・フライス盤といった手動での機械工作
溶接
アーク溶接をやったことがある程度
Scrapboxをまとめること
C・Pythonちょっと読める
オタクを探してくる
雑学があるかもしれない
興味のあること
/icons/hr.icon
注:この下にあるUserCSSやUserScriptはほとんどコピペです
/icons/hr.icon
code:script.js
$('body').attr('data-daiiz-rel-bubble', 'on'); // 関連ページを吹き出し表示する
$('body').attr('data-daiiz-text-bubble', 'on'); // リンク先ページのテキストを表示する
$('body').attr('data-daiiz-icon-button', 'on'); // アイコンをボタンにする
$('body').attr('data-daiiz-paste-url-title', 'ctrl'); // URL titleの形でペーストする code:style.css
::selection {
color: white;
background-color: blue;
}
/* #で始まるタグをラベル風にする */
display: inline-block;
padding: 0px 10px;
margin: 0 8px 10px 0;
font-size: 80%;
border-radius: 18px;
transition: .1s;
-webkit-transform: scale(1);
transform: scale(1);
}
}
.line.number-list .indent-mark {
display: none;
}
code: style.css
.app:not(.presentation) .indent-mark .char-index:not(:nth-last-child(1)):not(:nth-last-child(2)) {
position: relative;
}
.app:not(.presentation) .indent-mark .char-index:not(:nth-last-child(1)):not(:nth-last-child(2))::before {
content: " ";
position: absolute;
left: 43%;
margin: -4px 0;
border-left: 2px solid #dcdcdc; /* 色の指定 */ }
code:script.js
import '/api/code/daiiz/omakase-links/script.js'
// リンクを外す
scrapbox.PopupMenu.addButton({
title: 'unlink',
onClick: text => {
const result = text.split(/\n/)
// テロメアが無駄に更新されるのを防ぐ
if(text == result) return;
return result;
}
});
code:script.js
scrapbox.PopupMenu.addButton({
title: 'ソート',
onClick: text => {
const re = /^(\s*)/
const b = re.exec(text)1.length const lines = text.split(/\n/)
let sorting = [], chLines = []
for (var i = 0; i < lines.length; i++) {
if (0 < chLines.length) chLines.unshift('')
sorting.push(line + chLines.join('@n@'))
chLines = []
}
return sorting.sort().join('\n').replace(/@n@/g, '\n')
}
})
code:script.js
import('/api/code/_scrapboxlab/類似したタイトルのページを関連ページとして表示する/script.js');
code:style.css
.line .indent-mark .dot {
height: .2em;
width: .4em;
top: auto;
bottom: 0;
background-color: rgba(128, 128, 128, 0.5)
}
body.presentation .line .indent-mark .dot {
top: 12px
}
カーソル
カーソル行を強調表示する
code:style.css
.cursor-line {
background-color: rgba(0, 0, 0, .02);
box-shadow: inset 0 -5px 5px -5px rgba(0, 0, 0, .3);
}
カーソルを太くする
code:style.css
.cursor {
width: 4px !important;
background-color: rgb(57, 172, 134);
}
/* 黒い線が気になるのでカーソルと同じ色にする */
.cursor {f
color: rgb(57, 172, 134);
border-color: rgb(57, 172, 134);
}
.cursor svg {
display: none;
}
カーソルを点滅表示する
code:style.css
@keyframes blink {
0% { opacity: 0; }
49% { opacity: 0; }
50% { opacity: 1; }
}
.cursor { animation: blink .5s infinite }
/* 同時作業中のユーザーのカーソルは点滅させない */
.shared-cursors .cursor { background-color: #309030; animation: none } code:script.js
window.scrapboxEditorMakeLink = e => {
if ($('#text-input').width() <= 8) return;
if (! $('.popup-menu')0) return; let linkButton = $('.link-button')0; if (! linkButton) return;
e.preventDefault();
linkButton.click();
};
code:style.css
/* 行番号を表示 -- ウィンドウ幅768px以上で適用 */
@media screen and (min-width: 768px) {
.lines { counter-reset: line }
/* タイトルから数えるときは :not(.line-title) を消してね */
.line:not(.line-title) { counter-increment: line }
/* タイトルから数えるときは :not(.line-title) を消してね */
.app:not(.presentation) .line:not(.line-title)::before {
content: counter(line);
position: absolute; display: inline-block; left: -110px; z-index: 10;
min-width: 50px; text-align: right; vertical-align: middle;
/* 行番号のフォントとか色とかの指定はここ */
font-family: monospace; color: grey }
/* カーソル行の行番号を濃く表示する */
.line:not(.line-title)::before { opacity: .5 }
.line.cursor-line:not(.line-title)::before { opacity: 1; font-weight: bolder } }
コードブロックを小さく
code:style.css
.line span.code-block {
line-height: 1.2em;
font-size: 88%;
}
code:style.css
/*.app:not(.presentation) .line.section-title:not(.line-title) {
position: relative;
}
.app:not(.presentation) .line.section-title:not(.line-title) .text {
padding-top: 1em;
}
.app:not(.presentation) .line.section-title:not(.line-title):before {
content: "";
display: block;
width: 111%;
position: absolute;
left: -49px;
border-top: 1px lightgray solid;
}*/
code:style.css
.line span:not(.modal-image):not(.pointing-device-map) > a.link:not(.icon)::after {
margin-left : 4px;
display : inline-block;
font-family : 'Font Awesome 5 Free';
font-weight : bold;
content : '\f35d';
text-decoration: none;
}
code:script.js
const intervalPeriod = 10000 // 更新間隔: 10000ミリ秒 = 10秒
let isRunning = false // スクリーンセーバ実行中かどうか
let interval = undefined
scrapbox.PageMenu.addMenu({
title: 'random-screen-saver',
})
scrapbox.PageMenu('random-screen-saver').addItem({
title: () => (isRunning)? "Stop screen saver." : "Start screen saver!",
onClick: () => {
if (isRunning) {
isRunning = false
clearInterval(interval)
}
else {
isRunning = true
clickRandomButton()
interval = setInterval(clickRandomButton, intervalPeriod)
}
}
})
function clickRandomButton() {
const button = $('.random-jump-button')
if (!button) return
}
検索窓の表示数を増やす
code:style.css
.navbar-form .dropdown.open .dropdown-menu {
min-width: 100%; max-height: calc(100vh - 130px) !important; overflow-y: auto
}
Streamにアクセスできる
code:style.css
.navbar .navbar-menu>li.stream-btn,
.navbar .navbar-menu>li.stream-btn.hidden-xs
{ display: block !important; }
コード記法のへんなsyntaxhighlightを殺す
code:style.css
code.code span {
color: inherit !important;
}
長いページにいるとき素早くトップページに戻りたい
code:style.css
@media (min-width: 1200px) {
/* PC版(長い方) */
.layout-page div.left-box {
display: flex;
align-items: center;
position: fixed;
top: 0;
margin-left: 52px;
z-index: 1000;
flex-wrap: nowrap;
width: 268px;
}
.layout-page a.navbar-brand {
/* justify-content: flex-end;*/
}
.layout-page ul.global-menu-for-user {
margin: 0 30px 0 auto;
}
}
@media (min-width: 768px) and (max-width: 1199.9px) {
/* PC版(狭いほう) */
@media (min-width: 992px) {
.layout-page a.project-home {
width: calc((100% - 30px - 290px) / 3);
left: 90px;
}
}
@media (max-width: 991.9px) {
.layout-page a.project-home {
width: calc((100% - 30px - 290px) / 3);
left: 74px;
}
}
}
@media (max-width: 768px) {
/* スマホ版 */
.layout-page ul.global-menu-for-user {
margin: 0 0 0 auto;
right: 0;
}
.layout-page a.project-home {
margin-left: 34px;
width: calc((100% - 30px - 110px));
}
}
@media (max-width: 1199.9px) {
/* PC版(狭いほう)とスマホ版 */
.layout-page a.project-home {
position: fixed;
top: 0;
z-index: 1000;
text-align: left;
}
}
code:style.css
/* コード記法の行番号を表示 -- ウィンドウ幅768px以上で適用 */
@media screen and (min-width: 768px) {
.section-title {
counter-reset: codeline;
}
.code-block span.indent code.code-body {
counter-increment: codeline;
margin-left: -1.5em;
padding-left: 2.3em;
}
.code-block span.indent code.code-body::before {
content: counter(codeline);
position: absolute;
display: inline-block;
z-index: 10;
margin-left: -2.4em;
width: 2em;
padding-right: 0.2em;
text-align: right;
vertical-align: bottom;
border-right: solid 1px #fff; /* ↓行番号の色の指定はここ */
color: var(--code-number-color);
}
/* カーソル行の行番号を濃く表示する */
.code-block span.indent code.code-body::before {
opacity: .5;
}
.cursor-line .code-block span.indent code.code-body::before {
opacity: 1;
font-weight: bolder;
/* ↓カーソル行の背景色の色はここ */
background-color: var(--code-accent-color);
}
}
code:script.js
import {convertWholeText} from './convert.js';
import {insertText} from '../scrapbox-insert-text-2/script.js';
export const execute = (config = []) =>
scrapbox.PopupMenu.addButton({
title: text => /https?:\/\/\S+/.test(text) ? 'URL' : '',// URLがなければボタンを押しにくくする
onClick: text => {
if (!/https?:\/\/\S+/.test(text)) return; // URLがなければ何もしない
convertWholeText(text, config).then(text => insertText(text));
return '';// 入力しやすいよう選択範囲を先に消しておく
},
});
code:convert.js
export async function convertWholeText(text, config = []) {
const urls = text.match(/https?:\/\/\S+/g) ?? [];
if (urls.length === 0) return undefined;
const links = await Promise.all(urls.map(url => convert(url, config)));
let map = {};
for (let i = 0; i < urls.length; i++) {
}
//console.log(map);
const result = text.replace(/https?:\/\/\S+/g, match => mapmatch ?? match); //console.log(result);
return result;
}
async function convert(url, config) {
if (!window.fetchURLInfo) {
return;
}
// hashを分離する
const urlObj = new URL(url);
//console.log(urlObj);
let hash = urlObj.hash !== '' ? decodeURIComponent(urlObj.hash).slice(1) : ''; // #をとる let pureURL = ${urlObj.origin}${urlObj.pathname}${urlObj.search};
const {title, meta, DOM} = await fetchURLInfo(pureURL, {DOM: true});
//console.log({title, meta, DOM});
return (config.find(({match}) => match.test(url))?.text ?? defaultConfig)({
url: decodeURIComponent(url),
pureURL: decodeURIComponent(pureURL),
title,
hash,
meta,
dom: DOM,
});
}
const format = text => text
.trim().replace(/\n\r\f/g, '').replace(' ?'[').replace(' ?', ']'); function defaultConfig({url, title, hash, dom}) {
if (!title) return url;
const subtitle = dom.getElementById(hash)?.textContent;
return subtitle ?
[${url} ${format(subtitle)} | ${format(title)}] :
[${url} ${format(title)}];
}
code:script.js
// valueにfont-familyに設定したい値を入れる。
const changeFont = (value) => {
let styleEl = document.getElementById('changeFont-style');
if (styleEl === null) {
styleEl = document.createElement('style');
const dc = document.getElementById('dedicated-container');
styleEl.id = 'changeFont-style';
dc.appendChild(styleEl);
}
styleEl.textContent = .editor, .grid li, .list li.page-list-item, .stream {font-family: ${value}};
}
scrapbox.PageMenu.addMenu({
title: 'Change Font',
onClick: () => {},
});
scrapbox.PageMenu('Change Font').addItem({
title: 'Sans serif',
onClick: () => {changeFont('"Inter", "Roboto", "源ノ角ゴシック JP", "Noto Sans JP", -apple-system, BlinkMacSystemFont, sans-serif')},
});
scrapbox.PageMenu('Change Font').addItem({
title: 'Serif',
onClick: () => {changeFont('"源ノ明朝 JP", "Noto Serif JP", serif')},
});
code:script.js
(() => {
const menuTitle = 'Pinned'
scrapbox.PageMenu.addMenu({
title: menuTitle,
onClick: () => {
scrapbox.PageMenu(menuTitle).removeAllItems()
fetch(/api/pages/${scrapbox.Project.name}, { credentials: "include" })
.then(res => res.json())め
.then(data => {
const pinnedPages = Array.from(data.pages).filter(page => 0 < page.pin)
pinnedPages.forEach(page => {
scrapbox.PageMenu(menuTitle).addItem({
title: page.title,
onClick: e => { e.currentTarget.setAttribute("href", ./${page.title}) }
})
})
})
}
})
})();
code:style.css
a#Pinned.tool-btn:hover { text-decoration: none }
a#Pinned.tool-btn::before { position: absolute; content: '\f08d'; font: 900 22px/46px 'Font Awesome 5 Free' }
a#Pinned.tool-btn img { opacity: 0 }