tldr-pages / tldr

📚 Collaborative cheatsheets for console commands
https://tldr.sh
Other
50.31k stars 4.11k forks source link

Epic: Add links to all existing pages #5510

Closed waldyrious closed 10 months ago

waldyrious commented 3 years ago

Since #2649, tldr pages support adding a link to the tool's homepage, and substantial efforts to backfill links into existing pages have been made, but many are still lacking it.

We should ensure that all pages have a link that people can follow to learn more about the tool and explore more comprehensive documentation. Pages of projects that don't have a dedicated web page should either link to their parent project's page, or we should come up with a way to explicitly indicate that they don't have a homepage.

(Note: This should be done with a separate PR for each page (or at best, multi-page PRs for related sets of pages, such as all the subcommands of a given command), so that discussion about which links to use for some pages won't block the straightforward changes to the other pages.)

Once that work is completed, we should add a check to tldr-lint to make this field required, thus ensuring that new pages won't regress our coverage in that regard (see #5046 for examples of link-related checks that were incorporated into tldr-lint). We should also change the template for a page in CONTRIBUTING.md, the style guide, and other places where that may be relevant.

navarroaxel commented 3 years ago

Question: What we should do with pages like https://github.com/tldr-pages/tldr/blob/master/pages/linux/ksvgtopng5.md? This is an internal command/util from the KDE Plasma desktop and doesn't have a man page. Should we use the link to the git repository?

bl-ue commented 3 years ago

I'd say the Git repository for that tool (or group of related tools), or the parent project's page (e.g. the KDE Plasma Desktop's page). We link to Git repos (e.g. GitHub, GitLab) a lot.

marchersimon commented 3 years ago

An updated version of the list was moved to #6062, since it was rather long.

The old list: - [x] android/cmd → #5581 - [x] android/settings → #5530 - [ ] android/wm - [x] common/airpaste → #5652 - [x] common/alias → #5644 - [x] common/apg → #5652 - [x] common/apropos → #5652 - [x] common/ar → #5652 - [x] common/arp → #5652 - [x] common/atq → #5640 - [x] common/atrm → #5640 - [x] common/badblocks → #5652 - [x] common/banner → #5537 - [x] common/batch → #5640 - [x] common/bc → #5652 - [x] common/bg → #5652 - [x] common/c99 → #5652 - [x] common/calendar → #5533 - [x] common/case → #5652 - [x] common/cd → #5642 - [x] common/chsh → #5652 - [x] common/clear → #5652 - [x] common/cmp → #5652 - [x] common/column → #5652 - [x] common/command → #5652 - [x] common/complete → #5652 - [x] common/crontab → #5652 - [x] common/dc → #5779 - [x] common/dhclient → #5779 - [x] common/diffstat → #5779 - [x] common/dirs → #5779 - [x] common/dot → #5779 - [x] common/drill → #5779 - [x] common/ed → #5532 - [x] common/entr → #5779 - [x] common/envsubst → #5779 - [ ] common/exec - [x] common/exit → #5779 - [x] common/fg → #5779 - [x] common/fgrep → #5779 - [x] common/figlet → #5779 - [x] common/find → #5779 - [x] common/finger → #5779 - [x] common/flex → #5779 - [x] common/for → #5536 - [x] common/fortune → #5531 - [ ] common/ftp - [x] common/git-bugreport → #5543 - [x] common/glib-compile-resources → #5779 - [x] common/gpg-zip → #5779 - [x] common/gunzip → #5779 - [x] common/gzip → #5779 - [ ] common/history - [ ] common/host - [ ] common/hr - [ ] common/htop - [ ] common/iconv - [ ] common/id3tag - [ ] common/if - [ ] common/ifconfig - [ ] common/import - [ ] common/ionice - [ ] common/ipcs - [ ] common/javac - [ ] common/jhat - [ ] common/jmap - [ ] common/jobs - [x] common/jps → #6017 - [ ] common/jstack - [ ] common/kill - [ ] common/killall - [ ] common/last - [ ] common/ldapsearch - [ ] common/leave - [x] common/less → #5529 - [ ] common/lex - [ ] common/lorem - [ ] common/lp - [ ] common/lpstat - [ ] common/lsof - [ ] common/mail - [ ] common/mailx - [ ] common/mesg - [ ] common/meshlabserver - [ ] common/mmv - [ ] common/monop - [x] common/more → #5881 - [ ] common/most - [ ] common/mount - [ ] common/mscore - [ ] common/nkf - [ ] common/nslookup - [ ] common/objdump - [ ] common/obs - [ ] common/odps - [ ] common/odps-auth - [ ] common/odps-func - [ ] common/odps-inst - [ ] common/odps-resource - [ ] common/odps-table - [ ] common/odps-tunnel - [ ] common/paci - [ ] common/pactl - [ ] common/passwd - [ ] common/patch - [ ] common/pax - [ ] common/pdfimages - [ ] common/pdfjoin → #5787 - [ ] common/pdftotext - [ ] common/ping - [ ] common/ping6 - [ ] common/platformio - [ ] common/ps - [ ] common/pssh - [ ] common/pv - [ ] common/pygmentize - [ ] common/qemu-img - [ ] common/quota - [ ] common/rabin2 - [ ] common/rails-db - [ ] common/rar - [ ] common/rbash - [ ] common/read - [ ] common/renice - [ ] common/rev - [ ] common/roll - [ ] common/route - [ ] common/rsync - [x] common/runit → #5648 - [x] common/runsv → #5648 - [x] common/runsvdir → #5648 - [x] common/runsvchdir → #5648 - [x] common/sv → #5648 - [ ] common/s - [ ] common/samtools - [ ] common/screen - [ ] common/script - [ ] common/sd - [ ] common/sdiff - [x] common/sed → #5534 - [ ] common/sendmail - [ ] common/set - [ ] common/sftp - [ ] common/sh - [ ] common/shasum - [ ] common/shc - [ ] common/shopt - [ ] common/singularity - [ ] common/slimrb - [ ] common/sn - [ ] common/socat - [ ] common/source - [ ] common/spatial - [ ] common/ssh - [ ] common/ssh-agent - [ ] common/ssh-copy-id - [ ] common/ssh-keygen - [ ] common/ssh-keyscan - [ ] common/sshpass - [ ] common/stat - [ ] common/strings - [ ] common/su - [ ] common/swig - [ ] common/task - [ ] common/telnet - [ ] common/time - [ ] common/tldrl - [ ] common/tput - [ ] common/traceroute - [ ] common/transcode - [ ] common/type - [ ] common/ufraw-batch - [ ] common/ulimit - [ ] common/umask - [ ] common/umount - [ ] common/unalias - [ ] common/unar - [ ] common/unclutter - [ ] common/unrar - [ ] common/unzip - [ ] common/view - [ ] common/vimtutor - [ ] common/virt-sparsify - [ ] common/visudo - [ ] common/w - [ ] common/wait - [ ] common/waitress-serve - [ ] common/wasm2c - [ ] common/wasm2wat - [ ] common/wasm-objdump - [ ] common/wasm-opt - [ ] common/watch - [ ] common/where - [ ] common/which - [ ] common/while - [ ] common/wpa_supplicant - [ ] common/write - [ ] common/xargs - [ ] common/xephyr - [ ] common/xkill - [ ] common/xmllint - [ ] common/xxd - [ ] common/zcat - [ ] common/zdb - [ ] common/zfs - [ ] common/zip - [ ] common/zless - [ ] common/zpool - [ ] linux/ac - [ ] linux/add-apt-repository - [ ] linux/addr2line - [x] linux/adduser → #5738 - [ ] linux/alpine - [ ] linux/amixer - [x] linux/apache2ctl → #5539, #5541 - [ ] linux/apk - [x] linux/apt → #5710 - [x] linux/apt-add-repository → #5710 - [x] linux/apt-cache → #5710 - [x] linux/apt-file → #5710 - [x] linux/apt-get → #5710 - [x] linux/aptitude → #5710 - [x] linux/apt-key → #5710 - [x] linux/apt-mark → #5710 - [ ] linux/archey - [ ] linux/arp-scan - [ ] linux/as - [ ] linux/aspell - [x] linux/at → #5640 - [ ] linux/authconfig - [ ] linux/autorandr - [ ] linux/beep - [ ] linux/betterlockscreen - [ ] linux/blkdiscard - [ ] linux/blkid - [ ] linux/bluetoothctl - [ ] linux/bmon - [ ] linux/brctl - [ ] linux/brew - [ ] linux/btrfs - [ ] linux/cal - [ ] linux/calc - [ ] linux/chage - [ ] linux/chattr - [ ] linux/chcpu - [ ] linux/chfn - [ ] linux/chkconfig - [ ] linux/cmus - [ ] linux/colrm - [ ] linux/compgen - [ ] linux/compose - [x] linux/cp → #5853 - [ ] linux/cpufreq-aperf - [ ] linux/cpufreq-info - [ ] linux/cpufreq-set - [ ] linux/cpuid - [ ] linux/create_ap - [ ] linux/cryptsetup - [ ] linux/ctrlaltdel - [ ] linux/dash - [ ] linux/datamash - [ ] linux/dbus-daemon - [ ] linux/debman - [ ] linux/debugfs - [x] linux/deluser → #5738 - [ ] linux/diff3 - [ ] linux/disown - [ ] linux/dmenu - [ ] linux/dmesg - [ ] linux/dmidecode - [ ] linux/do-release-upgrade - [ ] linux/dos2unix - [ ] linux/dpkg-query - [ ] linux/dunstify - [ ] linux/e2fsck - [ ] linux/e2label - [ ] linux/e4defrag - [ ] linux/ebuild - [ ] linux/edit - [ ] linux/edquota - [ ] linux/eix - [ ] linux/eject - [ ] linux/emerge - [ ] linux/enum4linux - [ ] linux/equery - [ ] linux/eval - [ ] linux/export - [ ] linux/f5fpc - [ ] linux/fallocate - [ ] linux/fatlabel - [ ] linux/fc - [ ] linux/fc-cache - [ ] linux/fc-list - [ ] linux/fc-match - [ ] linux/fc-pattern - [ ] linux/fcrackzip - [ ] linux/fdisk - [ ] linux/feh - [ ] linux/file - [ ] linux/file-rename - [ ] linux/findmnt - [ ] linux/firejail - [ ] linux/firewall-cmd - [ ] linux/flatpak - [ ] linux/foreman - [ ] linux/free - [ ] linux/fsck - [ ] linux/fstrim - [ ] linux/fuser - [ ] linux/gedit - [ ] linux/genkernel - [ ] linux/getent - [ ] linux/getfacl - [ ] linux/gnome-terminal - [ ] linux/gpasswd - [x] linux/groupadd → #5738 - [x] linux/groupdel → #5738 - [x] linux/groupmod → #5738 - [ ] linux/gs - [ ] linux/guake - [ ] linux/guix-package - [ ] linux/hardinfo - [ ] linux/hdparm - [ ] linux/hexdump - [ ] linux/hostname - [ ] linux/hostnamectl - [ ] linux/httpie - [ ] linux/http-prompt - [ ] linux/hwclock - [ ] linux/i7z - [ ] linux/imgp - [ ] linux/inotifywait - [ ] linux/inxi - [ ] linux/iostat - [ ] linux/ip-address - [ ] linux/ipcalc - [ ] linux/ipcmk - [ ] linux/ipcrm - [ ] linux/isoinfo - [ ] linux/iw - [ ] linux/jobs - [ ] linux/journalctl - [ ] linux/kde-inhibit - [ ] linux/kexec - [ ] linux/kpartx - [x] linux/ksvgtopng5 → #5511 - [ ] linux/lastb - [ ] linux/lastlog - [ ] linux/ldconfig - [ ] linux/ldd - [ ] linux/light - [ ] linux/line - [x] linux/lldb → #5643 - [ ] linux/locate - [ ] linux/logger - [ ] linux/login - [ ] linux/logwatch - [ ] linux/losetup - [ ] linux/lrunzip - [ ] linux/lrzip - [ ] linux/lrztar - [ ] linux/lrzuntar - [ ] linux/lsattr - [ ] linux/lsblk - [ ] linux/lsb_release - [ ] linux/lscpu - [ ] linux/lshw - [ ] linux/lslocks - [ ] linux/lsmod - [ ] linux/lspci - [ ] linux/lsscsi - [ ] linux/lsusb - [ ] linux/lxc - [ ] linux/mac2unix - [ ] linux/macchanger - [ ] linux/manpath - [ ] linux/mcookie - [ ] linux/medusa - [ ] linux/microcom - [ ] linux/mimetype - [ ] linux/mke2fs - [ ] linux/mkfs - [ ] linux/mkfs.cramfs - [ ] linux/mkfs.exfat - [ ] linux/mkfs.ext4 - [ ] linux/mkfs.fat - [ ] linux/mkfs.minix - [ ] linux/mkfs.ntfs - [ ] linux/mkfs.vfat - [ ] linux/mkisofs - [ ] linux/mkswap - [ ] linux/modinfo - [ ] linux/modprobe - [ ] linux/mountpoint - [ ] linux/mpstat - [ ] linux/mssh - [ ] linux/mycli - [ ] linux/n - [ ] linux/namei - [ ] linux/ncat - [ ] linux/ncdu - [ ] linux/ndctl - [ ] linux/newgrp - [ ] linux/nft - [ ] linux/nm - [ ] linux/nmon - [ ] linux/nmtui - [ ] linux/nologin - [ ] linux/notify-send - [ ] linux/ntfsfix - [ ] linux/opkg - [ ] linux/pacaur - [ ] linux/paccache - [x] linux/pamac → #5655 - [ ] linux/pasuspender - [ ] linux/pdfgrep - [ ] linux/perf - [ ] linux/perl-rename - [ ] linux/phar - [ ] linux/phpdismod - [ ] linux/phpenmod - [ ] linux/phpquery - [ ] linux/pidof - [ ] linux/pidstat - [ ] linux/pkgadd - [ ] linux/pkginfo - [ ] linux/pkgmk - [ ] linux/pkgrm - [ ] linux/popd - [ ] linux/ports - [ ] linux/powertop - [ ] linux/prename - [ ] linux/print - [ ] linux/prt-get - [ ] linux/pstree - [ ] linux/pulseaudio - [ ] linux/pushd - [ ] linux/pwdx - [ ] linux/pwgen - [ ] linux/qsub - [ ] linux/quotacheck - [ ] linux/rc-service - [ ] linux/rc-status - [ ] linux/rc-update - [ ] linux/rdesktop - [ ] linux/reflector - [ ] linux/rename - [ ] linux/repquota - [ ] linux/reset - [ ] linux/resize2fs - [ ] linux/rfkill - [ ] linux/rpcinfo - [ ] linux/rpm - [ ] linux/rspamc - [ ] linux/rtcwake - [ ] linux/rtorrent - [ ] linux/run-mailcap - [ ] linux/runuser - [ ] linux/sa - [ ] linux/sar - [ ] linux/sbatch - [ ] linux/script - [ ] linux/scriptreplay - [x] linux/scrot → #5641 - [ ] linux/see - [ ] linux/sensible-browser - [ ] linux/sensible-editor - [ ] linux/sensors - [ ] linux/service - [ ] linux/setfacl - [ ] linux/setxkbmap - [ ] linux/shutdown - [ ] linux/slapt-get - [ ] linux/smbclient - [ ] linux/smbpasswd - [ ] linux/snap - [ ] linux/squeue - [x] linux/ss → #5699 - [ ] linux/ssh-add - [ ] linux/sshuttle - [ ] linux/strace - [ ] linux/stress - [ ] linux/swapoff - [ ] linux/swapon - [ ] linux/sysctl - [ ] linux/systemd-analyze - [ ] linux/taskset - [ ] linux/tcpflow - [ ] linux/tcpkill - [ ] linux/terminator - [ ] linux/timedatectl - [x] linux/tlp → #5831 - [x] linux/tlp-stat → #5831 - [ ] linux/tomb - [ ] linux/top - [ ] linux/trap - [ ] linux/trizen - [ ] linux/tshark - [ ] linux/tune2fs - [ ] linux/ufw - [ ] linux/ul - [ ] linux/unix2dos - [ ] linux/unix2mac - [ ] linux/unset - [ ] linux/update-alternatives - [ ] linux/updatedb - [ ] linux/update-rc.d - [ ] linux/uprecords - [ ] linux/urxvt - [x] linux/useradd → #5738 - [x] linux/userdel → #5738 - [x] linux/usermod → #5738 - [ ] linux/utmpdump - [ ] linux/uuidgen - [ ] linux/uvcdynctrl - [ ] linux/viewnior - [ ] linux/vmware-checkvm - [ ] linux/vncserver - [ ] linux/vncviewer - [ ] linux/vnstat - [ ] linux/vpnc - [ ] linux/wall - [ ] linux/watch - [ ] linux/whatis - [ ] linux/whereis - [ ] linux/whiptail - [ ] linux/wipefs - [ ] linux/wmctrl - [ ] linux/wodim - [ ] linux/wpa_cli - [ ] linux/wpa_passphrase - [ ] linux/x11vnc - [ ] linux/xar - [ ] linux/xclip - [ ] linux/xclock - [ ] linux/xdotool - [ ] linux/xeyes - [ ] linux/xfce4-screenshooter - [ ] linux/xfce4-terminal - [ ] linux/xinput - [ ] linux/xman - [ ] linux/xrandr - [ ] linux/xsel - [ ] linux/xsetwacom - [ ] linux/xterm - [ ] linux/xtrlock - [ ] linux/yank - [ ] linux/yaourt - [ ] linux/zenity - [ ] linux/zgrep - [ ] linux/zramctl - [ ] linux/zypper - [ ] osx/afinfo - [ ] osx/afplay - [ ] osx/airport - [ ] osx/apachectl - [ ] osx/arch - [ ] osx/archey - [ ] osx/as - [ ] osx/asr - [ ] osx/base64 - [ ] osx/brightness - [ ] osx/caffeinate - [ ] osx/cal - [ ] osx/carthage - [ ] osx/chflags - [ ] osx/codesign - [ ] osx/compgen - [ ] osx/date - [ ] osx/dd - [ ] osx/diskutil - [ ] osx/ditto - [ ] osx/dmesg - [ ] osx/drutil - [ ] osx/du - [ ] osx/duti - [ ] osx/eval - [ ] osx/export - [ ] osx/fc - [ ] osx/fdesetup - [ ] osx/feh - [ ] osx/file - [ ] osx/fsck - [ ] osx/getfileinfo - [ ] osx/hdiutil - [ ] osx/head - [ ] osx/hexdump - [ ] osx/hostname - [ ] osx/imgcat - [ ] osx/launchctl - [ ] osx/lldb - [ ] osx/locate - [ ] osx/logger - [ ] osx/look - [ ] osx/m - [ ] osx/md5 - [ ] osx/mdfind - [ ] osx/mdls - [ ] osx/mdutil - [ ] osx/mkfile - [ ] osx/n - [ ] osx/networksetup - [ ] osx/nm - [ ] osx/oathtool - [ ] osx/open - [ ] osx/opensnoop - [ ] osx/osascript - [ ] osx/pbcopy - [ ] osx/pbpaste - [ ] osx/pdfgrep - [ ] osx/ping - [ ] osx/pkgutil - [ ] osx/plutil - [ ] osx/pmset - [ ] osx/pod - [ ] osx/popd - [ ] osx/port - [ ] osx/pushd - [ ] osx/pwgen - [ ] osx/qlmanage - [ ] osx/reboot - [ ] osx/rename - [ ] osx/route - [ ] osx/rubocop - [ ] osx/safeejectgpu - [ ] osx/say - [ ] osx/screencapture - [ ] osx/scutil - [x] osx/sed → #5535 - [ ] osx/shuf - [ ] osx/shutdown - [ ] osx/sips - [ ] osx/softwareupdate - [ ] osx/split - [ ] osx/ssh-add - [ ] osx/stat - [ ] osx/sw_vers - [ ] osx/sysctl - [ ] osx/system_profiler - [ ] osx/systemsetup - [ ] osx/textutil - [ ] osx/top - [ ] osx/trap - [ ] osx/uname - [ ] osx/uptime - [ ] osx/w - [ ] osx/whence - [ ] osx/whereis - [ ] osx/xattr - [ ] osx/xcodebuild - [ ] osx/xcode-select - [ ] osx/xed - [ ] osx/xip - [ ] osx/xsltproc - [ ] osx/yaa - [ ] osx/yank - [x] sunos/devfsadm → #5649 - [x] sunos/dmesg → #5649 - [x] sunos/prctl → #5649 - [x] sunos/prstat → #5649 - [x] sunos/snoop → #5649 - [x] sunos/svcadm → #5649 - [x] sunos/svccfg → #5649 - [x] sunos/svcs → #5649 - [x] sunos/truss → #5649 - [ ] windows/explorer → #5646 - [ ] windows/iscc → #5646 - [ ] windows/sigverif → #5646 # GNU coreutils (https://github.com/tldr-pages/tldr/issues/5510#issuecomment-809556995) - [x] common/chcon → #5546 - [x] common/chgrp → #5554 - [x] common/chown → #5555 - [x] common/cp → #5556 - [x] common/df → #5557 - [x] common/dircolors → #5558 - [x] common/install → #5559 - [x] common/ln → #5560 - [x] common/ls → #5561 - [x] common/mkfifo → #5562 - [x] linux/mknod → #5564 - [x] common/mv → #5542 - [x] common/realpath → #5565 - [x] common/rm → #5552 - [x] common/rmdir → #5566 - [x] common/shred → #5567 - [x] common/sync → #5568 - [x] common/truncate → #5569 - [x] common/vdir → #5570 - [x] common/base32 → #5571 - [x] common/base64 → #5572 - [x] common/cksum → #5573 - [x] common/comm → #5574 - [x] linux/csplit → #5575 - [x] common/cut → #5576 - [x] common/expand → #5577 - [x] common/fmt → #5578 - [x] common/fold → #5579 - [x] common/head → #5583 - [x] common/join → #5584 - [x] common/md5sum → #5585 - [x] common/nl → #5586 - [x] common/od → #5587 - [x] common/paste → #5588 - [x] linux/ptx → #5589 - [x] common/sha1sum → #5590 - [x] common/sha224sum → #5669 - [x] common/sha256sum → #5669 - [x] common/sha384sum → #5669 - [x] common/sha512sum → #5538, #5669 - [x] common/shuf → #5591 - [x] common/split → #5592 - [x] common/sum → #5593 - [x] common/tac → #5594 - [x] common/tail → #5595 - [x] common/tr → #5596 - [x] common/tsort → #5597 - [x] common/unexpand → #5598 - [x] common/uniq → #5599 - [x] common/wc → #5600 - [x] common/arch → #5601 - [x] common/chroot → #5602 - [x] common/date → #5603 - [x] common/dirname → #5604 - [x] common/du → #5605 - [x] common/echo → #5606 - [x] common/env → #5607 - [x] common/expr → #5608 - [x] common/factor → #5609 - [x] common/false → #5610 - [x] common/groups → #5611 - [x] common/hostid → #5612 - [x] common/id → #5613 - [x] common/link → #5614 - [x] common/logname → #5615 - [x] common/nice → #5616 - [x] common/nohup → #5617 - [x] common/nproc → #5618 - [x] common/pathchk → #5619 - [ ] common/pinky → #2284 - [x] common/printenv → #5620 - [x] common/printf → #5621 - [x] common/pwd → #5622 - [x] common/readlink → #5623 - [x] linux/runcon → #5624 - [x] common/seq → #5625 - [x] common/sleep → #5626 - [x] common/stdbuf → #5627 - [x] common/stty → #5628 - [x] common/tee → #5629 - [x] common/timeout → #5630 - [x] common/true → #5631 - [x] common/tty → #5632 - [x] common/uname → #5633 - [x] common/unlink → #5634 - [x] common/uptime → #5635 - [x] common/users → #5636 - [x] common/who → #5637 - [x] common/whoami → #5638 - [x] common/yes → #5639 | en | `More information:` | -- | -- | bs | `Više informacija:` | | da | `Mere information:` | | de | `Mehr Informationen:` | | es | `Más información:` | | fa | ` اطلاعات بیشتر:` | | fr | _see footnote_ | | hbs | `Više informacija:` | | hi | `अधिक जानकारी:` | | id | `Informasi lebih lanjut:` | | it | `Maggiori informazioni:` | | ja | `詳しくはこちら:` | | ko | `더 많은 정보:` | | ml | `കൂടുതൽ വിവരങ്ങൾ:` | | nl | `Meer informatie:` | | no | `Mer informasjon:` | | pl | `Więcej informacji:` | | pt_BR | `Mais informações:` | | pt_PT | `Mais informações:` | | ru | `Больше информации:` | | sv | `Mer information:` | | ta | `மேலும் தகவல்:` | | th | `ดูเพิ่มเติม:` | | tr | `Daha fazla bilgi için:` | | zh | `更多信息:` | | zh_TW | `更多資訊:` | \* The French translation cantains a thin unbreaking space, which can't be copied from the Github UI. The easiest way would be to copy it from another French page, like `common/tar.md` (https://github.com/tldr-pages/tldr/issues/5510#issuecomment-809631252)
marchersimon commented 3 years ago

I'm not sure if this was a good idea though...

bl-ue commented 3 years ago

Yeah, that's a crazily long list 😂

@marchersimon I'd open PRs fixing pages in batches of 10 or so, to reduce the PR count given these are simple changes.

marchersimon commented 3 years ago

@bl-ue what about @waldyrious's suggestion?

(Note: This should be done with a separate PR for each page (or at best, multi-page PRs for related sets of pages, such as all the subcommands of a given command), so that discussion about which links to use for some pages won't block the straightforward changes to the other pages.)

bl-ue commented 3 years ago

I'm fine with that, the only thing I'm not sure about of is opening a bunch of PRs that each add one line to one file...I'm not sure if that's a great idea. But if that's okay with @waldyrious it's okay with me.

waldyrious commented 3 years ago

If multiple PRs are adding links to the same site, or add links to pages that are related to each other, then yeah, it makes more sense to group those changes into a single PR.

Other than that, I don't see any problems with having lots of small PRs that are indeed unrelated to each other. Simple PRs are easy to review, and allow a fast turnaround, which is good both for maintainers and contributors alike.

tomadojuice commented 3 years ago

For the GNU coreutils (cd, mv, ...) should we add the link to the respective page on gnu.org? Example https://www.gnu.org/software/coreutils/manual/html_node/mv-invocation.html for mv. I don't really see another way...

bl-ue commented 3 years ago

Yes definitely. Those pages are very informative.

marchersimon commented 3 years ago

Should we also change the links of the current coreutils? (chmod, dd, mkdir, touch, b2sum, cat, basename)

tomadojuice commented 3 years ago

@marchersimon It's certainly helpful but then again you could just look it up in the man page.

bl-ue commented 3 years ago

If they're man7.org ones I think we should move them to the gnu pages. I like those ones better; they're official and informative (and a contrast to man7.org that's all over lots of pages)

bl-ue commented 3 years ago

@marchersimon that's a really nice table you've made up there, but there's one problem with that you couldn't have avoided: in French, a special thin, unbreakable space is used before most punctution including colons, but it's hard (if not impossible) to copy the French space from the GitHub UI, so you might need to get it manually.

It's code 160 (0xa0, →  ), and the best way to get it is to open your browser's JavaScript console and enter String.fromCharCode(0xa0), and then copy the resulting character within the quotes.

marchersimon commented 3 years ago

@bl-ue could I also add a note that it should be copied from another french page?

bl-ue commented 3 years ago

Certainly @marchersimon please feel free and you don't need to ask 👍🏻

bl-ue commented 3 years ago

@marchersimon try this for changing/adding links: https://gist.github.com/bl-ue/5b52c9f80dd21074c0633a2bcdeb01fb

Usage:

export TLDR_ROOT="path/to/tldr_directory"  # run this once per terminal session
python3 set_more_info_link.py -p common/chmod "https://url......."   # omit the .md extension

I made it because I couldn't take the tedious and highly error-prone procedure of manully adding them one more second 😝

Contents of `set_more_info_link.py` for reference ```python import argparse import os import re import sys labels = { 'en': 'More information:', 'bs': '?', 'da': '?', 'de': 'Mehr Informationen:', 'es': 'Más información:', 'fa': ' اطلاعات بیشتر:', 'fr': 'Plus d\'informations\xa0:', 'hbs': 'Više informacija:', 'hi': 'अधिक जानकारी:', 'id': 'Informasi lebih lanjut:', 'it': 'Maggiori informazioni:', 'ja': '詳しくはこちら:', 'ko': '더 많은 정보:', 'ml': 'കൂടുതൽ വിവരങ്ങൾ:', 'nl': 'Meer informatie:', 'no': '?', 'pl': 'Więcej informacji:', 'pt_BR': 'Mais informações:', 'pt_PT': 'Mais informações:', 'ru': 'Больше информации:', 'sv': 'Mer information:', 'ta': 'மேலும் தகவல்:', 'th': 'ดูเพิ่มเติม:', 'tr': 'Daha fazla bilgi için:', 'zh_TW': '更多資訊:', 'zh': '更多信息:', } IGNORE_FILES = ( '.DS_Store' ) def get_tldr_root(): if 'TLDR_ROOT' in os.environ: return os.environ['TLDR_ROOT'] else: print( '\x1b[31mPlease set TLDR_ROOT to the location of a clone of https://github.com/tldr-pages/tldr.') sys.exit(1) def set_link(file, link): with open(file) as f: lines = f.readlines() desc_start = 0 desc_end = 0 # find start and end of description for i, line in enumerate(lines): if line.startswith('>') and desc_start == 0: desc_start = i if not lines[i + 1].startswith('>') and desc_start != 0: desc_end = i break # compute locale pages_dir = os.path.basename(os.path.dirname(os.path.dirname(file))) if '.' in pages_dir: _, locale = pages_dir.split('.') else: locale = 'en' # build new line new_line = f'> {labels[locale]} <{link}>.\n' if re.search(r'^>.*<.+>', lines[desc_end]): # overwrite last line lines[desc_end] = new_line else: # add new line lines.insert(desc_end + 1, new_line) with open(file, 'w') as f: f.writelines(lines) def main(): parser = argparse.ArgumentParser( description='Sets the "More information" link for all translations of a page') parser.add_argument('-p', '--page', type=str, required=True, help='page name in the format "platform/command"') parser.add_argument('link', type=str) args = parser.parse_args() root = get_tldr_root() pages_dirs = [d for d in os.listdir(root) if d.startswith('pages')] target_paths = [] for pages_dir in pages_dirs: pages_dir_path = os.path.join(root, pages_dir) platforms = [i for i in os.listdir( pages_dir_path) if i not in IGNORE_FILES] for platform in platforms: platform_path = os.path.join(pages_dir_path, platform) pages = os.listdir(platform_path) commands = [ f'{platform}/{p[:-3]}' for p in pages if p not in IGNORE_FILES] if args.page in commands: path = os.path.join(pages_dir_path, args.page + '.md') target_paths.append(path) target_paths.sort() for path in target_paths: set_link(path, args.link) display_path = path.replace(f'{root}/', '') print(f'\x1b[32m{display_path}\x1b[0m updated') if __name__ == '__main__': main() ```
marchersimon commented 3 years ago

This is really cool, thanks!

bl-ue commented 3 years ago

Hey @marchersimon can you wait for a second before updating that comment? I'm trying to add some stuff 🙂

marchersimon commented 3 years ago

Oh, sorry, sure.

marchersimon commented 3 years ago

Did you remove the sections or did I mess something up? Because I can't revert it

bl-ue commented 3 years ago

You removed the sections (according to GH). We both hit "update comment" at the exact same time :D

bl-ue commented 3 years ago

I like it better without the letter grouping, so will you please leave it all open? It's easier to find items, I think.

marchersimon commented 3 years ago

Okay, sure.

waldyrious commented 3 years ago

@marchersimon just to be clear, when I said

If multiple PRs are adding links to the same site (...) it makes more sense to group those changes into a single PR.

...I had in mind precisely a case such as the GNU coreutils pages, which all follow the same pattern an link to the same base site. In that case, rather than opening one PR per page, it would be OK to have all changes in a single PR (even if you keep the changes to each page on its own commit in the PR branch). Can you do so for the remaining ones, please? And apply a similar logic to the updates to the other pages as well.

marchersimon commented 3 years ago

Oh, I thought all coreutils pages would be a bit too much for one PR. Sorry for the mess, then.

bl-ue commented 3 years ago

Well it would just be another really large PR, but we've had plenty of those :-)

bl-ue commented 3 years ago

Related: #5111

In that issue we discussed enforcing more information links. Here, as there, I think it would be good to enforce them.

@waldyrious what are your thoughts with the discussion in #5111 in mind?

waldyrious commented 3 years ago

Thanks for cross-linking the threads! I believe you may be referring to the following comments (please correct me if not):

@owenvoke:

I have nothing against adding links from non-official sources (I'm all for adding more links that are useful). I just feel like it might lead to adding links that aren't particularly useful just because that's the only thing available.

@schneiderl

I don't think I like forcing to have a link for every page. In some cases, there is no interesting link to be put on the description. Also, in some cases, we might be just repeating ourselves (see #3041).

@sbrl:

Adding links is nice, but it's not suitable for all commands. Take arch or nproc for example. I think this is best left out of the linter.

The conversation in #3041 which @schneiderl linked to (and which I've shamefully ended up never responding to until now (though in my defense GitHub started deleting notifications older than 6 months a while ago 😢)) also has some points against adding links when they may be considered redundant, mostly by @agnivade.

In all these cases, I believe what I suggested above can address those concerns:

Pages of projects that don't have a dedicated web page should either link to their parent project's page, or we should come up with a way to explicitly indicate that they don't have a homepage.

I realize could have been more explicit there, but I didn't want to make the opening comment too verbose. What I had in mind was either a metadata file like what @srsudar suggested for the aliases in #5299, or a special markup that we could add to the pages themselves. Something like this, for example:

# foobar

> Description bla bla bla.
> More information: <N/A>.
bl-ue commented 3 years ago

Yes, those exactly were the comments I was thinking.

I like the idea of using N/A—I think it would solve all the problems without requiring a spec revision / client update.

waldyrious commented 3 years ago

Yes, those exactly were the comments I was thinking.

Next time I'd appreciate if you saved me the duplicated work, then 😅

sbrl commented 3 years ago

Yeah, finding a way to explicitly indicate that there isn't a suitable web page is a good idea. We can't use the angle-brackets (<N/A>) though, because in the CommonMark spec that's the syntax for autolinks. Perhaps simply dropping the angle brackets and doing something like this would be better:

> More information: N/A.
bl-ue commented 3 years ago

What about alias pages #5299? Should we add links to them?

In that issue I wrote

with the link intentionally omitted.

But now I'm not sure that's necessary.

marchersimon commented 3 years ago

If we didn't, that would cause problems with tldr-lint as soon as we make them required. But we also can't use <N/A>, since that would be wrong.

waldyrious commented 3 years ago

I'd say we can adjust the logic of the linter to

  1. ensure all alias pages follow the same format (like we do with the link labels, ensuring it spells exactly "More information:", etc.), and then
  2. implement the upcoming rule that checks that a link (or N/A) is present in a way that ignores the alias pages (which should be easily identifiable if the point above is implemented).
bl-ue commented 3 years ago

👍🏻. What if an alias has it's own particular page which documents the fact that it is an alias and links to the source command's page?

I'm inclined to require links on all alias pages, and ensure they are identical to those of the source pages.

waldyrious commented 3 years ago

I don't understand what you mean. Are you suggesting to use the "More information" field in alias pages to link to the original pages, rather than the example format that was proposed in #5299?

bl-ue commented 3 years ago

Sorry, that wasn't very coherent 😛

No, I was that an alias page should (must) have the exact same link as the source page. For example, if abc.md has a link to https://abc.com/, then def.md, which is an alias page to abc.md, should have a link https://abc.com/.

waldyrious commented 3 years ago

That seems redundant and even noisy IMO. The alias page should be as short as possible and contain only the information needed to allow the user to find the correct page. In fact, I'm even thinking that we might want to use a more compact format, such as

# foo

> Alias of `bar`.

(though this format is something to be discussed at #5299, not here).

bl-ue commented 3 years ago

About the link: I agree. About the compact format: so zero examples? I'm not sure the linter would like that.

waldyrious commented 3 years ago

If the linter will have an exception for alias pages so it won't require a link in those cases, then it can just as well do the same for requiring examples.

patricedenis commented 3 years ago

Hi I was trying to add pinky.md but then I found that it was already included from Pull Request #2284 and commit #e4c03937386. We may tick the case above, don't we?

Oh no, I nevermind this issue is to add links. I'll do it right now ^^

marchersimon commented 3 years ago

Should I move my list to a seperate issue, so it's possible to scroll and discuss here and keep track of pages in the new issue?

sbrl commented 3 years ago

@marchersimon perhaps a good idea, since it is quite long haha

Have this as the meta discussion issue, and a new one as a tracking issue.

marchersimon commented 3 years ago

Done. I left out finished pages to avoid getting a notification for every PR which was linked in the list.

marchersimon commented 2 years ago

Should I also close this issue or is there something left to discuss?