Comments (9)
I had a crack at it. Here is a quick hack for the posts (not the drafts).
The trick is to use directory-files-recursively
instead of directory-file
(defun org-static-blog-get-post-filenames ()
"Returns a list of all posts."
- (directory-files
- org-static-blog-posts-directory t ".*\\.org$" nil))
+ (directory-files-recursively
+ org-static-blog-posts-directory ".*\\.org$" nil))
(defun org-static-blog-get-draft-filenames ()
"Returns a list of all drafts."
Then we have to correctly match html files with the org-files.
The user is automatically prompted to create non existing directories when org-static-blog-publish
is called, thanks to some emacs' magic.
@@ -147,13 +147,15 @@ re-rendered."
(defun org-static-blog-matching-publish-filename (post-filename)
"Generate HTML file name for POST-FILENAME."
(concat org-static-blog-publish-directory
+ (file-name-directory
+ (file-relative-name post-filename org-static-blog-posts-directory))
(file-name-base post-filename)
".html"))
The save function has to be slightly changed to keep the directory structure:
@@ -167,7 +169,9 @@ The buffer is disposed after the macro exits (unless it already
existed before)."
`(save-excursion
(let ((current-buffer (current-buffer))
- (buffer-exists (get-buffer (file-name-nondirectory ,file)))
+ (buffer-exists (get-buffer (concat
+ (file-relative-name ,file org-static-blog-posts-directory)
+ (file-name-nondirectory ,file))))
(result nil))
(if buffer-exists
(switch-to-buffer buffer-exists)
Finally, the URLs need to reflect the directory structure too.
@@ -255,8 +259,11 @@ Preamble and Postamble are excluded, too."
(defun org-static-blog-get-url (post-filename)
"Generate a URL to the published POST-FILENAME."
+ (concat
+ (file-name-directory
+ (file-relative-name post-filename org-static-blog-posts-directory))
(file-name-nondirectory
- (org-static-blog-matching-publish-filename post-filename)))
+ (org-static-blog-matching-publish-filename post-filename))))
;;;###autoload
(defun org-static-blog-publish-file (post-filename)
`
If you guys think its on the good track we can polish it up once I am done with the semantic HTML PR.
from org-static-blog.
One alternative approach I would like to see is a user provided function that returns the output target. It could take in the existing file path, or the file path + time, then you could return /path/to/site/2018/05/03/post.html
-- The default value could just be a function that returns post.html
for existing stuff, but then users could use whatever they like
from org-static-blog.
That's a great idea! Do you want to create a pull request and make sure that it works?
from org-static-blog.
Sorry for the late reply; I've been swamped lately.
If I manage to find some free time I'll try to put together a PR and send it over, but otherwise, feel free to beat me to it :)
from org-static-blog.
Cool, no rush!
from org-static-blog.
Cool! I'll look forward to the PR!
from org-static-blog.
Cool idea! I like it!
from org-static-blog.
I believe this is done now as of #83
from org-static-blog.
I think so too, thanks! Closing; but feel free to reopen if needed.
from org-static-blog.
Related Issues (20)
- Cannot output files to blog directory HOT 5
- Have `index.html` and other `html` files in different locations HOT 1
- Unknown "nil" back-end: Aborting export HOT 7
- Annoying warnings HOT 1
- Is this still maintained? HOT 3
- Last package (20221018.933) is broken. Just a typo. HOT 2
- Backend unset or broken: `org-export-barf-if-invalid-backend: Unknown "nil" back-end: Aborting export` HOT 4
- Is there a way to run multiple blogs with this package? HOT 1
- Icorrect table rendering HOT 6
- Show only post titles in multipost pages (no preview, no contents) HOT 4
- Is it possible to support navigation in tags.html HOT 1
- Why everything get's re rendered? HOT 6
- Add a publish-to (eg local/prod) function? HOT 2
- Perhaps use `org-collect-keywords` to extract date? HOT 5
- Drafts are published to directory relative to posts directory instead of drafts directory HOT 6
- Warning : 'the function ‘list-length’ is not known tobe defined.' HOT 1
- customize index page HOT 3
- Publish not working all the time HOT 1
- Generated blog posts goes to "example.com/$file-name" HOT 1
- Switch from ox-publish to org-static-blog HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from org-static-blog.