Giter Site home page Giter Site logo

emacs-hnreader's Introduction

Emacs hnreader - Read Hacker News in Emacs

https://cdn.rawgit.com/syl20bnr/spacemacs/442d025779da2f62fc86c2082703697714db6514/assets/spacemacs-badge.svg

Front page:

docs/screenshot.png

Comments:

docs/screenshot2.png

docs/screencast.gif

Intro

This package renders hackernews website at https://news.ycombinator.com/ in an org buffer. Almost everything works.

The org-mode buffer feature interactive links similar to html.

Features that are not supported are account related features. You cannot add comment, downvote or upvote.

Install

Manual: TBD

Melpa

https://melpa.org/packages/hnreader-badge.svg

Spacemacs layer:

https://github.com/thanhvg/spacemacs-eos

Dependencies

promise and request are required. User must have org-mode 9.2 or later installed also.

Commands

  • hnreader-news: Load news page.
  • hnreader-past: Load past page.
  • hnreader-ask: Load ask page.
  • hnreader-show: Load show page.
  • hnreader-newest: Load new link page.
  • hnreader-more: Load more.
  • hnreader-back: Go back to previous page.
  • hnreader-comment: read an HN item url such as https://news.ycombinator.com/item?id=1 this is handy when you have the link and want to read it in emacs, takes url as param
  • hnreader-org-insert-hn-link: insert hn link to org buffer, take url as param

Remarks

Listing buffer is called *HN* Command buffer is called *HNComments*

Most of links in Hacker News buffer will run elsip commands on clicking, by default org-mode will ask you for confirmation. You can disable org confirm message on clicking

(setq org-confirm-elisp-link-function nil)

But it is not recommended by the org-mode guide: just change it to ‘y-or-n-p’ if you want to confirm with a single keystroke rather than having to type “yes”.

Recommended settings for eww

eww can be used to view story. You may want to set these settings for web page display inside Emacs:

(setq shr-width 75)
(setq shr-use-fonts nil)

When displaying pictures srolling over them is jumpy. You can try this hack in your config:

(with-eval-after-load "shr"
    (defun shr-put-image (spec alt &optional flags)
      "Insert image SPEC with a string ALT.  Return image.
SPEC is either an image data blob, or a list where the first
element is the data blob and the second element is the content-type.
Hack to use `insert-sliced-image' to avoid jerky image scrolling."
      (if (display-graphic-p)
          (let* ((size (cdr (assq 'size flags)))
                 (data (if (consp spec)
                           (car spec)
                         spec))
                 (content-type (and (consp spec)
                                    (cadr spec)))
                 (start (point))
                 (image (cond
                         ((eq size 'original)
                          (create-image data nil t :ascent 100
                                        :format content-type))
                         ((eq content-type 'image/svg+xml)
                          (create-image data 'svg t :ascent 100))
                         ((eq size 'full)
                          (ignore-errors
                            (shr-rescale-image data content-type
                                               (plist-get flags :width)
                                               (plist-get flags :height))))
                         (t
                          (ignore-errors
                            (shr-rescale-image data content-type
                                               (plist-get flags :width)
                                               (plist-get flags :height)))))))
            (when image
              (let* ((image-pixel-cons (image-size image t))
                     (image-pixel-width (car image-pixel-cons))
                     (image-pixel-height (cdr image-pixel-cons))
                     (image-scroll-rows (round (/ image-pixel-height (default-font-height)))))
                ;; When inserting big-ish pictures, put them at the
                ;; beginning of the line.
                (when (and (> (current-column) 0)
                           (> (car (image-size image t)) 400))
                  (insert "\n"))

                (insert-sliced-image image (or alt "*") nil image-scroll-rows 1)
                ;; (if (eq size 'original)
                ;;     (insert-sliced-image image (or alt "*") nil image-scroll-rows 1)
                ;;   (insert-image image (or alt "*")))

                (put-text-property start (point) 'image-size size)
                (when (and shr-image-animate
                           (cond ((fboundp 'image-multi-frame-p)
                                  ;; Only animate multi-frame things that specify a
                                  ;; delay; eg animated gifs as opposed to
                                  ;; multi-page tiffs.  FIXME?
                                  (cdr (image-multi-frame-p image)))
                                 ((fboundp 'image-animated-p)
                                  (image-animated-p image))))
                  (image-animate image nil 60))))
            image)
        (insert (or alt "")))))

emacs-hnreader's People

Contributors

csantosb avatar sillyfellow avatar thanhvg avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.