{"id":46092755,"url":"https://github.com/logic-finder/proofread","last_synced_at":"2026-03-01T18:03:03.623Z","repository":{"id":320841173,"uuid":"1083507847","full_name":"logic-finder/proofread","owner":"logic-finder","description":"removes spaces at EOL and adds a newline at EOF","archived":false,"fork":false,"pushed_at":"2025-11-16T13:12:21.000Z","size":124,"stargazers_count":0,"open_issues_count":4,"forks_count":0,"subscribers_count":0,"default_branch":"core","last_synced_at":"2025-11-16T15:13:57.408Z","etag":null,"topics":["c","eof","eol","text-formatter","utility"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/logic-finder.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-26T06:53:23.000Z","updated_at":"2025-11-16T12:59:25.000Z","dependencies_parsed_at":"2025-10-26T09:19:51.920Z","dependency_job_id":"0adb931b-5af9-4522-9503-b3ba44dc50c0","html_url":"https://github.com/logic-finder/proofread","commit_stats":null,"previous_names":["logic-finder/proofread"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/logic-finder/proofread","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logic-finder%2Fproofread","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logic-finder%2Fproofread/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logic-finder%2Fproofread/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logic-finder%2Fproofread/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/logic-finder","download_url":"https://codeload.github.com/logic-finder/proofread/tar.gz/refs/heads/core","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logic-finder%2Fproofread/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29977967,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T16:35:47.903Z","status":"ssl_error","status_checked_at":"2026-03-01T16:35:44.899Z","response_time":124,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","eof","eol","text-formatter","utility"],"created_at":"2026-03-01T18:03:02.961Z","updated_at":"2026-03-01T18:03:03.616Z","avatar_url":"https://github.com/logic-finder.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PROOFREAD\n**proofread** - removes spaces at EOL (if any) and adds a newline at EOF (if not exist)\n```bash\nproofread [-l] [-f] [--dry-run[=(full|line)]] [-]\nproofread [-l] [-f] [--dry-run[=(full|line)]] [--mute] + [--] \u003cfile\u003e...\nproofread [-l] [-f] [--keep[=\u003cpath\u003e]] [--mute] + [--] \u003cfile\u003e...\nproofread (-h | --help)\nproofread (-v | -vv | -vvv)\n```\n\n### Demo\n[This video](https://youtu.be/fh_IJph_kn4?t=110) shows how I made this program.\n\n## Installation\n```bash\n$ make install insdir=\u003cabsolute-path\u003e\n```\nThe `make install` call builds `proofread`, the executable, and installs the program under the directory given by `\u003cabsolute-path\u003e`. The path must not be a relative path. The program needs this path so as to work properly.\n\nThe structure of the installation directory is as follows:\n```bash\n$ tree \u003cabsolute-path\u003e\n\u003cabsolute-path\u003e\n├── bak\n├── dat\n│   ├── proofread.1\n│   ├── proofread.1.txt\n│   └── version.txt\n└── proofread\n\n3 directories, 4 files\n```\n\n## Usage\n### Checking for EOL and EOF Problems\n```bash\n# Reads one file from stdin and prints to stdout\n$ proofread -lf --dry-run=line - \u003c input.txt\n\n# Reads multiple files and prints to stdout\n$ proofread -lf --dry-run=line + -- a.txt b.txt c.txt\n```\n\n### Fixing EOL and EOF Problems\n```bash\n# Fixes the problem in the input and overwrites to it\n$ proofread -lf + -- input.txt\n\n# Fixes the problem in the input and keeps it under a directory\n$ proofread -lf --keep=backup/ + -- input.txt\n```\n\n### Pre-commit Hook\nThere is a way to apply **proofread** automatically, when `git commit` is executed, on the files which are staged (by a prior `git add`) and whose state is modified or newly added. The pre-commit hook does this task. Its behavior differs depending on whether the file has local changes or not. If it does, the hook updates the index only. Otherwise, the hook updates both the index and the worktree.\n\nIn order to use it, the hook must be compiled first and installed under the `.git/hooks` directory of the desired git repository:\n```bash\n$ make hook EXT_LIST='\".c\", \".h\"' SHUTUP=1\n$ cp hook/pre-commit \u003cgit-repo\u003e/.git/hooks\n```\n\nTwo variables affect the behavior of the hook:\n- `EXT_LIST` defines the extensions to apply **proofread**. The value must be enclosed with a single-quote mark and each extension must be enclosed with a double-quote mark. The extensions are comma-separated. If not specified, all of the files which meet the above conditions are subject to the application.\n- `SHUTUP` sets the verbosity of the hook. The value of **1** means **true** and **0**, **false**.\n\nIf the hook is executed with `l` option, it prints out the extension list at stdout, exiting with the status code 2.\n\n## Verification on Tags and Commits\nIf one is in need of verifying the tags and commits, please type `git show maintainer-pgp-pub` and follow the instruction written in it.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flogic-finder%2Fproofread","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flogic-finder%2Fproofread","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flogic-finder%2Fproofread/lists"}